如何設計21點遊戲

2021-06-22 05:08:47 字數 2372 閱讀 6799

21點遊戲的設計能夠充分體現c語言結構化程式設計的思想,如果你是c語言的初學者,本文對你一定有幫助.

21點遊戲的規則如下:撲克牌a、2、3、4、、、、、、10、j、q、k、大小鬼分別代表數字1、2、3、4、、、、、、10、11、12、13、21;人和電腦輪流坐莊,莊家先發牌。勝利條件:將所取牌點數相加湊成 "和"是21,誰先湊成21就勝出,如果沒有人湊到"和"是21,就定"和"最接近21且小於21就勝出。每人至多可取5張撲克牌。要注意"和"超過21者誰先爆掉也就是輸了,如果都爆了,點數小的勝;當點數相同時,莊家勝。

首先,理清遊戲的執行思路是非常關鍵的。面對眾多雜亂的規則,可以先去除無關緊要的細節,這樣細節與遊戲總體的思路沒有關係,只是影響某些過程的處理細節.比如: 每人至多可取5張撲克牌,注意"和"超過21者誰先爆掉也就是輸了,如果都爆了,點數小的勝;當點數相同時,莊家勝。可以概括為」取牌規則和判定規則」,這樣整個遊戲其實就變成了輪流取牌並計分的過程.只是一次取牌結束後可以自行退出,只是不能取5次以上,然後最終用特定的規則來判定勝負.這樣理解的遊戲的整體思路後,即使加入再多的細節也能輕鬆應對.

程式編碼的第一步是什麼?是先宣告變數?寫主函式?我個人喜歡的是先完成子函式模組的設計.把子模組完成之後,更高階的模組就變得容易了.就像蓋樓房一樣,先堆砌基礎的模組總讓我很放心,而一開始就從上層開始讓我有一種懸於空中的感覺。我認為對於小型程式來說,自下而上的設計方式是高效的.

分析的時候從分析主體開始,沒想到設計的時候從細節開始,但是,我小手一抖,就寫出了幾個子模組:

//根據牌點獲取其數值

intvalue(int i)

//電腦取牌

introbot_fetch()

while(map[id]);

map[id] = 1;      //標記為選擇狀態

return robot_value + value(id);

}//玩家取牌

intplayer_fetch()

while(map[id]);

map[id] = 1;      //標記為選擇狀態

int temp = value(id);

printf("\t\t你獲得了%d 點, 現在您有 %d 點了\n", temp, player_value + temp);

return player_value + temp;

}//判斷勝負

voidjudge_win(int flag)

else     if(robot_value> maxnum)

winer = 1; //玩家贏了

else     if(player_value> maxnum)

winer = 0; //電腦贏了

else

printf("\n\t\t%s\n", winer ?"玩家贏了" : "電腦贏了"); }

在設計這些子模組的同時便決定了一些細節:

1.     用隨機數模擬取牌過程

2.     用map陣列記錄牌的選中狀態防止重選.

3.     撲克牌是按數字順序排序的.

也在設計的過程中發現並使用了必要的變數和常量:

1.     玩家和電腦對於的點數

2.     對中間點數,總點數進行巨集定義,增強程式通用性.

做出這些決定是非常自然了,你可以做出個性的不同的決定,比如用陣列記錄每張牌的點數,用區域性變數的引數傳遞代替全域性變數的使用等等.

子模組的設計是非常簡單了,即使乙個c語言的新手對這個遊戲束手無策,仍然可以編出上面的程式,因為在設計的過程中不需要考慮其他的任何細節,只要在乎眼前的問題而已。這和物件導向的封裝思想一樣,c++的封裝更優秀無非就是把子函式整理歸類了.

最後就是用已有的模組搭建函式主題了,也同樣可以輕鬆寫出來:

int main()

while(tolower(get_sign())!= 'n');

printf("\n\t遊戲結束, 您獲得了 %d 點, 電腦獲得了 %d 點\n",player_value, robot_value);

judge_win(flag);

flag = !flag;     //交換莊家

printf("您要繼續遊戲嗎?(y / n)\n");

}while(tolower(get_sign()) != 'n');

return 0;

}上面也有很大預設的規則,不過我想讀者應該能夠看出來,我就不多解釋了.

程式僅用了150行,實現了基本的21點遊戲功能,再此基礎上繼續增加新的功能非常簡單.

如果電腦更加智慧型,可以根據對方的牌數和自己的點數來決定是否繼續選牌,只要改變robot_fetch()函式的一部分就可以了.如果玩家是在賭博,加入金幣制,只要再宣告乙個變數記錄金幣的流失與獲得就可以了.就算從控制台介面轉入windows窗體介面,也許全部的**都要改動,但是流程和思路是不變的,只要懂得控制項的使用就可以.

賭場21點遊戲

在賭場21點遊戲中,玩家可以通過計算牌桌上已經發放的卡牌的高低值來讓自己在遊戲中保持優勢,這就叫21點演算法。根據下面的 每張卡牌都分配了乙個值。如果卡牌的值大於0,那麼玩家應該追加賭注。反之,追加少許賭注甚至不追加賭注。count change cards 12,3,4,5,6 07,8,9 11...

Python 21點小遊戲

建立一副撲克牌 建立莊家 計算機 和玩家 我 發牌 莊家1張,玩家2張 玩家根據自己的牌面與莊家的牌面來選擇是否要牌?詢問方式 如果玩家要牌,則繼續發牌,發牌後判斷是否爆牌。如果爆牌,則玩家負 如果玩家停牌,則莊家開始要牌。如果莊家小於17點,無條件要牌 如果牌面 17,21,無條件停牌 如果莊家大...

24點遊戲設計

24點遊戲設計 問題描述 在數字1 13中隨機生成4個數字,運用加減乘除四則使4個數字的執行結果為24,每個數字僅能使用一次。演算法設計 實現24點運算有如下兩種演算法。演算法一窮舉法。所謂窮舉法就是列出4個數字加減乘除的各種可能性。我們可以將表示式分成以下幾種 首先我們將4個數設為a,b,c,d,...