C++课程设计.docx
《C++课程设计.docx》由会员分享,可在线阅读,更多相关《C++课程设计.docx(19页珍藏版)》请在冰点文库上搜索。
![C++课程设计.docx](https://file1.bingdoc.com/fileroot1/2023-6/6/69ef402c-4894-4e77-b918-2ee741c5dd42/69ef402c-4894-4e77-b918-2ee741c5dd421.gif)
C++课程设计
福建农林大学计算机与信息学院
计算机类
课程设计报告
课程名称:
面向对象程序设计课程设计
课程设计题目:
21点扑克牌游戏
姓名:
张文绮
系:
计算机科学与技术
专业:
计算机科学与技术
年级:
2009级
学号:
091150022
指导教师:
刘雄恩
职称:
讲师
2011年1月8日
福建农林大学计算机与信息学院计算机类
课程设计结果评定
评语:
评分项目
分值
得分
①课程设计报告符合规范
10
②类层次结构图和用例图合理
30
③主要技术路线正确
30
④设计报告条理清晰,重点突出
20
⑤有一定的创新性,难易程度
10
成绩:
指导教师签字:
任务下达日期:
2010年12月1日
评定日期:
目录
1课程设计的目的………………………………………………………………1
2课程设计的要求………………………………………………………………1
3课程设计内容……………………………………………………………………1
3.1程序总体设计…………………………………………………………………2
3.2程序运行情况…………………………………………………………………3
3.3程序功能展示…………………………………………………………………3
4总结…………………………………………………………………………………5
参考文献……………………………………………………………………………6
源代码………………………………………………………………………………6
21点扑克牌游戏
1、课程设计目的
1)复习、巩固C++语言的基础知识,进一步加深对C++语言的理解和掌握;
2)课程设计为学生提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼学生的分析解决实际问题的能力。
提高学生适应实际,实践编程的能力;
3)培养我们在项目开发中团队合作精神、创新意识及能力。
2、课程设计要求
1)掌握使用一种面向对象程序设计语言如BorlandC++或VisualC++等;
2)设计要实用,编程简练,可用,功能全面;
3)说明书、流程图要清楚;
4)通过课程设计,要求学生在指导教师的指导下,独立完成实习课题的全部内容,包括:
a)通过调查研究和上机实习,收集和调查有关技术资料;
b)掌握设计课题的基本步骤和方法;
c)根据课题的要求进行上机实验调试;
5)上交课程设计内容。
3、课程设计内容
3.1程序总体设计方案
类层次结构用例图:
3.2程序运行情况
1)程序编译成功后,即可进入系统主菜单界面;
2)简述游戏规则,提示是否开始游戏;
3)开始游戏,下注,要牌;
4)展示游戏情况;
5)离开游戏。
3.3程序功能展示
进入系统主菜单:
选择y进入游戏:
下注,输入50:
输入y继续要牌:
输入n,显示上次玩的各种数据:
选择y继续游戏,下注赌注超过赌本,要求重新输入:
再玩两局之后,输入n离开游戏:
4、总结
此次《21点扑克牌游戏》的课程设计过程中反复修改了,多次调试和运行,目的是为了来得到尽量好的效果。
设计过程中参照了一些关于牌的类的一些代码,但是还有许多不足之处,只能实现简单的游戏,与真正的21点扑克牌游戏比起来还有很大的差距。
经过这次课程设计的多次修正,多次调试和运行,又在一定程度上加深了对面向对象课程所学知识的理解,在发现问题解决问题的同时也深刻意识到自身对C++课程设计的掌握仍旧有很多的不足之处。
希望能通过这次课程设计,对自己在C++语言程序的学习上有更大的帮助,有助于提高对它的深刻理解。
这次课程设计,当中遇到了很多的问题,有一些知识都已经不太清楚了,但是通过浏览一些关于牌的类的代码的资料,又重新的温习了类和对象、继承、多态和虚函数以及模板的内容。
在这次设计中也使我们的同学关系更进一步了,我跟周战同学互相帮助,有什么不懂的大家在一起商量,听听不同的看法对我们更好的理解知识,所以在这里非常感谢帮助我的同学。
在此要感谢我的指导老师——刘雄恩老师,感谢刘老师给我们这样的机会锻炼。
在整个课程设计过程中我懂得了许多东西,也培养了我独立设计的能力,树立了对自己学习能力的信心,相信会对今后的学习、工作和生活有非常重要的影响,而且大大提高了动手的能力,使我充分体会到了在创造过程中的成功和喜悦。
参考文献
[1]马石安、魏文平.面向对象程序设计教程.北京:
清华大学出版社,2007.
[2]谭浩强.C程序设计(第三版).北京:
清华大学出版社,2007.
源代码:
#include
#include
#include
usingnamespacestd;
classCCard
{
private:
intnaPip[5];//一共五张牌
intnNumber;//发了多少张牌
intnDollar;//赌本
intnGamble;//赌注
intnWin;//赢局数
intnLose;//输局数
intnDraw;//平局数
public:
CCard();//构造函数
voidFirstPlayTwo();//最初的两张牌
intGetNumber();//返回牌张
intGetPip();//返回点数
voidDisplayPip();//依次全部显示牌面的点数
voidDisplayPip(int);//除了第一张牌,依次显示全部牌面点数(针对计算机牌的显示)
voidTurnPlay();//出一张牌。
voidWin();//赢了计算赌注
voidLose();//输了
voidDraw();//平局
intSetGamble(int);//设置赌本,赌本不够返回-1
intGetMoney();//返回钱数
voidDisplayInfo();//打印必要的信息
intGetCurrentCard();//返回当前的牌点
};
CCard:
:
CCard()//构造函数,初始化
{
nNumber=0;
nDollar=100;//初始赌注为100美元
for(inti=0;i<5;i++)
naPip[i]=0;
nGamble=0;
nWin=nLose=nDraw=0;
}
intCCard:
:
GetMoney(void)
{
returnnDollar;
}
voidCCard:
:
DisplayInfo()//打印必要的信息
{
cout<<"您一共玩了"<"<cout<<"您的赌本共计有$"<"<}
intCCard:
:
SetGamble(intgamble)
{
if(nDollar-gamble<0)
{
return-1;
}
if(gamble<0)
{
if(nDollar-20<0)
return-1;
nGamble=20;
}
else
nGamble=gamble;
nDollar-=nGamble;
return0;
}
voidCCard:
:
FirstPlayTwo()//最初两张牌
{
naPip[0]=rand()%13+1;
naPip[1]=rand()%13+1;
nNumber=2;
}
intCCard:
:
GetCurrentCard()
{returnnaPip[nNumber-1];}
intCCard:
:
GetNumber()
{
returnnNumber;
}
intCCard:
:
GetPip()
{
intnPip=0;
for(inti=0;i{
if(naPip[i]>=10)
nPip+=10;
else
nPip+=naPip[i];
}
returnnPip;
}
voidCCard:
:
DisplayPip()
{
for(inti=0;icout<cout<}
voidCCard:
:
TurnPlay()
{
nNumber++;
naPip[nNumber-1]=rand()%13+1;
}
voidCCard:
:
Win()
{
cout<<"赢家牌面:
";
DisplayPip();
cout<<"牌面点数:
"<nDollar=nDollar+2*nGamble;
nWin++;
cout<<"赌本:
$"<cout<cout<}
voidCCard:
:
Lose()
{
nLose++;
cout<<"输家的牌面:
";
DisplayPip();
if(GetPip()>21)
cout<<"暴了!
"<else
cout<<"牌面点数:
"<cout<<"赌本:
$"<cout<}
voidCCard:
:
Draw()
{
nDraw++;
nDollar+=nGamble;
cout<<"平局牌面:
";
DisplayPip();
if(GetPip()>21)
cout<<"暴了!
"<else
cout<<"牌面点数:
"<cout<<"赌本:
$"<cout<}
voidCCard:
:
DisplayPip(intn)
{
cout<<"[*]"<<'\t';
for(inti=1;icout<cout<}
voidDisplayRule(void)
{
cout<<"\t欢迎进入21点游戏世界!
\n\n";
cout<<"\t游戏规则:
\n";
cout<<"\t1.玩家最多可以要5张牌;\n";
cout<<"\t2.如果牌点数的总数超过21点则暴点,自动判数;\n";
cout<<"\t3.赢家可得双倍的赌注;\n";
cout<<"\t4.计算机方在大于等于16点时不再要牌。
\n";
cout<<"\t祝您好运!
\n";
cout<}
voidJudge(CCard&cpu,CCard&player)
{
cout<if((cpu.GetPip()>21&&player.GetPip()>21)||cpu.GetPip()==player.GetPip())
{
cout<<"\n\n平局!
\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";
cout<<"计算机数据:
\t";
cpu.DisplayPip();
cout<<"牌面点数:
"<cout<<"\n您的数据:
\t";
player.Win();
cout<}
else
{
cout<<"\n\n很遗憾您输了!
\n";
cout<<"计算机数据:
\t";
cpu.DisplayPip();
cout<<"牌面点数:
"<cout<<"\n您的数据:
\t";
player.Lose();
cout<}
}
/*voidCCard:
:
DisplayPip(intn)
{
inti;
cout<<"[*]"<<'\t';
for(i=1;icout<cout<}*/
voidPlayTurn(CCard&cpu,CCard&player)//玩一局
{
charchChoice;
intblCpu=1;//判断是否要牌
intblPlayer=1;
cpu.FirstPlayTwo();//计算机和玩家各要两张牌
player.FirstPlayTwo();
do
{
cout<<"您的牌点为:
\t";
player.DisplayPip();
cout<<"计算机的牌点为:
\t";
cpu.DisplayPip
(1);
cout<<"您的牌面点数是:
"<if(blPlayer)
{
cout<<"\n\n您是否继续要牌(Y/N)?
";
cin>>chChoice;
if((chChoice=='Y'||chChoice=='y'))
{
if(player.GetNumber()<5)
{
player.TurnPlay();
cout<<"您要的这张牌是:
"<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<<"计算机要牌,牌点是:
"<}
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)?
\n";
cin>>chChoice;
while(chChoice=='Y'||chChoice=='y')
{
do
{
cout<<"您现在有的赌本:
$"<cout<<"\n请下注(赌注不能超过赌本);";
cin>>nMoney;
blLogic=player.SetGamble(nMoney);
if(blLogic)
cout<<"您的赌本不够,请重新下注!
\n";
}
while(blLogic);
PlayTurn(cpu,player);//
cout<<"是否继续21点游戏(Y/N)?
\n";
cin>>chChoice;
}
player.DisplayInfo();
cout<<"您的选择是明智的,赌博有碍家庭和睦!
\n";
cout<<"欢迎再次使用此程序!
"<return0;
}