# 發牌程式

使用隨機取數，我們可以輕易地列出許多的亂數數值，但是，如果要像是撲克牌發牌的情況，每次都會隨機出現一張牌，但是這張牌卻不能和之前的任何一張一樣，因此不能直接很單純地使用隨機取數就可以完成，還需要更多的程式設計的想法以及做法。

如同前面單元中所介紹的，我們要使用2個變數來隨機取數，拿到的索引值如果兩個不同的話，就交換彼此的內容，效換的次數愈多，數字的順序就會愈亂喔。

由於撲克牌共有52張，因此要表示完整的一幅牌就需要準備一個清單，裡面有52個項目，而其中的內容則分別是0\~51，其中0表示黑桃A，1表示黑桃2，12表示黑桃K，13表示紅心A，依此類推。在這裡，撲克牌的花色順序把它設定為黑桃優先，紅心其次，梅花再其次，最後是方塊。

## 準備52張牌

這次，我們放牌的清單命名為deck，然後先準備52張牌如下：

![](/files/-LSybGfdOXj-_4fPGegS)

## 開始洗牌

同和上一單元的方法做洗牌的操作，由於牌有52張，所以重覆次數把它設為50，這樣子牌才可以洗得比較均勻一些，程式積木如下：

![](/files/-LSybhzalinVDGAi1YGs)

## 進行發牌

洗牌完成之後，就可以叫貓咪發牌了。其實，前面的5張，就是我們要的，如下所示：

![](/files/-LSyd_P0ijeluRA-Rreq)

此種方式會讓貓咪逐一說出5張牌的內容，不過，這樣並不容易讓使用者記住，因此，我們再使用另外一個字串變數來把5張牌的內容都加進去，再一次說出來，如下：

![](/files/-LSyeZLnYZqSLuKJSG-t)

改成上面這樣子，在點擊貓咪之後，過一小段時間就可以看到貓咪說出5張牌的結果，如下：

![](/files/-LSyerj8ad6UUqByySyG)

## 分辨出不同的花色&#x20;

前面這樣直接說出牌的號碼，大部份的人都是看不出來到底是哪張牌的。還記得之前有說過把牌分成4組嗎？有了這個概念，拿到任何一個號碼的牌，只要用簡單的除法就可以知道它是什麼花色了。為了方便程式設計，我們再建立一個清單，用來放4個花色，如下：

![](/files/-LT-VTdInR2btw-_7Ot9)

由於牌的編號是從0到51，因此0到12都是黑桃，13到25是紅心，依此類推，我們只要使用除法就可以得知哪一個編號是哪一個花色了。因此，以下的積木就可以得到0到51號的四種花色：

![](/files/-LT-cFuDKcXI0ZCckZkJ)

同理，想要知道每一個花色內的數值大小，使用的是取餘數的函數，程式積木如下：

![](/files/-LT-cTeimRJn7U0iooqD)

為了簡化程式的設計，在此程式中，我們在一開始建立撲克牌清單時，本來是使用編號的方式，現在改為直接找出其花色和大小，修改後的程式積木如下：

![](/files/-LT-d04OvzvXOihhkrdQ)

使用了上述的程式積木之後，重新執行所有的程式積木，此時貓咪所說出來的牌，就不再只是數字而已，而是加上了花色以及大小的牌，讓玩家可以知道到底是拿到什麼牌了。執行的結果如下：

![](/files/-LT-dUXvL2T0iyprZcOw)

執行的過程影片如下：

{% embed url="<https://youtu.be/kGfCYqUTCrE>" %}

另外，如果是A和J、Q、K，同學們是否知道如何修改程式讓它們可以正確地顯示嗎？


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://nkust.gitbook.io/csx/pai-cheng-shi.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
