课程设计报告范例.docx
- 文档编号:4190968
- 上传时间:2022-11-28
- 格式:DOCX
- 页数:10
- 大小:88.36KB
课程设计报告范例.docx
《课程设计报告范例.docx》由会员分享,可在线阅读,更多相关《课程设计报告范例.docx(10页珍藏版)》请在冰豆网上搜索。
课程设计报告范例
河北工业大学计算机软件技术基础(VC)2012年课程设计报告
学院信息工程学院学院班级通信122班姓名芮晓玉学号122228成绩____
一、题目:
成绩统计(11)
二、设计思路
1、总体设计
1)分析程序的功能
玩家和计算机进行猜拳(石头剪刀布),每次游戏过程为玩家和计算机各自出拳,然后输出胜负关系,以及统计各自的胜利次数。
2)系统总体结构:
每一次游戏的过程可以由这几部分完成:
玩家出拳,计算机出拳,胜负判断,输出胜负关系,输出统计信息,由玩家选择是否继续游戏。
总共六个步骤:
模块
函数名称
玩家选择
PlayerChoice
计算机出拳
ComputerChoice
胜负判断
JudgeWinner
输出胜负关系
OutputWinner
输出统计信息
OutputSummary
是否继续游戏
CanQuit
对于每一次游戏,关注的数据有三个:
玩家的出拳,计算机的出拳,胜负关系;对于统计信息需要三个计数器:
玩家的胜利次数,计算机的胜利次数,平局的数量。
这两组数据内部耦合度很高,所以考虑把他们封装为结构体变量。
玩家的胜利次数,计算机的胜利次数,平局的数量的初值应该为0。
表示信息
成员名称
表示信息
成员名称
玩家的出拳
pPlayer
玩家胜利次数
cPlayer
计算机的出拳
pComputer
计算机胜利次数
cComputer
胜负关系
winOrLose
平局的次数
cDrawGame
结构体:
GameData
结构体:
GameSummary
变量:
aGame
变量:
summary
此外玩家选择的出拳有三种:
石头、剪刀、布;胜负关系也有玩家胜、计算机胜和平局三种情况。
可以用相应的数值表示:
出拳
数值
胜负关系
数值
石头
0
玩家胜利
0
剪刀
1
计算机胜利
1
布
2
平局
2
2、各功能模块的设计:
说明各功能模块的实现方法
1)PlayerChoice模块
该函数返回用户的出拳,所以返回值为整数类型。
要实现的功能是询问用户要选择(0石头,1剪刀,2布)哪一个,然后判断用户的输入是否合法(值为0,1,2中的一个),若合法则返回用户的输入,不合法则要求用户重新输入。
代码参见PlayerChoice函数。
2)ComputerChoice模块
该函数返回计算机的出拳,所以返回值为整数类型。
计算机出拳采用rand函数,rand函数返回0-32767之间的随机值,为了保证数值在0-2之间,需要把取得的随机数对3求余,然后返回余数,在主函数中把该函数的返回值赋予aGame变量的pComputer成员。
代码参见ComputerChoice函数。
3)JudgeWinner模块
该函数根据玩家和计算机的出拳情况来返回胜负关系,返回值为整数类型。
该判断可以使用查表的方法来解决,首先构造判断表:
计算机
石头
剪刀
布
玩家
0
1
2
石头
0
2
0
1
剪刀
1
1
2
0
布
2
0
1
2
然后根据玩家的出拳作为行号,计算机的出拳作为列号,直接从二维数组中取得胜负关系。
因为函数需要玩家和计算机的出拳情况,则需要把aGame变量传递给该函数。
代码参见JudgeWinner函数。
4)OutputWinner模块
该函数根据aGame的值来输出胜负情况说明,不需要返回值。
可以用拟人的方式来输出胜负情况,例如:
“你出的是石头,计算机出的是剪刀,恭喜你,你获胜了。
”,或者“你出的是剪刀,计算机出的是石头,很遗憾,你输了。
”以及“你出的是石头,计算机出的是石头,你们俩平局了。
”,那么根据玩家和计算机的出拳来输出对应的石头、剪刀或布,根据胜负情况来输出最后的结果。
玩家或计算机的出拳
数值
胜负情况
输出的字符串
0
石头
0
恭喜你,你获胜了
1
剪刀
1
很遗憾,你输了
2
布
2
你们俩平局了
代码参见OutputWinner函数。
5)OutputSummary模块
该函数输出统计信息,首先根据本次游戏的结果对计数值进行修改,所以需要主函数将summary变量的地址传递给该函数来修改计数值。
修改后输出统计信息。
代码参见OutputSummary函数。
6)CanQuit模块
该函数返回是否能够退出游戏,返回值为1可以退出,返回值为0则继续游戏。
需要询问用户是否要退出游戏(0继续,1退出),若用户输入为0,1之外的值则要求用户重新输入,然后返回用户输入的值。
代码参见CanQuit函数。
7)创新设计部分
计算机希望自己的胜利次数与玩家的胜利次数的比例能够保持在3:
2以上,那么计算机就需要作弊,每当计算机发现自己现在的比值小于1.5,那么计算机就选择直接取胜。
若玩家为0石头,计算机就直接选择2布,玩家为1剪刀,计算机就直接选择0石头,若玩家为2布,计算机则选择1剪刀,又是一个显而易见的查表{2,0,1},此时ComputerChoice函数就需要aGame变量和summary变量了。
改进的代码参见ComputerChoice函数(第二版)。
3、设计中的主要困难及解决方案
设计中用到的rand函数在最初使用的时候总是取得相同的随机数序列,经过查阅资料得知,在使用rand函数之前必须先用srand函数设置随机数种子,最后在程序中利用time函数返回时钟周期数作为种子的编号。
4、你所设计的程序最终完成的功能
1)说明你编制的程序能完成的功能
能够由用户选择出拳,然后判断胜负并输出战果和统计信息。
2)准备的测试数据及运行结果
三、程序清单
1)main函数
//主函数
voidmain()
{
//利用cpu运行的毫秒级时间来选择随机数种子。
srand((unsignedint)time(NULL));
//声明结构体数据变量
GameDataaGame;
GameSummarysummary={0,0,0};
while
(1)
{
aGame.pPlayer=PlayerChoice();//玩家出拳
aGame.pComputer=ComputerChoice(aGame,summary);//计算机出拳
aGame.winOrLose=JudgeWinner(aGame);//判断胜负关系
OutputWinner(aGame);//输出胜负情况
OutputSummary(aGame,&summary);//输出统计信息
if(CanQuit())break;
}
}
2)PlayerChoice函数
intPlayerChoice()
{
intn;
while
(1)
{
cout<<"请选择你要出的拳(0石头,1剪刀,2布):
";
cin>>n;
//若输入合法则结束循环
if(n>=0&&n<=2)
break;
cout<<"您的输入有误,请输入0,1,2中的一个数字。
\n";
}
returnn;
}
3)ComputerChoice函数
intComputerChoice()
{
returnrand()%3;
}
4)JudgeWinner函数
intJudgeWinner(GameDatag)
{
//胜负关系表
staticintwinOrLose[3][3]={
{2,0,1},
{1,2,0},
{0,1,2}};
//根据玩家的选择和计算机的选择查表
returnwinOrLose[g.pPlayer][g.pComputer];
}
5)OutputWinner函数
voidOutputWinner(GameDatag)
{
//输出信息表
staticchar*choice[3]={"石头","剪刀","布"};
staticchar*winner[3]={
"恭喜你,你获胜了",
"很遗憾,你输了",
"你们俩平局了"};
//根据用户的选择,计算机的选择和胜负关系查表
cout<<"你出的是"< <<",计算机出的是"< <<","< "< } 6)OutputSummary函数 voidOutputSummary(GameDatag,GameSummary*s) { if(g.winOrLose==0) //玩家胜利 s->cPlayer++; elseif(g.winOrLose==1) //计算机胜利 s->cComputer++; else //平局 s->cDrawGame++; //输出统计信息 cout<<"------------------------------------\n"; cout<<"\t玩家胜利次数: "< cout<<"\t计算机胜利次数: "< cout<<"\t平局次数: "< cout<<"------------------------------------\n"; } 7)CanQuit函数 intCanQuit() { intn; while (1) { cout<<"是否继续游戏? (0继续,1退出)"; cin>>n; //若输入合法则结束循环 if(n>=0&&n<=1)break; cout<<"您的输入有误请重新输入"< } returnn; } 8)ComputerChoice函数(第二版) intComputerChoice(GameDatag,GameSummarys) { //定义用于获胜的表 inttoWin[3]={2,0,1}; if((double)s.cComputer/(double)s.cPlayer>1.5) returnrand()%3; else //根据玩家的选择查表 returntoWin[g.pPlayer]; } 四、对该设计题目有何更完善的方案 1、对自己完成程序进行自我评价。 我的程序较好的完成了任务中规定的设计内容,并完成了创新要求的设计,运行正确。 2、对课题提出更完善的方案 在显示石头剪刀布的时候考虑用ASCII码绘图的方式显示,并加上颜色控制使得程序获得更高的友好度和吸引力。 五、收获及心得体会 这个部分就不写范例了,但是对于咱们工科同学来说,这个部分内容应该去写通过课程设计对程序设计的一些新的理解,以及总结出的一些经验。 千万不要把这个部分写成小学生的读后感之类的文字,例如下面的范文就是小学生式的读后感: 历时一周的课程设计结束了,在课程设计的这段时间里,我挥洒着青春与汗水。 从拿到题目的彷徨到解题过程的艰辛,从运行失败的无助到检查程序的认真,从调试过程的烦恼到运行成功喜悦。 balabala………… 注意: 把收获及心得体会写成和上面示例一样空洞无物的,收获及心得体会部分0分。 日期: 2013年6月25日
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课程设计 报告 范例