C++程序课程设计报告_21点游戏
C++面向对象程序设计
课程设计报告
设计题目: 21点游戏 专业班级: 学生学号: 学生姓名: 指导教师: 黄旭红、蔡志明
一、 设计任务分析
1、21点游戏介绍
21点游戏是一个古老的扑克游戏,游戏的规则是:各个 参与者设法使自己的牌达到总分21而不超过这个数值。扑克牌的分值取它们的面值,A充当1或者11分,J,Q和K人头牌都是10分。
庄家VS1~7个玩家。在开局时,包括庄家在内的所有参与者都有两张牌。玩家可以看到他们的所有牌以及总分,而庄家有一张牌暂时是隐藏的。接下来,只要愿意,各个玩家都有机会依次再拿一张牌。如果是玩家的总分超过了21(称为引爆),那么这个玩家就输了。在所有玩家都拿了额外的牌后,庄家将显示隐藏的牌。只要庄家的总分等于或小于16,那么他就必须再拿牌。如果庄家引爆了,那么还没有引爆的所有玩家都将获胜,引爆的玩家打成平局。否则,将余下的各玩家的总分与庄家的总分做比较,如果玩家的总分大于庄家的总分,则玩家获胜。如果二者的总分相同,则玩家与庄家打成平局中。
2、实现以下功能: 1) 洗牌; 2) 发牌; 3) 隐藏或显示牌; 4) 计算总分; 5) 判断胜负。
3、界面显示要求:
多少人加人游戏? (1~7):2 输入第 1 位玩家的姓名:张三 输入第 2 位玩家的姓名:李四 游戏开始
庄家:<隐藏>梅花 7
张三:红桃 7 方块 J 总分值 17 李四:红桃 J 红桃 3 总分值 13
张三,你想再要一张牌吗( y , n ) ? n 李四,你想再要一张牌吗( y , n ) ? y
李四:红桃 J 红桃 3 梅花 10 总分值 23 李四引爆!庄家:方块 10 梅花 7 总分值 17 张三,唉,你打平局了! 李四,对不起,你输了! 你想再玩一次吗( y , n ) ?
二、 21点游戏流程
三、 主要数据结构
扑克版结构体: typedef enum { N,KING
}RankType;
typedef enum { 桃)
CLUBS,DIAMONDS,HEARTS,SPADES
//扑克牌花色:CLUBS(梅花),DIAMONDS(方块),HEARTS(红桃)和SPADES(黑//扑克牌面值:ACE(A),TWO(2)~TEN(10),JACK(J),QUEEN(Q),KING(K) ACE=1,TWO,THREE,FOUR,FIVE,SIX,SEVEN,EIGHT,NINE,TEN,JACK,QUEE
}SuitType;
struct Card {//扑克牌结构体 };
RankType rank; //扑克牌面值 SuitType suit; //扑克牌花色
四、 21点游戏类设计
五、 源代码
#include<iostream> //#include<stdlib> using namespace std; typedef enum {
//扑克牌面值:ACE(A),TWO(2)~TEN(10),JACK(J),QUEEN(Q),KING(K)
ACE=1,TWO,THREE,FOUR,FIVE,SIX,SEVEN,EIGHT,NINE,TEN,JACK,QUEEN,KING }RankType; typedef enum {
//扑克牌花色:CLUBS(梅花),DIAMONDS(方块),HEARTS(红桃)和SPADES(黑桃) CLUBS,DIAMONDS,HEARTS,SPADES }SuitType; struct Card {
//扑克牌结构体
RankType rank; //扑克牌面值 SuitType suit; //扑克牌花色 };
ostream &operator<<(ostream &outStream,const Card &card) //操作结果:重载<<运算符 {
//输出花色
if(card.suit==CLUBS) outStream<<"梅花"; //CLUBS表示梅花
else if(card.suit==DIAMONDS) outStream<<"方块";//DIAMONDS表示方块 else if(card.suit==HEARTS) outStream<< "红桃"; //HEARTS表示红桃 else if(card.suit==SPADES) outStream<<"黑桃"; //SPADES表示黑桃 //输出面值
if (card.rank==ACE) outStream<<"A"; //ACE表示A
else if(card.rank==JACK) outStream<<"J"; //JACK表示J else if(card.rank==QUEEN) outStream<<"Q"; //JACK表示Q else if(card.rank==KING) outStream<<"K"; //JACK表示K else cout<<(int)card.rank; return outStream; }
#include<ctime>
#define LEN_OF_MAX_NAME 21 //最大姓名长度 using namespace std;
class GameOf21Point //21点游戏类GameOf21Point声明 {
private:
Card deck[52]; //一副扑克牌
int dealPos; //发牌位置
Card hands[8][21];//hand[0]存庄家的牌,hand[1~7]存各玩家的牌 int numOfCard[8]; //庄家(numOfCard[0])及玩家的牌数 char name[8][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>0)的当前状态
Card DealOneCard(){return deck[dealPos++];} //发一张扑克牌 public:
//方法声明
GameOf21Point(); //无参构造函数 virtual ~GameOf21Point(){}; void Game(); };
//初始化扑克牌,发牌位置,庄家与各玩家手中的扑克牌数 GameOf21Point::GameOf21Point() {
int curPos=0; //当前扑克牌位置
char* str;
for(int suitPos=0;suitPos<4;suitPos++) //花色 {
for(int rankPos=1;rankPos<=13;rankPos++) //面值 {
deck[curPos].suit=(SuitType)suitPos; //花色 deck[curPos].rank=(RankType)rankPos; //面值 curPos++; } }
cout<<"多少人加入游戏?(1~7):"; str =new char[1]; cin>>str;
numOfPlayer=atoi(str);
while (numOfPlayer<1||numOfPlayer>7) //限制人数在1~7之间 {
cout<<"玩家人数限定在1~7个,请重新输入人数:"; cin>>str;
numOfPlayer=atoi(str); }
dealPos=0; //发牌位置 int i=0; //临时变量
//庄家numOfCard[0]及玩家numOfCard[1~7]手中的扑克牌张数 for(i=0;i<=numOfPlayer;i++) numOfCard[i]=0;
strcpy(name[0],"庄家");
for(i=1;i<=numOfPlayer;i++) //玩家姓名 {
cout<<"输入第"<<i<<"玩家的姓名"; cin>>name[i]; }
cout<<"游戏开始"<<endl; }
//洗牌,通过产生随机数,交换随机数对应位置的牌和当前位置的牌 void GameOf21Point::Shuffle() {
srand((unsigned)time(NULL)); //初始化随机种子 for(int curPos=51;curPos>0;curPos--) {
int pos=rand()%(curPos+1); //产生0~curPos之间的随机数 Card temp; //定义一个临时变量用于交换牌 temp=deck[pos];
deck[pos]=deck[curPos]; deck[curPos]=temp; } }
int GameOf21Point::GetTotalScore(Card hand[21],int n) {
int pos;
int totalScore=0;
for(pos=0;pos<n;pos++) //循环求最大分值(A的分值为11) {
if(hand[pos].rank==ACE)totalScore+=11; //A的分值为11
else if(hand[pos].rank>TEN)totalScore+=10; //J,Q,K的分值为10
相关推荐:
- [初中教育]婚姻家庭法学教学教案
- [初中教育]浅谈小学语文教学中的创新教育
- [初中教育]中华人民共和国侵权责任法2009
- [初中教育]2016-2022年中国薄膜太阳能电池行业发
- [初中教育]多级轻型井点降水的应用
- [初中教育]外语教学法流派介绍和简评
- [初中教育]实验一、典型环节及其阶跃响应
- [初中教育]内蒙古2012-2013学年度国家奖学金获奖
- [初中教育]移动通信营销渠道管理探讨
- [初中教育]初三化学第一学期第一第二章基础知识点
- [初中教育]一天的食物教学设计
- [初中教育]光导照明系统的基本结构及工作原理
- [初中教育]长春市十一高、东北师范大学附属中学、
- [初中教育]“十三五”规划重点-配重式装卸车项目
- [初中教育]领导方法和领导艺术
- [初中教育]第三章 植物病虫草鼠害诊断与防治基
- [初中教育]2019届九年级语文上册 第二单元 6纪念
- [初中教育]甲级单位编制水豆腐项目可行性报告(立
- [初中教育]Ch8-1补充 09101数据库系统原理及应用-
- [初中教育]2017-2023年中国吊装设备行业市场分析
- 制作毕业纪念册需要哪些材料
- 2015-2016学年高二化学苏教版选修4课件
- 哈佛管理导师-创建商业案例
- 职场交际中的谈吐礼仪知识与职场会议接
- 中国糕点及面包行业发展现状与竞争战略
- 沂河“12·7”洪水茶山拦河坝
- 管道水流量计算公式
- 4-2发电机火灾事故处置方案
- 数字信号处理实验五
- 2009年经济师(中级)金融专业知识全真试
- 历史街区保护规划--04历史文化遗产保护
- 宁夏回族自治区中小学职称评价标准
- 评先评优测评表
- 圆的切线证明及线段长求解在在中考中的
- 【解析版】2015年江苏省南京外国语学校
- 人教版八年级上册科学第一章习题精华
- 责任心与执行力
- SA8000社会责任管理体系标准培训
- IgA肾病的饮食应注意
- 杭州市建设工程文件归档整理方案(试行)




