c++课程设计报告 掷骰子游戏
-
目录
一、课题设计的内容与主要功能
..................................................
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
文
件
及
骰
子
游
p>
戏
dice_game.h
文
件
组
成
,
< br>在
main()
函
数
中
,
先
建
立
类
2
DiceGame
的对象
objGame
并调用类
DiceGame
的构造函数,为类的数据成员
赋初值并开始游戏,再用对象
objGame
访问类的成员函数
Game(),
进入游戏,
通过选项玩家选择进入游戏或退出游戏。
在函数
Game()
中
,先调用
Help()
函数显示游戏规则,并调用
utility.h
文件
Rand
< br>类中
SetRandSeed()
函数设定当前时间为随
机数种子,
进入
while
循环中,<
/p>
显示游戏选项,玩家可选择
1.
获得帮助
然后调用成员函数
Help()
p>
显示提示;
2.
玩一手游戏
然后调用成员函数
RollDice()
,把随机的两个骰子的点数赋值
给整形数
sum<
/p>
,通过
switch()
语句判断玩家输
、赢或者平局。若玩家第一盘为
平局状态为
TIE
,则该局骰子和为玩家的点数把
sum
赋值给
myPoint
,玩家可
通过调用
utility.h
文件中的
UserSaysY
es()
函数选择继续投骰子,直到赚到
该点数时获胜状态为<
/p>
WIN
,
但是用
if
语句判断如果投掷出的和为
7
或者
连续投
掷出六次平局,则游戏者该局为输了
LOSE
。最后用
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() //
模拟投掷一次骰子
p>
,
返回值为所投的两颗
骰子向上一面的点数
之和
{
int numOfDice1;
//
p>
所投掷的第
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
p>
,模拟第一次投掷骰子,并用
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
既
p>
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.
p>
若玩家中途忘记游戏规则,则课选择选项
1
,进入帮助提醒的界面
9
4.
玩家选择选项
< br>2
,进入游戏,并在第一次投掷中获得胜利
10
5
.
玩家进入游戏,第一次投掷获得点数,但最后投掷出了点数是
7
,所以失败了
6.
玩家第一希投掷为平局,
获得点数,
但在接下来的次投
掷中连续
6
次平局,
由
游戏规则可知,玩家在此局中又失败了
11
7.
玩家玩完了游戏,选择选项
3
p>
退出游戏,并显示玩家在此次游戏中的结果
五、总结
课程设计是培养学生综合运用所学知识
,
发现
< br>,
提出
,
分析和解决实际问题,
锻炼实践能力的重要环节,
是对学生实际工作能力的具体训练和
考察的过程。
而
C++
作为一门编程语
言,
对于我们自动化专业以后的学习和工作有着重要的作用,
所
以我们必须努力学习好并灵活运用。
回顾此次
C++
课程设计,至今我仍感慨颇多。的确,从分析课题到最终的完
成报告,从理论到实践,在整整一个星期的日子里,可以说得上是苦多于甜。但
是通过这次课程设计确实学到了很多很多的的东西,不仅巩固了大一时学习的
C++
知识,而且通过多次上机操作学到了很多在书本上所没有学到过的知识,同
时通过这一次实习,
更加熟练了自己的使用编程软件
VC6.0
的操作技能。
在这一
次的实
习中,把学习的
C++
知识运用到编写一个小型游戏软件,也学
习了一些软
件工程基本的内容和过程。
自己亲身编写一个软件,
虽然过程是艰难的,
但是当
最终看到自
己的程序运行出了预期的结果时,
那一刻,
心里的确挺自豪的,
也是
12
通过这一次实习的过程,
发现编程是一个挺有成就感的工作,
点
燃了自己对编程
的热情。我想,在这次实习之后,我会多看看这方面的书籍,发展自己编
程方面
的兴趣。
同时,
在设计的过程中
我也发现了自己的不足之处,
对以前所学过的知
识理解得不够深
刻,
掌握得不够牢固,
比如说对程序编译后的错误的分析不熟练
、
对编程软件中的功能也不能很熟练的使用、
对较复杂的各个语
句的关系的分析不
是很清楚……所以在这次课程设计之后,
我一
定要多注意练习这些方面的不足之
处,努力完善自己。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,
只有理论
知识
是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,
p>
才能真正为社会服务,
从而提高自己的实际动手能力和独立思考的能
力。
回想自
己在最开始的编写程序的过程,的确充满了困难,如
:在怎么把自己的想法用
C++
语言来实现上;各个循环语句、
条件语句、开关语句的运用和包含关系,真
的让我耗尽了精力!记得在《软件工程》这本
书中看过一句话“测试只能证明错
误的存在,但不能证明错误的不存在”
,由测试结果得出,我所完成的程序已完
成了计划的内容和功能,
符合了最初的研制要求,
并适当改进和实现了游戏的规
则(游戏平局次数不能超过
6
次,否则这一句为游戏者输了)
,但是我相信这个
程
序
还
是
有
很
多
地
方
可
以
改
进
,
例<
/p>
如
:
尽
管
已
近
设
定
了
条
件
语
句
if(select!=1&&select!=2&&select!=3
)
来限制玩家的选择,但是当玩家进入游
戏时,
输入错误的提示若为字母,
则程序会自动进入一个死循环……等这些还是
需要自己后续的改进。在自己这一次亲身体会编写程序中,切身实际的感受到
< br>C++
语言的特点。如:
C++
的通过类和对象来实现封装性。我所编写的
Game
()
函数就是类
DiceGame
的成员函数,其
中就涉及到了许多类的数据成员和成员函
数的访问。同时,我感受到
C++
语言的风格也是比较简练明了的。
同时,
在这次课程设计中,
我深刻感受到与人合作的力
量的强大。
特别是在
编写程序中出现错误时,而由于自己身在“
程序之中”
,一时无法发现自己的一
些潜意识的错误,
此时,
别人的帮助检查程序的确帮我省了很多无用功,
< br>也非常
感谢老师和同学给与了我很多对程序改进的建议。
这次课程设计终于顺利完成了,
在设计中遇到了很多编程问题,
最后在老师
的辛勤指导下,
最终还是迎
刃而解。
同时,
对给过我帮助的所有同学和各位指导
老师表示忠心的感谢
13