目 录
1、课题设计内容与主要功能···························(1)
2、课题分析·································(1)—(7) (1)项目实现方法··························(1)--(2) (2)类声明······································(3) (3)核心算法代实现代码····················(3)--(7)
3、实现步骤··································(7)—(8)
4、测试与结论·······························(9)—(11)
5、总结····································(11)—(12)
6、参考书目········································(12)
7、附件····································(13)—(28)
6
一、课题设计内容与主要功能
(1)定义一副扑克牌(不包括两个王),四种花色十三个点数共52张牌,游戏过程中系统自动随机从这52张牌中抽牌发给参与者。
(2)将J、Q、K的点数改为10点,A的点数可由系统自动在1和11之间选择最佳的点数。 (3)系统提示输入玩家数(1 ~4)、玩家姓名以及玩家所带的金钱数。
(4)系统提示各玩家输入所押的金钱数,新的一局开始时可以重新设定押的金钱数。
(5)游戏开始,系统先自动给每位参与者发两张牌,并且隐藏庄家的第一张牌,然后依次询问玩家是否需要继续发牌,玩家输入“Y”,则再发一张牌给该玩家,玩家输入“N”,则跳过该玩家。
(6)当所有玩家都不再要牌,输出玩家总分值、胜负情况,并输出各参与者的余额。 (7)玩家再押钱,新的一局游戏开始。
(8)当有玩家的金钱等于0时,该盘游戏结束,统计各位玩家胜的局数和平局的局数,输出统计结果。提示玩家是否选择重新再来一盘。
二、课题分析
1、项目实现方法 (1)函数调用关系 主函数Main game_of_21_point。头函数 实用程序包utility.h头函数 定义52张牌的头函数card.h 游戏运行函数Game( ) 状态显示函数ShowStatus() 数据初始化函数GameOf21Point( ) 洗牌函数Shuffle( ) 点数计算函数GetTotalScore( )
7
(2)游戏过程示意图
开始界面 选择1~4位玩家并输入各玩家的姓名及金钱数 开始游戏 玩家输入押的金钱数,给每位参与者随机发两张牌 给该玩家发一张牌 显示庄家及玩家状态是 判断各参与者点数是否大于21 否 是 问玩家是否还要牌 否 显示各参与者状态,统计总点数.输出胜负情况并计算输出金钱余额 是否有玩家金钱为0 否 是 输出各玩家战绩 是 提问是否再来一盘 否 退出游戏 8
2、类声明
class GameOf21Point {
private:
// 数据成员:
Card deck[52]; // 一副扑克牌 int dealPos; // 发牌位置
Card hands[4][21]; // hand[0]存储庄家手中的牌, hand[1~4]存储玩家手中的牌
int numOfCard[4]; // 庄家(numOfCard[0])及玩家(numOfCard[1~4])手中的牌数 char name[4][LEN_OF_MAX_NAME]; // 庄家与玩家姓名 int numOfPlayer; // 玩家人数
// 辅助函数
void Shuffle( ); // 洗牌, 将扑克牌混在一起以便产生一种随机的排列 int GetTotalScore(Card hand[21], int n); // 返回一手扑克牌的总分值 void ShowStatus(int num, bool hideFirstCardAndTotalScore = false); // 显示庄家(对应num=0)或玩家(对应num=1~4)的当前状态 Card DealOneCard( ){ return deck[dealPos++]; } // 发一张扑克牌
public:
// 方法声明
GameOf21Point( ); // 无参数的构造函数
virtual ~GameOf21Point( ){ } // 析构函数,当一盘游戏结束时,清空数据。 void Game( ); // 运行游戏 };
3、核心算法及实现代码 (1)枚举结构体
typedef enum {
A,2,3,4,5,6,7,8,9,10,J,Q,K十三张牌; } RankType; // 扑克牌面值
typedef enum {
梅花,红桃,黑桃,方块 四种花色; } SuitType; // 扑克牌花色
9
(2)数据结构体
struct Card // 扑克牌结构体 {
前面枚举的十三张牌的面值; 前面枚举的四种花色; };
struct Player // 玩家金钱和战绩结构体 {
玩家金钱总数; 玩家押的金钱数; 玩家赢的局数; 玩家打平局的局数; };
(3)功能函数模块
数据初始化函数GameOf21Point()//初始化扑克牌,各参与者手中的牌数、姓名和金钱等 GameOf21Point::GameOf21Point( ) {
当前扑克牌位置在庄家;
for (int 牌花色= 0; 牌花色< 4; 牌花色++) {
for (int 牌面值= 1; 牌面值<= 13; 牌面值++) {
给curPos位置的牌赋花色; 给curPos位置的牌赋面值; 牌的位置移到下一个; } }
输出提示 \多少人加入游戏?(1~4):\ 输入玩家人数;
while (玩家人数小于1或者大于4) {
输出玩家人数不合格\人数只能在1~4之间, 请重新输入人数:\ 重新输入玩家人数; }
初始化发牌位置,从庄家开始发牌; 定义临时变量i;
for (i = 0; i <=玩家人数; i++) 初始化参与者手中的扑克牌数为0;
让庄家name[0]的输出名为“庄家”; for (i = 1; i <= 玩家人数; i++) {
提示输入玩家姓名 \输入第\位玩家的姓名:\ 输入玩家姓名;
10