c++课程设计报告 掷骰子游戏

别妄想泡我
589次浏览
2021年02月19日 08:28
最佳经验
本文由作者推荐

-

2021年2月19日发(作者:石霜)


目录




一、课题设计的内容与主要功能


.................................................. 2



1.1


题目内容


......... .................................................. ....................


2


1.2




功能


......................... .................................................. .........


2


二.课题分析



.......... .................................................. .................. 2



2.1


项目的实现方法



.


................................. ...................................


2


2.2




类的声明


....................... .................................................. ....


3


2.3


核心算法及其实现代码



.......................................... ................


4


2.3


程序流程图


< br>.


................................... ........................................


7


三.主要功能的实现步骤



.


.............................. .............................. 8



四.程序测试



.......... .................................................. .................. 8



4.1


测试计划


......... .................................................. ....................


8


4.2


测试过程


......... .................................................. ....................


9


五、总结



.


.................................................. ................................ 12



六、参考书籍



.......... .................................................. ................ 14



七、附件



.


.................................................. ................................ 15



7.1



程序的源代码



.

................................................ .....................


15




评分表………………………………………………………………


27





1


一、课题设计的内容与主要功能




1.1


题目内容




编写程序实现投掷双骰子游戏,游戏规则为:游戏者每 次投掷两颗骰子


,



颗骰子是一个正方 体


,



6


面上 面分别标有


1



2


3



4



5



6


个圆 点


,


当骰子停


止时

,


将每颗骰子朝上的点的数相加


,


在第一次投掷骰时


,


如果所得到的和为


7



11,


那么游戏者为赢得胜利< /p>


;


如果所得到的和为


2



3



12

< br>,那么游戏者为输


掉了


;


如果和 为


4



5


、< /p>


6



8



9



10


,那么为游 戏者的点数


;


如要想赢得胜利,


必须继 续投掷骰子,


直到取得自已的点数为止


,

但是如果投掷出的和为


7


或者连


续 投掷了


6


次仍未赚得点数,那么游戏者为输了。



1.2


功能




该游戏的主要功能为:实现随机投掷两个骰子把其所 得点数相加,然后根


据点数和判断玩家的输、


赢或平局。


在游戏中有


1.


获得帮助

2.


玩一手游戏


3.


退出游戏



三个提示,分别为玩家 提供帮助指示、选择进入新的游戏、退出当前


的游戏并为该局游戏显示游戏结果。




二.课题分析




2.1


项目的实现方法



这种小型的游戏的开发方法可以采用结构化方法分析与设计。首先,分析软件


的逻辑模型,也就是这个软件需要“做什么”


。然后,再建立软件的物理模型,


既要


“怎么做”


的工程。


该个程序由


main()


函数、


实用 的程序软件包


utility.h









dice_game.h






< br>在


main()



< p>








2



DiceGame


的对象

< p>
objGame


并调用类


DiceGame


的构造函数,为类的数据成员


赋初值并开始游戏,再用对象

< p>
objGame


访问类的成员函数


Game(),


进入游戏,


通过选项玩家选择进入游戏或退出游戏。

< p>


在函数


Game()


中 ,先调用


Help()


函数显示游戏规则,并调用


utility.h


文件


Rand

< br>类中


SetRandSeed()


函数设定当前时间为随 机数种子,


进入


while


循环中,< /p>


显示游戏选项,玩家可选择


1.


获得帮助



然后调用成员函数


Help()


显示提示;


2.


玩一手游戏



然后调用成员函数


RollDice()

< p>
,把随机的两个骰子的点数赋值


给整形数


sum< /p>


,通过


switch()


语句判断玩家输 、赢或者平局。若玩家第一盘为


平局状态为


TIE


,则该局骰子和为玩家的点数把


sum


赋值给


myPoint


,玩家可


通过调用

< p>
utility.h


文件中的


UserSaysY es()


函数选择继续投骰子,直到赚到


该点数时获胜状态为< /p>


WIN



但是用


if


语句判断如果投掷出的和为


7


或者 连续投


掷出六次平局,则游戏者该局为输了


LOSE

< p>
。最后用


while


循环中的

if


语句为


每一次输赢和平局计数并显示玩家的输赢的语句 。


3.


退出游戏


然后调用


utility.h


文件中的

UserSaysYes()


函数让玩家确定是否退出,退出后通过调


用成员函数


Show()


显示游戏结果,游戏结束!



2.2


类的声明



文件


dice_game.h


中定义一个筛子游戏类


DiceGa me


,其声明如下:



class DiceGame


{


Private

















//


数据成员


:





int numOfWin;






//


胜利数次



//


失败数次




//


平局数次



int numOfLose;



int numOfTie;


//


辅助函数







int RollDice();


void Help();



void Show();



public:


//


方法声明


:










//


模拟投掷一次骰子



//


获得帮助



//


显示统计结果




3





};


DiceGame();






//


无参数的构造函数



//


析构函数



//


模拟游戏



virtual ~DiceGame(){}



void Game ();




2.3


核心算法及其实现代码



1.


设计当前时间为随机数种子,模拟投掷一次两个骰子< /p>


,


返回值为所投掷


的两颗骰子向上一面的 点数之和。代码如下


:


int DiceGame::RollDice() //


模拟投掷一次骰子


,


返回值为所投的两颗


骰子向上一面的点数 之和



{




int numOfDice1;


//


所投掷的第


1


颗骰子向上一面的点数




int numOfDice2



int sum;





numOfDice1 = 1 + Rand::GetRand(6);


//


模拟所投掷 骰子


1


的点数





//

所投掷的第


2


颗骰子向上一面的点数



//


所投掷的两颗骰子向上一面的点数之和




numOfDice2 = 1 + Rand::GetRand(6);


//


模拟所投掷骰子


2


的点数



sum =


numOfDice1 +


numOfDice2;//


计算所投掷两颗骰子向上一面的 点


数之和



cout <<


选手掷骰子


:


<< sum << endl;



return sum;



}


2.


通过


if


选择语句进入游戏项目


2


,模拟第一次投掷骰子,并用


switch


开关语句来判断枚举量


status


的状态是输、赢或者平局, 如果是平局,则记录


点数。代码如下:



if(select==2) //


输入


2


{












//


返回所掷骰子向上一面点数之和



sum=RollDice(); //


模拟掷骰子



switch(sum)


{


4





case 7: //


掷得


7



11


胜利



case 11:

















status=WIN;


numOfWin++;


break;


case 2: //


投掷得


2



3



12


,输了



case 3:


case 12:





























status=LOSE;




numOfLose++;


break;


default: //


投得其他数值,处于平局







}


status=TIE;


myPoint=sum;


numOfTie++;


cout<<


点数



3.


通过


status


的状态用


i f


条件语句判断玩家的输赢,如果是平局,既


status== TIE


时,利用


UserSaysYes()

< br>函数让玩家选择是否继续游戏。若玩家


选择继续游戏,则依然用

< br>if


条件语句判断


status


的状态来判断输赢,只有玩


家在六次以内再次投掷到相同的点数时,玩家即胜利,但是, 若首先投掷到的


点数和为


7


或者连续< /p>


6


次都是平局,则游戏为输了。代码如下:



while(1)


{



if(status==WIN)














{




}


if(status==LOSE)


{


cout<<


恭喜你,赢得游戏!



break;



5
























}


cout<<


很遗憾,你输了!



break;


while(status==TIE)


{







cout<<


你现在是平局 ,是否要继续游戏



if(UserSaysYes())





{


int again;


again=RollDice(); //


处于平局再次掷骰子



if(myPoint==again) //


掷得自己的点数,


赢得胜利


















{


status=WIN;


numOfWin++;


break;



































































}


else if(again==7) //


掷得


7


,输了



{






status=LOSE;


numOfLose++;


break;


}


else //


平局











{









numOfTie++;


if(numOfTie == 6) //< /p>


平局


6


次,输了



{


status=LOSE;




cout<<


你已平局


6


次,



break;


}



6













}





}



}


}


4.


如果玩家的输入有误,则 需用


if


条件语句判断,并提示正确的输入。代


码如下:



if(select!=1&&select!=2&&select!=3) //


若输入不是


1



2



3


重新输入



{




cout<<

< br>请用


1



2


3


回答




continue;


}


2.3


程序流程图






























开始



输入


123


1





2 < /p>







3


退






显示结果







键退出



7


三.主要功能的实现步骤



1.



获得帮助



玩家输入选择


select



1



通过条件语句


if(select==1)


判 断是否满足条件,


然后再调用类的成员函数


Help()


,则显示帮助信息。



2.




选择一手游戏



玩家输入选择


select



2


,< /p>



while


循环中通过


if(select==2)


语句判断是


否符合条件,


再调用类的成员函数


RollDice()

模拟投掷一次骰子


,


返回值为所投


掷的两颗骰子向上一面的点数之和,



RollDice()< /p>


的返回值赋值给


sum



再通过


开关语句


switch(sum)


判断玩家第一手的输赢。若为平局,则该点数为玩家的点


数,


玩家可选择是否继续游戏


if(UserSaysYes())



若玩家选择


y,


则可以再次 投


掷骰子


again=RollDice()

< br>,掷自己的点数


if(myPoint==again)


则胜利;若玩家


先投掷出点数


7



else if(again==7)


或者平局次数达到


6



if(numOfTie ==


6)


,则判断玩家为输了。



3.


退出游戏


玩家输入选择


select



3< /p>




while()

驯悍中通过语句


else


if(select==3)< /p>


判断,用语句


if(UserSaysYes())


确认玩家是否要退出游戏,若回答为”


y


”则



跳出循环


break


,最后程序会调用类的成员函数


Show()


显示玩家游戏的 结果。




四.程序测试



4.1


测试计划





游戏开始进入的界面及显示提示





获得帮助





进入游戏并测试每一个路径(既测试每一种可能的结果)





退出游戏选项的测试




8


4.2


测试过程


1.


游戏开始时的界面及玩家选项的提示




2.


若玩家输入有误,则需提醒玩家 输入正确的选项进入游戏




3.


若玩家中途忘记游戏规则,则课选择选项


1


,进入帮助提醒的界面




9



4.


玩家选择选项

< br>2


,进入游戏,并在第一次投掷中获得胜利





10


5 .


玩家进入游戏,第一次投掷获得点数,但最后投掷出了点数是


7


,所以失败了



6.


玩家第一希投掷为平局,


获得点数,


但在接下来的次投 掷中连续


6


次平局,



游戏规则可知,玩家在此局中又失败了







11


7.


玩家玩完了游戏,选择选项


3


退出游戏,并显示玩家在此次游戏中的结果




五、总结



课程设计是培养学生综合运用所学知识


,


发现

< br>,


提出


,


分析和解决实际问题,


锻炼实践能力的重要环节,


是对学生实际工作能力的具体训练和 考察的过程。



C++


作为一门编程语 言,


对于我们自动化专业以后的学习和工作有着重要的作用,


所 以我们必须努力学习好并灵活运用。



回顾此次


C++


课程设计,至今我仍感慨颇多。的确,从分析课题到最终的完

< p>
成报告,从理论到实践,在整整一个星期的日子里,可以说得上是苦多于甜。但

是通过这次课程设计确实学到了很多很多的的东西,不仅巩固了大一时学习的


C++


知识,而且通过多次上机操作学到了很多在书本上所没有学到过的知识,同


时通过这一次实习,


更加熟练了自己的使用编程软件


VC6.0


的操作技能。


在这一


次的实 习中,把学习的


C++


知识运用到编写一个小型游戏软件,也学 习了一些软


件工程基本的内容和过程。


自己亲身编写一个软件,


虽然过程是艰难的,


但是当


最终看到自 己的程序运行出了预期的结果时,


那一刻,


心里的确挺自豪的,


也是



12


通过这一次实习的过程,


发现编程是一个挺有成就感的工作,


点 燃了自己对编程


的热情。我想,在这次实习之后,我会多看看这方面的书籍,发展自己编 程方面


的兴趣。


同时,


在设计的过程中 我也发现了自己的不足之处,


对以前所学过的知


识理解得不够深 刻,


掌握得不够牢固,


比如说对程序编译后的错误的分析不熟练 、


对编程软件中的功能也不能很熟练的使用、


对较复杂的各个语 句的关系的分析不


是很清楚……所以在这次课程设计之后,


我一 定要多注意练习这些方面的不足之


处,努力完善自己。



通过这次课程设计使我懂得了理论与实际相结合是很重要的,


只有理论 知识


是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,


才能真正为社会服务,


从而提高自己的实际动手能力和独立思考的能 力。


回想自


己在最开始的编写程序的过程,的确充满了困难,如 :在怎么把自己的想法用


C++


语言来实现上;各个循环语句、 条件语句、开关语句的运用和包含关系,真


的让我耗尽了精力!记得在《软件工程》这本 书中看过一句话“测试只能证明错


误的存在,但不能证明错误的不存在”


,由测试结果得出,我所完成的程序已完


成了计划的内容和功能,


符合了最初的研制要求,


并适当改进和实现了游戏的规


则(游戏平局次数不能超过


6


次,否则这一句为游戏者输了)


,但是我相信这个















例< /p>









< p>






if(select!=1&&select!=2&&select!=3 )


来限制玩家的选择,但是当玩家进入游


戏时,


输入错误的提示若为字母,


则程序会自动进入一个死循环……等这些还是


需要自己后续的改进。在自己这一次亲身体会编写程序中,切身实际的感受到

< br>C++


语言的特点。如:


C++


的通过类和对象来实现封装性。我所编写的


Game


()


函数就是类


DiceGame


的成员函数,其 中就涉及到了许多类的数据成员和成员函


数的访问。同时,我感受到

C++


语言的风格也是比较简练明了的。



同时,


在这次课程设计中,


我深刻感受到与人合作的力 量的强大。


特别是在


编写程序中出现错误时,而由于自己身在“ 程序之中”


,一时无法发现自己的一


些潜意识的错误,


此时,


别人的帮助检查程序的确帮我省了很多无用功,

< br>也非常


感谢老师和同学给与了我很多对程序改进的建议。



这次课程设计终于顺利完成了,


在设计中遇到了很多编程问题,


最后在老师


的辛勤指导下,


最终还是迎 刃而解。


同时,


对给过我帮助的所有同学和各位指导

< p>
老师表示忠心的感谢






13

-


-


-


-


-


-


-


-