提示输入玩家金钱数\你带了多少钱啊?\ 输入玩家金钱数; }
定义一个变量z等于0; 初始化庄家的金钱为0;
for (i = 1; i <= 玩家人数; i++) {
z的值等于所有玩家的金钱之和; }
定义庄家的金钱数为所有玩家金钱的平均值;
洗牌函数Shuffle( ) // 洗牌, 将扑克牌混在一起以便产生一种随机的排列组合 void GameOf21Point::Shuffle( ) {
设置当前时间为随机数种子
for(int 牌的位置=51; 牌的位置>0; 牌的位置--)//产生随机的位置为curPos的扑克牌 {
int pos=Rand::GetRand(牌的位置+1); //生成0~curPos之间的随机数 调用swap()函数; //交换deck[pos]与deck[curPos]
} }
点数计算函数GetTotalScore( )
int GameOf21Point::GetTotalScore(Card hand[21], int n) // 返回一手扑克牌的总分值 {
定义临时变量pos; 初始化总分值为0;
for(pos=0;pos<手中的牌数;pos++) { 如果手中有张A,总分加11; 如果手中有牌J或Q或K,总分加10; 如果手中的牌是2~10中的,总分加上对应的2~10; }
for(pos=0;总分大于21且pos<手中的牌数;pos++) {
如果手中有张A,总分减10;
} 用return返回总分 }
状态显示函数ShowStatus( ) // 显示各玩家手中的牌和总分值
void GameOf21Point::ShowStatus(int 参与者数,bool hideFirstCardAndTotalScore) {
如果hideFirstCardAndTotalScore为真,隐藏庄家首张牌,输出“不让你看”代替;
否则输出各参与者首张牌; for(int i=1;i<第num位玩家手中的牌;i++)
11
输出各参与者手中其他的牌;
如果hideFirstCardAndTotalScore为假; 输出各参与者的总分;
如果第num位玩家的总分大于21; 输出玩家爆了; }
游戏运行函数Game( ) // 运行游戏 void GameOf21Point::Game( ) {
定义临时变量p和记录局数的变量s; for(p=1;p<=玩家数;p++) {
初始化赢局数为0; 初始化平局数为0; }
定义goto语句的标识符ks,定义s++记录该盘游戏进行的局数; 洗牌;
for(p=1;p<=玩家数;p++) {
输入玩家押的钱; 当玩家押的钱大于余额; {
重新输入玩家押的钱; } }
定义临时变量i,j; 清零庄家手中的牌;
for(i=1;i<=玩家数;i++) 初始化参与者手中的 清零玩家手中的牌; 牌和发牌的位置
复位发牌位置到庄家;
for(i=0;i<2;i++)
调用DealOneCard( )函数,为庄家发两张牌;
调用ShowStatus()函数,显示庄家的状态,隐藏首张牌和总分值。 for (i=1;i<=玩家数;i++) {
for(j=0;j<2;j++)
调用DealOneCard( )函数,为第i位玩家发两张牌; 调用ShowStatus()函数,显示第i位玩家手中的牌和总分值 } 换行;
for(i=1;i<=玩家数r;i++) {
定义goto的标识符Pai,问玩家是否继续要牌; 如果玩家输入“Y” ; {
12
调用DealOneCard()函数,为第i位玩家再发一张牌; 调用ShowStatus(),显示第i位玩家手中的牌; 如果第i位玩家得总分小于21; {
跳转到标识符Pai; } } }
显示庄家手中的牌和总分;
当庄家的点数不大于16; 当庄家的点数不大
{ 于16,庄家必须 调用DealOneCard()函数,给庄家再发一张牌; 再要牌直到大于 显示庄家手中的牌和总分; 16并决定不再要牌 }
输出游戏结果余额; 当各参与者都还有钱; 跳转到标识符ks;
当其中有参与者没有钱了; 输出游戏结果、余额和战绩; }
三、实现步骤
(1)创建card.h头函数
? 定义_CARD_H_
? 定义牌面值和花色为枚举常量并初始化 typedef enum { ??.. } RankType; typedef enum { ???. } SuitType;
? 定义一个结构体表示牌面值和花色
Struct Card {
RankType rank; SuitType suit;
};
(2)创建game_of_21_point.h头函数
? 定义_GAME_OF_21_POINT_H_
13
? 包含头函数card.h
? 定义结构体表示玩家的金钱数、玩家押的金钱数、玩家赢的局数和玩家平的局
数
struct Player {
int money; int yq; int sl; int pj;
};
? 声明类GameOf21Point
? 编写实体部分,包含功能函数: 1) GameOf21Point() 2) Shuffle()
3) GetTotalScore(Card hand[21], int n)
4) ShowStatus(int num,bool hideFirstCardAndTotalScore) 5) Game()
(3)创建实用程序工具包utility.h
? 定义__UTILITY_H__ ? 包含各类头文件
? 包含几个有用的实用函数模块
(4)创建主程序函数main.cpp
? 包含utility.h
? 包含game_of_21_point.h ? 编写main函数主体 {
system(\输出窗口颜色 do
{
GameOf21Point objGame; // 21点游戏对象 objGame.Game(); // 运行游戏 if(Pla[0].money<=0) cout<<\.\ else
cout <<\ } while (UserSaysYes()); // 肯定回符循环, 直到得到否定回答为止
system(\ // 调用库函数system() return 0; // 返回值0, 返回操作系统
}
(5)在vc++ 6.0环境下运行,进行测试、修改。
14
四、测试与结论
运行程序得到如下界面
输入玩家数为6,系统提示错误,重新输入2,然后根据系统提示输入相应内容,得下界面:
输入Y,程序继续运行,按照提示输入相应内容,完成一局游戏。
15