c++课程设计21点扑克牌游戏.docx
- 文档编号:11819261
- 上传时间:2023-04-03
- 格式:DOCX
- 页数:17
- 大小:69.47KB
c++课程设计21点扑克牌游戏.docx
《c++课程设计21点扑克牌游戏.docx》由会员分享,可在线阅读,更多相关《c++课程设计21点扑克牌游戏.docx(17页珍藏版)》请在冰豆网上搜索。
c++课程设计21点扑克牌游戏
福建农林大学计算机与信息学院计算机类
课程设计结果评定
评语:
评分项目
分值
得分
①课程设计报告符合规范
10
②类层次结构图和用例图合理
30
③主要技术路线正确
30
④设计报告条理清晰,重点突出
20
⑤有一定的创新性,难易程度
10
成绩:
指导教师签字:
任务下达日期:
2008年12月日
评定日期:
1课程设计目的……………………………………………………………4
2课程设计要求……………………………………………………………4
3运行环境……………………………………………………………4
4设计内容……………………………………………………………4
4.1程序说明………………………………………………………………………4
4.2设计内容及功能……………………………………………………4
4.3题目分析及算法描述…………………………………………………………5
4.4系统程序流程图及层次模块图………………………………………………6
4.5系统测试………………………………………………………………………6
5总结………………………………………………………………………9
6参考文献…………………………………………………………………9
7源代码………………………………………………………………………9
21点扑克牌游戏
1.课程设计目的
《面向对象程序设计课程设计》是计算机科学与技术专业和软件工程专业集中实践性环节之一,是学习完《面向对象程序设计》课程后进行的一次全面的综合练习。
其目的在于加深对面向对象程序设计中基础理论和基本知识的理解,培养学生的实践能力,促进理论与实践的结合。
通过课程设计,让学生能够熟练运用C++进行面向对象编程,建立对象模型,降低软件的复杂性,改善软件的重用性和维护性,提高软件的生产效率,全面掌握面向对象编程技术。
2.课程设计要求
1、掌握使用一种面向对象程序设计语言如BorlandC++或VisualC++等。
2、培养调查研究、查阅技术文献、资料、手册以及编写技术文献的能力。
3、通过课程设计,要求学生在指导教师的指导下,独立完成实习课题的全部内容,包括:
⑴通过调查研究和上机实习,收集和调查有关技术资料。
⑵掌握设计课题的基本步骤和方法。
⑶根据课题的要求进行上机实验调试。
4、课程设计完成后,提交课程设计报告
3.运行环境
联想计算机,WindowsXP操作系统,MicrosoftVisualC++6.0
4.设计内容
4.1程序说明
该程序是模拟21点扑克牌游戏,玩家最多可以要5张牌,但如果牌的点数之和超过21点,则自动出局;在不超过21点的情况下,玩家与庄家比牌的点数的大小,大者为赢家。
4.2设计内容及功能
(1)将大于10点的点数改为半点(修改点数的类型)。
(2)高级玩家(经理级)可以查看下一张牌,即按H键,然后按要求输入密码,密码正确可以看牌,并决定是否要牌。
(3)超级玩家(总经理级)可以查看庄家(计算机)的所有牌面,并任意输入自己想要的牌,有赢无输,为保密起见,输入自己想要的牌后应立刻屏。
(4)每次要完牌后可以重新设定赔率,只能回流。
也就是说如果牌好,可以加大赌注。
4.3题目分析及算法描述
类classCCard
该程序只需要一个CCard类,其中有表格如下:
classCCard
private:
intm_Pip[5];//一共五张牌
intm_Number;//发了多少张牌
intm_Dollar;//赌本
intm_Gamble;//赌注
intm_Win;//赢局数
intm_Lose;//输局数
intm_Draw;//平局数
public:
CCard();//构造函数。
voidFirstPlayTwo();//最初的两张牌
intGetNumber();//返回牌张
intGetPip();//返回点数
voidDisplayPip();//依次全部显示牌面的点数
voidDisplayPip(int);//除了第一张牌,依次显示全部牌面点数(针对计算机牌的显示)
voidTurnPlay();//出一张牌。
voidWin();//赢了计算赌注
voidLose();//输了
voidDraw();//平局
intSetGamble(int);//设置赌本,赌本不够返回-1
intGetMoney();//返回钱数
voidDisplayInfo();//打印必要的信息
intGetCurrentCard();//返回当前的牌点
4.4系统程序流程图及层次模块图
(1)程序的N-S流程图如下图所示:
初始化随机种子
显示游戏规则
While(chChoice)
判断chChoice,(必须是Y/N)
Y/y
N/y
Do{……}
While(blLogic)
您的选择是明智的,赌博有碍家庭和睦!
欢迎再次使用此程序!
(2)do的模块N-S流程图
输出“您现在有的赌本:
$100”
输出下注的赌本
执行Player.SetGamble(nMoney)
判断If(blLogic)
Y/y
N/y
您的赌本不够,请重新下注!
PlayTurn(cpu,player)
4.5系统测试
(1)运行MicrosoftVisualC++6.0,新建一个工程文件,立即保存在自己建的一个文件夹中,再建一个为21point.cpp。
(2)单击“save”按钮,出现21point.cpp的文件编辑窗口,输入附录的程序代码;再单击“saveall”按钮保存文件。
(3)执行MicrosoftVisualC++快捷菜单中的编译、连接。
(4)21point.cpp文件编译成功,如下图所示:
输入y,回车开始游戏。
如下图所示:
输入赌本10回车。
如下图所示:
输入y,回车。
如下图所示:
输入y,回车后继续游戏。
如下图所示:
当你输入错误的信息的时候如:
1000。
出现如下图:
5.总结
本次课程设计,使我对C++面向对象程序设计有了进一步的认识和掌握。
我设计的这个简单的师生管理系统主要用到了继承和派生、虚继承、switch语句……在设计过程中,我遵循一个指导思想:
先把总的框架设计出来,再在对其中加上再的内容。
千万不要企图在一开始时就解决所有的细节。
边编程,边调试,边扩充。
6.参考文献
[1]谭浩强.C++面向对象程序设计.北京:
清华大学出版社,2006.
[2]谭浩强.C程序设计(第三版).北京:
清华大学出版社,2005.
7.源代码:
#include
#include
#include
usingnamespacestd;
classCCard
{
private:
intm_Pip[5];//一共五张牌
intm_Number;//发了多少张牌
intm_Dollar;//赌本
intm_Gamble;//赌注
intm_Win;//赢局数
intm_Lose;//输局数
intm_Draw;//平局数
public:
CCard();//构造函数。
voidFirstPlayTwo();//最初的两张牌
intGetNumber();//返回牌张
intGetPip();//返回点数
voidDisplayPip();//依次全部显示牌面的点数
voidDisplayPip(int);//除了第一张牌,依次显示全部牌面点数(针对计算机牌的显示)
voidTurnPlay();//出一张牌。
voidWin();//赢了计算赌注
voidLose();//输了
voidDraw();//平局
intSetGamble(int);//设置赌本,赌本不够返回-1
intGetMoney();//返回钱数
voidDisplayInfo();//打印必要的信息
intGetCurrentCard();//返回当前的牌点
};
CCard:
:
GetNumber()
{
returnm_Number;
}
CCard:
:
CCard()//构造函数,初始化
{
m_Number=0;
m_Dollar=100;//初始赌注为100美元
for(inti=0;i<5;i++)
m_Pip[i]=0;
m_Gamble=0;
m_Win=m_Lose=m_Draw=0;
}
intCCard:
:
GetMoney()
{
returnm_Dollar;
}
voidCCard:
:
DisplayInfo()//打印必要的信息
{
cout<<"\n\n\n\t\t\t您一共玩了"< "< cout<<"\n\t\t\t\t您的赌本共计有$"< \n"< } intCCard: : SetGamble(intgamble) { if(gamble<0) { cout<<"\n输入金额有误"< return-1; } if(m_Dollar-gamble<0) { cout<<"\n金额不足"< return-1; } else m_Gamble=gamble; m_Dollar-=gamble; return0; } voidCCard: : FirstPlayTwo()//最初两张牌 { m_Pip[0]=rand()%13+1; m_Pip[1]=rand()%13+1; m_Number=2; } intCCard: : GetPip() { intSumPip=0; for(inti=0;i { SumPip+=m_Pip[i]; } returnSumPip; } voidCCard: : DisplayPip() { inti; for(i=0;i { cout< } cout< } voidCCard: : TurnPlay() { m_Number++; m_Pip[m_Number-1]=rand()%13+1; } voidCCard: : Win() { cout<<"赢家牌面: "; DisplayPip(); cout<<"\n牌面点数: "< m_Dollar=m_Dollar+2*m_Gamble; m_Win++; cout<<"\n赌本: $"< cout< cout< } voidCCard: : Lose() { m_Lose++; cout<<"\n输家的牌面: "; DisplayPip(); if(GetPip()>21) cout<<"\t\t\t\t\t\t\t\t暴了! "< else cout<<"牌面点数: "< cout<<"\n赌本: $"< cout< } voidCCard: : Draw() { m_Draw++; m_Dollar+=m_Gamble; cout<<"\n平局牌面: "; DisplayPip(); if(GetPip()>21) cout<<"\n暴了! "< else cout<<"牌面点数: "< cout<<"赌本: $"< cout< } voidDisplayRule(void) { cout< cout<<"\t※※※※※※※※※※欢迎进入21点游戏世界! ※※※※※※※※※※\n\n"; cout<<"\t\t游戏规则: \n"; cout< cout<<"\t\t1.玩家最多可以要5张牌;\n"; cout< cout<<"\t\t2.如果牌点数的总数超过21点则暴点,自动判数;\n"; cout< cout<<"\t\t3.赢家可得双倍的赌注;\n"; cout< cout<<"\t\t4.计算机方在大于等于16点时不再要牌。 \n"; cout< cout<<"\t※※※※※※※※※※※※※祝您好运! ※※※※※※※※※※\n"; cout< } voidJudge(CCard&cpu,CCard&player) { cout< if((cpu.GetPip()>21&&player.GetPip()>21)||cpu.GetPip()==player.GetPip()) { cout<<"\n\n\t\t\t\t\t\t\t\t平局! \n"; cout<<"计算机数据: \t"; cpu.DisplayPip(); cout<<"牌面点数: "< cout<<"\n您的数据: \t"; player.Draw(); cout< } elseif((cpu.GetPip()>21)||(player.GetPip()>cpu.GetPip()&&player.GetPip()<=21)) { cout<<"\n\n\n\t\t\t\t\t\t\t\t恭喜您赢了! \n\n"; cout<<"计算机数据: \t"; cpu.DisplayPip(); cout<<"牌面点数: "< cout<<"\n您的数据: \t"; player.Win(); cout< } else { cout<<"\n\n\t\t\t\t\t\t\t\t很遗憾您输了! \n"; cout<<"计算机数据: \t"; cpu.DisplayPip(); cout<<"牌面点数: "< cout<<"\n您的数据: \t"; player.Lose(); cout< } } voidCCard: : DisplayPip(intn) { inti; cout<<"[*]"<<'\t'; for(i=1;i cout< cout< } voidPlayTurn(CCard&cpu,CCard&player)//玩一局 { charchChoice; intblCpu=1;//判断是否要牌 intblPlayer=1; cpu.FirstPlayTwo();//计算机和玩家各要两张牌 player.FirstPlayTwo(); do { cout<<"\n您的牌点为: \t"; player.DisplayPip(); cout<<"\n"; cout<<"您的牌面点数是: "< cout<<"\n计算机的牌点为: \t"; cpu.DisplayPip (1); if(blPlayer) { cout<<"\n\n\t您是否继续要牌(Y/N)? \t\t\t"; cin>>chChoice; if((chChoice=='Y'||chChoice=='y')) { if(player.GetNumber()<5) { player.TurnPlay(); cout<<"\n您要的这张牌是: "< if(player.GetPip()>21) blPlayer=0; } else { cout<<"对不起,您已经要了5张牌,不能再要牌了! "; blPlayer=0; } } if(chChoice=='n'||chChoice=='N') blPlayer=0; } if(cpu.GetPip()<16&&cpu.GetNumber()<5) { cpu.TurnPlay(); cout<<"\n计算机要牌,牌点是: "< } else blCpu=0; if(blCpu&&player.GetNumber()<5&&player.GetPip()<21) blPlayer=1; }while(blCpu||blPlayer); Judge(cpu,player); return; } intmain() { srand((unsigned)time(NULL));//初始化随机数种子 CCardcpu,player; intblLogic; intnMoney;// DisplayRule();// charchChoice; cout<<"是否现在开始游戏(Y/N)? \t\t"; cin>>chChoice; while(chChoice=='Y'||chChoice=='y') { do { cout< cout<<"\t\t\t您现在有的赌本: $"< cout<<"\n\n请下注(赌注不能超过赌本);"; cin>>nMoney; blLogic=player.SetGamble(nMoney); if(blLogic) cout<<"您的赌本不够,请重新下注! \n"; }while(blLogic); PlayTurn(cpu,player);// cout<<"是否继续21点游戏(Y/N)? \t\t\t"; cin>>chChoice; } player.DisplayInfo(); cout<<"\t\t\t您的选择是明智的,赌博有碍家庭和睦! \n"; cout<<"\n\n\t\t\t\t欢迎再次使用此程序! "< return0; }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- c+ 课程设计 21 扑克牌 游戏
![提示](https://static.bdocx.com/images/bang_tan.gif)