c++课程设计21点扑克牌游戏.docx

上传人:b****5 文档编号:11819261 上传时间:2023-04-03 格式:DOCX 页数:17 大小:69.47KB
下载 相关 举报
c++课程设计21点扑克牌游戏.docx_第1页
第1页 / 共17页
c++课程设计21点扑克牌游戏.docx_第2页
第2页 / 共17页
c++课程设计21点扑克牌游戏.docx_第3页
第3页 / 共17页
c++课程设计21点扑克牌游戏.docx_第4页
第4页 / 共17页
c++课程设计21点扑克牌游戏.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

c++课程设计21点扑克牌游戏.docx

《c++课程设计21点扑克牌游戏.docx》由会员分享,可在线阅读,更多相关《c++课程设计21点扑克牌游戏.docx(17页珍藏版)》请在冰豆网上搜索。

c++课程设计21点扑克牌游戏.docx

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;

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1