內中資研 • Nhisc

撲克牌

結合亂數和多道運算規則,並搭配版面裝飾和設計。透過實際專案示範,可以更快學習亂數的使用方式。 此外,可以利用視覺化工具來幫助理解亂數的分佈和特性,例如繪製直方圖或散佈圖。 這樣學生可以直觀看到不同亂數生成方法的效果和差異,提升學習趣味性,並讓理論知識更易理解。

撲克牌遊戲

• 專題基本要求
        • 發出玩家A的5張牌
        • 發出玩家B的5張牌
        • 由小到大,由左到右顯示A的5張牌
        • 由小到大,由左到右顯示B的5張牌
        • 比較兩個人手上的5張牌,輸出勝利者

亂數

• 亂數產生器的用途常用於模擬和取機率值,例如:電腦遊戲中的射擊目標物、 角色扮演遊戲中的攻擊命中率與否的決定,皆是隨機的,否則遊戲就會變得不好 玩,不確定性的遊戲才會好玩。
• 以下為使用不同的 亂數種子所產生的不同亂數序列數值的參考值

• 在某些情況下(特別是設計遊戲時),我們會需要使用到亂數,在 C 語言中提 供了一個 RAND() 函數可以讓我們取得一個亂數,其用法如下。
• RAND()會回傳出一個0~32767之間的數
• 若我們把RAND() % 10 ->會取出0~9之間的整數
• 若光只有RAND()不管你的程式執行多少次所取出來的值都會一樣
• 所以可以多加上SRAND()來改變一開始的亂數值
• SRAND()需要一個參數來當種子

亂數示範

程式碼示例

#include
using namespace std;
int main()
{

int var;
srand(time(NULL));
var = rand()%1000 ;
cout << "here is the random number = "<< var;

}

亂數示例

撲克牌遊戲

第一部:撲克牌結構

想法

• 亂數一張牌存至二維陣列
• 亂數產生1個1~4花色號碼

• 亂數產生1個1~13之號碼
• 問題1:如何確認所發的牌不重覆?
• 問題2 :如何用洗牌法來「真正洗牌」後發5張不重覆的牌呢?
                 (1~52如何對應到每一張牌?)

想法

作法 Ⅰ

統計當下所發出的撲克牌數字、花色,以便後續執行。

作法_1-1

作法 Ⅱ

• 假設f代表花色號碼(1~4),N代表數字(1~13)
• 假設cardnum為1~52的牌號
    • 將每一張牌的花色及數字轉換成1~52的牌號
        cardnum=(f-1)*13+M
    • 將1~52牌號轉換成花色號碼及數字
        F=( (cardnum -1)/ 13 )+1 (對13取商數)
        N= ( (cardnum -1)% 13 ) + 1 (對13取餘數)

做法_1-2

撲克牌遊戲

第二部:印出排型

作法 Ⅰ

透過 迴圈 規則,判斷花色、數字與玩家等數值,並透過美化版面來區分不同花色與數字

做法_2-1