程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> vc教程 >> 模擬簡單猜撲克牌大小的 Win32 控制台游戲

模擬簡單猜撲克牌大小的 Win32 控制台游戲

編輯:vc教程

  在壇子裡經常能看到MFC編制的GUI游戲,功能強大,界面美觀,人機交互便利等優點是控制台程序是無可比擬的.但對於剛初步了解 C/C++的朋友們是無法短期內能學會編寫MFC游戲的。於是小弟采用 Win32 控制台 項目做了一個C++的小游戲,希望對於那些朋友,對大一, 大二的學生編寫字符界面的小程序有所幫助。

  該游戲的名稱不妨命名為Hi(gh)-Low,其玩法和規則如下:

  1、玩法

  • ①洗牌:每盤游戲開始之前,使撲克牌的排列順序充分隨機;
  • ②發牌:每局開始時,從未使用的撲克牌集合中順序發給玩家5張撲克牌(明牌);
  • ③猜點:從未使用的撲克牌集合中按順序取出一張撲克牌(即莊家的暗牌),要求玩家將手中的第一張撲克牌和這張莊家的暗牌進行比較,確定哪張牌大?
  • ④積分:玩家確定回答後,翻開被猜的撲克牌(暗牌變成明牌),同時根據玩家回答的正確與否顯示相應的提示,並為玩家的游戲成績積分。然後將這兩張 已經比較過的牌回收到已經使用過的撲克牌集合中,玩家手中的下一張克牌成為新的一張撲克牌;
  • ⑤對玩家手中剩余的撲克牌順序重復第③和④步操作,直至玩家手中不再有剩余的撲克牌時,一局游戲結束;
  • ⑥如果未使用的撲克牌集合中的撲克牌數目多余10張,則從第②步開始進行本盤游戲的下一局;
  • ⑦詢問玩家是否繼續進行下一盤游戲,如果繼續,則從第①步開始進行新的一盤游戲;

  2、規則

  • ①積分規則:

      1)、猜中1次,積1分;猜錯1次,不積分。

      2)、1局中連續猜中3次,除正常積分外獎勵1分;連續猜錯3次,罰1分。

      3)、1局全部猜中,除正常積分外獎勵3分;1局全部猜錯,罰3分。

      4)、玩家的最低積分為0,即不出現負分。

  • ② 牌面大小比較規則:每張撲克牌的牌面由花色(梅花Club、方塊Diamond、紅心Heart和黑桃Spade)和牌點(A, 2, 3, 4, 5, 6, 7, 8, 9, 10, J, Q, K)組成。

  確定兩張撲克牌牌面大小的規則有兩條:

  • 1)、如果兩張牌面的牌點不同,則牌面大小僅與牌點有關,而與牌面的花色無關。牌點的大小順序為:

      2 < 3 < 4 < 5 < 6 < 7 < 8 < 9 < 10 < J < Q < K < A

  • 2)、如果兩張牌面的牌點相同,則牌面大小僅與牌面的花色有關。花色的大小順序為:Club < Diamond < Heart < Spade。

  程序運行後主界面如下:

  圖一 Hi_Low游戲界面

  分析得知,我設計了三個類,分別是:

  

  • ① 將撲克牌對象設計為一個類Card,用於定義標識每一張特定撲克牌的牌面(花色和牌點)和顯示操作。其中特意說明的屬性是 索引標識屬性index作為每張撲克牌唯一標識,是確定牌面花色和牌點的依據。它的值域為0 - 53的整數值,每一個index值與一張特定牌面的花色和牌點相對應:

      0 - 12對應梅花Club的A 2 3 4 5 6 7 8 9 10 J Q K;

      13 - 25對應方塊Diamond的A 2 3 4 5 6 7 8 9 10 J Q K;

      26 - 38對應紅心Heart的A 2 3 4 5 6 7 8 9 10 J Q K;

      39 - 51對應黑桃Spade的A 2 3 4 5 6 7 8 9 10 J Q K。

      52對應小王牌L Trump,53對應大王牌B Trump

      顯然,index除以13所得到的整數商可以表示花色,而index模13所得到的余數恰恰是牌點(大小王牌的index值除外) 牌面顯示屬性face:在圖形用戶界面的應用程序中該屬性是描述牌面圖形的 復雜圖形類;而在控制台文本界面的應用程序中該屬性是字符數組類型,用於存放描述牌面的字符串。例如:“C-A”表示梅花A,“D-6”表示方塊6,“H-10” 表示紅心10,“S-Q”表示黑桃Q。

      

  • ② 將計算游戲積分所需要屬性和操作封裝在一個類中,該類命名為Counter。需要特別說明地是 連續標志屬性sequence,用於存放玩家當前猜點操作的連續狀態:

      連續猜中時,sequence > 0(連續猜中的次數);

      連續猜錯時,sequence < 0(連續猜錯的次數);

      即未連續猜中,也未連續猜錯時,sequence = 0。

      

  • ③ 根據撲克牌游戲的玩法和規則,將撲克牌游戲設計成一個類。在類的定義中描述該游戲所需要使用的撲克牌集合(container)和所需要的輔助屬性,以及滿足游戲玩法和 規則的各種操作。我的撲克牌游戲類直觀地命名為HiLow。同樣,已用牌索引屬性usedIndex:指示container中游戲已經使用過的撲克牌的 索引。每盤游戲開始時,該屬性應被初始化為0(container的第一個元素的 下標值);以後每次從container獲取一張牌(為玩家發牌,取一張被猜的牌) 後,屬性值加1。該屬性的值域為0<=usedIndex <=51。玩家牌索引屬性playIndex:指示當前玩家手中正在進行猜點操作的牌在container 中的索引。每局游戲開始時,該屬性值 = usedIndex+1;以後每次猜點操作完成後, 屬性值加1。該屬性的值域為0 <=playIndex <=51。

  綜上,系統類圖如下:

  圖二 Hi_Low系統類圖

  至於具體的編碼實現請參考源代碼例子。

本文示例代碼或素材下載

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved