c++课程设计报告 掷骰子游戏.docx
- 文档编号:25725476
- 上传时间:2023-06-11
- 格式:DOCX
- 页数:28
- 大小:41.92KB
c++课程设计报告 掷骰子游戏.docx
《c++课程设计报告 掷骰子游戏.docx》由会员分享,可在线阅读,更多相关《c++课程设计报告 掷骰子游戏.docx(28页珍藏版)》请在冰豆网上搜索。
c++课程设计报告掷骰子游戏
评分表………………………………………………………………27
一、课题设计的内容与主要功能
1.1题目内容
编写程序实现投掷双骰子游戏,游戏规则为:
游戏者每次投掷两颗骰子,每颗骰子是一个正方体,有6面上面分别标有1、2、3、4、5、6个圆点,当骰子停止时,将每颗骰子朝上的点的数相加,在第一次投掷骰时,如果所得到的和为7或11,那么游戏者为赢得胜利;如果所得到的和为2、3或12,那么游戏者为输掉了;如果和为4、5、6、8、9或10,那么为游戏者的点数;如要想赢得胜利,必须继续投掷骰子,直到取得自已的点数为止,但是如果投掷出的和为7或者连续投掷了6次仍未赚得点数,那么游戏者为输了。
1.2功能
该游戏的主要功能为:
实现随机投掷两个骰子把其所得点数相加,然后根据点数和判断玩家的输、赢或平局。
在游戏中有1.获得帮助2.玩一手游戏3.退出游戏三个提示,分别为玩家提供帮助指示、选择进入新的游戏、退出当前的游戏并为该局游戏显示游戏结果。
二.课题分析
2.1项目的实现方法
这种小型的游戏的开发方法可以采用结构化方法分析与设计。
首先,分析软件的逻辑模型,也就是这个软件需要“做什么”。
然后,再建立软件的物理模型,既要“怎么做”的工程。
该个程序由main()函数、实用的程序软件包utility.h文件及骰子游戏dice_game.h文件组成,在main()函数中,先建立类DiceGame的对象objGame并调用类DiceGame的构造函数,为类的数据成员赋初值并开始游戏,再用对象objGame访问类的成员函数Game(),进入游戏,通过选项玩家选择进入游戏或退出游戏。
在函数Game()中,先调用Help()函数显示游戏规则,并调用utility.h文件Rand类中SetRandSeed()函数设定当前时间为随机数种子,进入while循环中,显示游戏选项,玩家可选择1.获得帮助然后调用成员函数Help()显示提示;2.玩一手游戏然后调用成员函数RollDice(),把随机的两个骰子的点数赋值给整形数sum,通过switch()语句判断玩家输、赢或者平局。
若玩家第一盘为平局状态为TIE,则该局骰子和为玩家的点数把sum赋值给myPoint,玩家可通过调用utility.h文件中的UserSaysYes()函数选择继续投骰子,直到赚到该点数时获胜状态为WIN,但是用if语句判断如果投掷出的和为7或者连续投掷出六次平局,则游戏者该局为输了LOSE。
最后用while循环中的if语句为每一次输赢和平局计数并显示玩家的输赢的语句。
3.退出游戏然后调用utility.h文件中的UserSaysYes()函数让玩家确定是否退出,退出后通过调用成员函数Show()显示游戏结果,游戏结束!
2.2类的声明
文件dice_game.h中定义一个筛子游戏类DiceGame,其声明如下:
classDiceGame
{
Private
//数据成员:
intnumOfWin;//胜利数次
intnumOfLose;//失败数次
intnumOfTie;//平局数次
//辅助函数
intRollDice();//模拟投掷一次骰子
voidHelp();//获得帮助
voidShow();//显示统计结果
public:
//方法声明:
DiceGame();//无参数的构造函数
virtual~DiceGame(){}//析构函数
voidGame();//模拟游戏
};
2.3核心算法及其实现代码
1.设计当前时间为随机数种子,模拟投掷一次两个骰子,返回值为所投掷的两颗骰子向上一面的点数之和。
代码如下:
intDiceGame:
:
RollDice()//模拟投掷一次骰子,返回值为所投的两颗骰子向上一面的点数之和
{
intnumOfDice1;//所投掷的第1颗骰子向上一面的点数
intnumOfDice2//所投掷的第2颗骰子向上一面的点数
intsum;//所投掷的两颗骰子向上一面的点数之和
numOfDice1=1+Rand:
:
GetRand(6);//模拟所投掷骰子1的点数
numOfDice2=1+Rand:
:
GetRand(6);//模拟所投掷骰子2的点数
sum=numOfDice1+numOfDice2;//计算所投掷两颗骰子向上一面的点数之和
cout<<"选手掷骰子:
"< returnsum;//返回所掷骰子向上一面点数之和 } 2.通过if选择语句进入游戏项目2,模拟第一次投掷骰子,并用switch开关语句来判断枚举量status的状态是输、赢或者平局,如果是平局,则记录点数。 代码如下: if(select==2)//输入2 { sum=RollDice();//模拟掷骰子 switch(sum) { case7: //掷得7或11胜利 case11: status=WIN; numOfWin++; break; case2: //投掷得2、3、12,输了 case3: case12: status=LOSE; numOfLose++; break; default: //投得其他数值,处于平局 status=TIE; myPoint=sum; numOfTie++; cout<<"点数"< } 3.通过status的状态用if条件语句判断玩家的输赢,如果是平局,既status==TIE时,利用UserSaysYes()函数让玩家选择是否继续游戏。 若玩家选择继续游戏,则依然用if条件语句判断status的状态来判断输赢,只有玩家在六次以内再次投掷到相同的点数时,玩家即胜利,但是,若首先投掷到的点数和为7或者连续6次都是平局,则游戏为输了。 代码如下: while (1) { if(status==WIN) { cout<<"恭喜你,赢得游戏! "< break; } if(status==LOSE) { cout<<"很遗憾,你输了! "< break; } while(status==TIE) { cout<<"你现在是平局,是否要继续游戏"; if(UserSaysYes()) { intagain; again=RollDice();//处于平局再次掷骰子 if(myPoint==again)//掷得自己的点数,赢得胜利 { status=WIN; numOfWin++; break; } elseif(again==7)//掷得7,输了 { status=LOSE; numOfLose++; break; } else//平局 { numOfTie++; if(numOfTie==6)//平局6次,输了 { status=LOSE; cout<<"你已平局6次,"; break; } } } } } 4.如果玩家的输入有误,则需用if条件语句判断,并提示正确的输入。 代码如下: if(select! =1&&select! =2&&select! =3)//若输入不是1,2,3重新输入 { cout<<"请用1,2,3回答"< continue; } 2.3程序流程图 三.主要功能的实现步骤 1.获得帮助 玩家输入选择select为1,通过条件语句if(select==1)判断是否满足条件,然后再调用类的成员函数Help(),则显示帮助信息。 2.选择一手游戏 玩家输入选择select为2,在while循环中通过if(select==2)语句判断是否符合条件,再调用类的成员函数RollDice()模拟投掷一次骰子,返回值为所投掷的两颗骰子向上一面的点数之和,把RollDice()的返回值赋值给sum,再通过开关语句switch(sum)判断玩家第一手的输赢。 若为平局,则该点数为玩家的点数,玩家可选择是否继续游戏if(UserSaysYes()),若玩家选择y,则可以再次投掷骰子again=RollDice(),掷自己的点数if(myPoint==again)则胜利;若玩家先投掷出点数7既elseif(again==7)或者平局次数达到6次if(numOfTie==6),则判断玩家为输了。 3.退出游戏 玩家输入选择select为3,在while()驯悍中通过语句elseif(select==3)判断,用语句if(UserSaysYes())确认玩家是否要退出游戏,若回答为”y”则跳出循环break,最后程序会调用类的成员函数Show()显示玩家游戏的结果。 四.程序测试 4.1测试计划 ●游戏开始进入的界面及显示提示 ●获得帮助 ●进入游戏并测试每一个路径(既测试每一种可能的结果) ●退出游戏选项的测试 4.2测试过程 1.游戏开始时的界面及玩家选项的提示 2.若玩家输入有误,则需提醒玩家输入正确的选项进入游戏 3.若玩家中途忘记游戏规则,则课选择选项1,进入帮助提醒的界面 4.玩家选择选项2,进入游戏,并在第一次投掷中获得胜利 5.玩家进入游戏,第一次投掷获得点数,但最后投掷出了点数是7,所以失败了 6.玩家第一希投掷为平局,获得点数,但在接下来的次投掷中连续6次平局,由游戏规则可知,玩家在此局中又失败了 7.玩家玩完了游戏,选择选项3退出游戏,并显示玩家在此次游戏中的结果 五、总结 课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察的过程。 而C++作为一门编程语言,对于我们自动化专业以后的学习和工作有着重要的作用,所以我们必须努力学习好并灵活运用。 回顾此次C++课程设计,至今我仍感慨颇多。 的确,从分析课题到最终的完成报告,从理论到实践,在整整一个星期的日子里,可以说得上是苦多于甜。 但是通过这次课程设计确实学到了很多很多的的东西,不仅巩固了大一时学习的C++知识,而且通过多次上机操作学到了很多在书本上所没有学到过的知识,同时通过这一次实习,更加熟练了自己的使用编程软件VC6.0的操作技能。 在这一次的实习中,把学习的C++知识运用到编写一个小型游戏软件,也学习了一些软件工程基本的内容和过程。 自己亲身编写一个软件,虽然过程是艰难的,但是当最终看到自己的程序运行出了预期的结果时,那一刻,心里的确挺自豪的,也是通过这一次实习的过程,发现编程是一个挺有成就感的工作,点燃了自己对编程的热情。 我想,在这次实习之后,我会多看看这方面的书籍,发展自己编程方面的兴趣。 同时,在设计的过程中我也发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说对程序编译后的错误的分析不熟练、对编程软件中的功能也不能很熟练的使用、对较复杂的各个语句的关系的分析不是很清楚……所以在这次课程设计之后,我一定要多注意练习这些方面的不足之处,努力完善自己。 通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。 回想自己在最开始的编写程序的过程,的确充满了困难,如: 在怎么把自己的想法用C++语言来实现上;各个循环语句、条件语句、开关语句的运用和包含关系,真的让我耗尽了精力! 记得在《软件工程》这本书中看过一句话“测试只能证明错误的存在,但不能证明错误的不存在”,由测试结果得出,我所完成的程序已完成了计划的内容和功能,符合了最初的研制要求,并适当改进和实现了游戏的规则(游戏平局次数不能超过6次,否则这一句为游戏者输了),但是我相信这个程序还是有很多地方可以改进,例如: 尽管已近设定了条件语句if(select! =1&&select! =2&&select! =3)来限制玩家的选择,但是当玩家进入游戏时,输入错误的提示若为字母,则程序会自动进入一个死循环……等这些还是需要自己后续的改进。 在自己这一次亲身体会编写程序中,切身实际的感受到C++语言的特点。 如: C++的通过类和对象来实现封装性。 我所编写的Game()函数就是类DiceGame的成员函数,其中就涉及到了许多类的数据成员和成员函数的访问。 同时,我感受到C++语言的风格也是比较简练明了的。 同时,在这次课程设计中,我深刻感受到与人合作的力量的强大。 特别是在编写程序中出现错误时,而由于自己身在“程序之中”,一时无法发现自己的一些潜意识的错误,此时,别人的帮助检查程序的确帮我省了很多无用功,也非常感谢老师和同学给与了我很多对程序改进的建议。 这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,最后在老师的辛勤指导下,最终还是迎刃而解。 同时,对给过我帮助的所有同学和各位指导老师表示忠心的感谢 六、参考书籍 《C++语言程序设计教程》吕凤翥著人民邮电出版社 《实用面向对象软件工程教程》EdwardYourdon,CarlArgila著电子工业出版社 《C++编程思想: 标准C++导引》,(美)BruceEckel著机械工业出版社 七、附件 7.1程序的源代码 ★Main()文件: //文件路径名: dice_game\main.cpp #include"utility.h"//实用程序软件包 #include"dice_game.h"//骰子游戏 intmain(void)//主函数main(void) { DiceGameobjGame;//骰子游戏对象 objGame.Game();//运行游戏 system("PAUSE");//调用库函数system() return0;//返回值0,返回操作系统 } ★dice_game.h文件: //文件路径名: dice_game\dice_game.h #ifndef__DICE_GAME_H__//如果没有定义__DICE_GAME_H__ #define__DICE_GAME_H__//那么定义__DICE_GAME_H__ typedefenum{WIN,LOSE,TIE}GameStatus;//WIN: 赢,LOSE: 输,TIE: 平局 //骰子游戏类DiceGame声明 classDiceGame { private: //数据成员: intnumOfWin;//胜利数次 intnumOfLose;//失败数次 intnumOfTie;//平局数次 //辅助函数 intRollDice();//模拟投掷一次骰子 voidHelp();//获得帮助 voidShow();//显示统计结果 public: //方法声明: DiceGame();//无参数的构造函数 virtual~DiceGame(){}//析构函数 voidGame();//模拟游戏 }; //骰子游戏类DiceGame的实现部分 DiceGame: : DiceGame()//初始化骰子游戏 { numOfWin=0;//胜利数次 numOfLose=0;//失败数次 numOfTie=0;//平局数次 cout<<"游戏开始"< } intDiceGame: : RollDice()//模拟投掷一次骰子,返回值为所投掷的两颗骰子向上一面的点数之和 { intnumOfDice1;//所投掷的第1颗骰子向上一面的点数 intnumOfDice2;//所投掷的第2颗骰子向上一面的点数 intsum;//所投掷的两颗骰子向上一面的点数之和 numOfDice1=1+Rand: : GetRand(6);//模拟所投掷骰子1的点数 numOfDice2=1+Rand: : GetRand(6);//模拟所投掷骰子2的点数 sum=numOfDice1+numOfDice2;//计算所投掷两颗骰子向上一面的点数之和 cout<<"选手掷骰子: "< returnsum;//返回所掷骰子向上一面点数之和 } voidDiceGame: : Help()//获得帮助 { cout<<"游戏者每次投掷两颗骰子,每个骰子是一个正方体,有"< cout<<"6面上面分别标有1、2、3、4、5、6个圆点,当骰子停止时"< cout<<",将每个骰子朝上的点的数相加,在第一次投掷骰时,如果"< cout<<"所得到的和为7或11,那么游戏者为赢得胜利;如果所得到"< cout<<"的和为2、3或12,那么游戏者为输掉了;如果和为4、5、6"< cout<<"、8、9或10,那么为游戏者的点数;如要想赢得胜利,必"< cout<<"须继续投掷骰子,直到取得自已的点数为止,但是如果投"< cout<<"掷出的和为7或投掷6次仍未赚到该点数,则游戏者为输了."< } voidDiceGame: : Show()//显示统计结果 { cout<<"选手游戏统计: "< cout<<"获胜"< cout<<"失败"< cout<<"平局"< } voidDiceGame: : Game()//模拟游戏 { intselect=1; intsum,myPoint; GameStatusstatus;//游戏状态 Rand: : SetRandSeed();//设置当前时间为随机数种子 Help();//获得帮助 while(select! =3) { cout< "< cout<<"1.获得帮助"< cout<<"2.玩一手游戏"< cout<<"3.退出游戏"< cin>>select;//输入选择 if(select! =1&&select! =2&&select! =3)//若输入不是1,2,3重新输入 { cout<<"请用1,2,3回答"< continue; } if (1) { while(select==1)//输入1,帮助 { Help(); break; } if(select==2)//输入2 { sum=RollDice();//模拟掷骰子 switch(sum) { case7: //掷得7或11胜利 case11: status=WIN; numOfWin++; break; case2: //投掷得2、3、12,输了 case3: case12: status=LOSE; numOfLose++; break; default: //投得其他数值,处于平局 status=TIE; myPoint=sum; numOfTie++; cout<<"点数"< } while (1) { if(status==WIN) { cout<<"恭喜你,赢得游戏! "< break; } if(status==LOSE) { cout<<"很遗憾,你输了! "< break; } while(status==TIE) { cout<<"你现在是平局,是否要继续游戏"; if(UserSaysYes()) { intagain; again=RollDice();//处于平局再次掷骰子 if(myPoint==again)//掷得自己的点数,赢得胜利 { status=WIN; numOfWin++; break; } elseif(again==7)//掷得7,输了 { status=LOSE; numOfLose++; break; } else//平局 { numOfTie++; if(numOfTie==6)//平局6次,输了 { status=LOSE; cout<<"你已平局6次,"; break; } } } } } } elseif(select==3)//输入为3 { if(Use
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- c+课程设计报告 掷骰子游戏 c+ 课程设计 报告 骰子 游戏