实验一 21点纸牌游戏
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
冰之龙设计
实验一21点纸牌游戏
专业:软件工程班级:09软工学号:1200911041XX 姓名:XXX
实验日期:2010-09-30 实验地点:B102 指导老师:吴景岚
一.实验原理
“21点”是一个古老的扑克牌游戏,游戏规则是:各个参与者设法使自己的牌达到总分21而不超过这个数值。扑克牌的分值取它们的面值,A充当1分或者11分(由玩家自己选择一种分值),J.Q和K人头牌都是10分。
二.实验目的
庄家对付1到7个玩家。在一局开始时,包括庄家在内的所有参与者都有两张牌。玩家可以看到他们的所有牌以及总分,而庄家有一张牌暂时是隐蔽的。接下来,只有愿意,各个玩家都有机会依次再拿一张牌。如果某个玩家的总分超过了21(称为“引爆”),那么这个玩家就输了。在所有玩家都拿了额外的牌后,庄家将显示隐藏的牌。只要庄家的总分等于或小于16,那么他就必须再拿牌,如果庄家引爆了,那么还没有引爆的所有玩家都将获胜。引爆的玩家打成平局。否则,将余下的各玩家的总分与庄家的总分做比较,如果玩家的总分大于庄家的总分,则玩家获胜。如果二者的总分相同,则玩家与庄家打成平局。
三.实验方法
1.首先定义表示扑克牌花色与面值的枚举类型,这样程序可读性更
强
2.其次,方法Game()用来运行游戏,下面为用伪代码描述的整个游戏的流程:
洗牌
给庄家和玩家发最初的二张牌
隐藏庄家的第一张牌
显示庄家和玩家手中的牌
依次向玩家发额外的牌
显示庄家的第一张牌
给庄家发额外的牌
if(庄家引爆)
没有引爆的玩家人赢
引爆的玩家平局
else
for(每个玩家)
if(玩家没有引爆且玩家的总分比庄家大) 宣布玩家赢
else if(玩家的总分与庄家相等) 宣布平局
else 宣布玩家赢
四.实验步骤
(1)建立工程game_of_21_point
(2)将软件包中的utlity.h复制到game_of_21_point文件夹中,并将utility.h加入到工程中。
(3)建立头文件card.h,声明相关用户自定义类型,结构体Card 的运算符 << 进行重载,具体内容如下:
//文件路径名:game_of_21_point\card.h
#ifndef__CARD_H__
#define__CARD_H__
Typedef enum
{ //扑克牌面值:ACE(A),TWO(2)到TEN(10),JACK(J),QUEEN(Q),KING(K)
ACK=1,TWO,THREE,FOUR,FIVE,SIX,SEVEN,EIGHT,NINE,TEN,JACK,QUEEN,KING
} RankType;
Typedef enum
{ //扑克牌花色:(梅花),DIAMONDS(方块),HEARTS(红桃)和SPADES(黑桃)
CLUBS,DIAMONDS,HEARTS,SPADES
} suitType;
Struct card
{ //扑克牌结构体
RankType rank;
suitType suit;
};
Ostream &operator<<(ostream,const card &card)
//操作结果:重载<<运算符
{ //输出花色
if(card.suit==CLUBS) outStream<< “梅花”;
else if(card.suit==DIAMONDS) outStream<<“方块”;
else if(card.suit==HEARTS) outStream<<“红桃”;
else if(card.suit==SPADES) outStream<<“黑桃”;
//输出面值
if(card.rank==ACE) outStream<<“A”;
else if(card.rank==JACK) outStream<<“J”;
else if(card.rank==QUEEN) outStream<<“Q”;
else if(card.rank==KING) outStream<<“K”;
else cout<<(int)card.rank;
return outStream;
}
#endif
(4)建立头文件game_of_21_point.h,声明及实现21点游戏类GameOf21Point.具体内容如下:
//文件路径名:game_of_21_point\game_of_21_point.h
#ifndef__GAME_OF_21_POINT_H__
#define__GAME_OF_21_POINT_H__
#include“card.h”
#define LEN_OF_MAX_NAME 21
//21点游戏类 Gameof21point声明
Class Gameof21point
{ private:
Card deck[52];
int dealpos;
card hands[8][21];
int numofcard[8];
char name[8][LEN_OF_MAX_NAME];
int numofplayer;
void shuffle();
int GetTotalscore(card hand[21],int n);
void showstatus(int num,bool hideFirsrcardAndTotalscore=false);