对抗小游戏课程设计报告.docx
《对抗小游戏课程设计报告.docx》由会员分享,可在线阅读,更多相关《对抗小游戏课程设计报告.docx(24页珍藏版)》请在冰点文库上搜索。
对抗小游戏课程设计报告
计算机学院计算机科学与技术专业
《程序设计综合课程设计》报告
(2011/2012学年第一学期)
学生姓名:
学生班级:
学生学号:
指导教师:
2012年12月27日
对
抗
小
游
戏
2.1课程设计题目................................................3
2.2系统模块图...................................................4
3.1游戏规则....................................................5
3.3设计思路...................................................6
附录一:
参考文献.......................................................15
附录二:
程序清单.........................................................................................................16
第一章课程设计的目的和要求
1.1课程设计的目的
C++语言课程设计的主要目的是培养学生综合运用C++程序设计课程所学到的知识,编写C++程序解决实际问题的能力,以及严谨的工作态度和良好的程序设计习惯。
通过课程设计的训练,学生应该能够了解程序设计的基本开发过程,掌握编写、调试和测试C++语言程序的基本技巧,充分理解结构化程序设计的基本方法。
C++语言程序设计的主要任务时要求学生遵循软件开发过程的基本规范,运用结构化程序设计的方法,按照课程设计的题目要求,分析、设计、编写、调试和测试C++语言程序及编写设计报告。
本次课程设计是通过设计一个较为简单的“对抗小游戏”,进一步熟悉C++中有关各种知识的运用与掌握。
了解系统开发的需求分析、模块分析、程序流程图、编码测试、模块组装与整体调试的全过程,加深对C++的理解与VisualC++环境的使用;逐步熟悉程序设计的方法,并养成良好的编程习惯,进一步培养完善的C++编程设计思维,为以后进行软件编程、数据库管理等深入学习打下一个牢固基础
1.2课程设计的目标
本课程设计的目标:
1.巩固和加深学生对C++语言课程的基本知识的理解和掌握;
2.掌握C++语言编程和程序调试的基本技能;
3.掌握利用C++语言进行软件设计的方法;
4.提高书写程序设计说明文档的能力;
5.提高运用C++语言解决实际问题的能力。
1.3课程设计要求
基本要求:
1.题目:
设计一个“对抗小游戏”软件;
2.了解该系统软件开发的相关背景;
3.参考相关书籍学习课程设计的基本知识;
4.清楚所开发系统软件的各个相关功能,以便顺利开发系统软件;
5.对系统功能模块进行分析,写出设计说明文档;
6.设计完成的软件要便于操作和使用;
7.对自己所设计的程序进行调试,并不断完善;
8.在设计过程中熟练掌握软件编程的相关知识
9.详细体会并记录相关过程,并将心得体会写在课程设计报告中;
10.设计完成后提交课程设计报告。
第二章课程设计任务内容
2.1课程设计题目
对抗小游戏
由计算机自动判断是否加注
2.2系统模块图
第三章详细设计说明
3.1游戏规则
(1)本游戏采用人机对战方式,从A,2,3。
。
。
K为牌面的大小表示。
(2)游戏在开始时系统默认赌注为1,当双方进行对抗时,游戏者可根据自身的牌点决定是否继续下注,例如拿到k,把握增大,则在计算机的牌点出来之前加大赌注,但不超过5点。
(3)将双方牌点的比较扩大为两张牌点之和,若出现一组对子,则对子牌点大于任何单牌,若双方均为对子,则比较牌点之和。
(4)玩家的分数在0或者大于50时游戏则自动退出。
(5)玩家如果在第一次发牌时没有加注,则系统默认电脑赢,玩家扣除一分,游戏结束一轮会有玩家的游戏总分数(玩家的初始分数是20)。
3.2游戏过程简介
3.3设计思路
vc++中,类有很好的封装性,要完成对抗游戏的以上功能,可以先构造一个类,将所需要的函数放入其中,再根据需要,编写具体的函数源程序。
该程序的过程较为烦琐,要仔细考虑每一步,避免反复,尤其应当注意让函数的功能尽可能做的能够解决多个问题。
第四章软件使用说明及运行结果
4.1软件使用说明
玩家根据系统发的第一张牌的大小决定是否下注,这时系统提示玩家是否下注,下注输入1,否则输入0。
这时游戏结束,电脑得一分,玩家损失1分。
如果玩家在第一张牌时下注,系统发第二张牌,同时和电脑随机得到的牌相比较,最后得出玩家的最后成绩。
这时系统提示玩家是否继续,继续输入1,放弃输入0。
如果玩家一直继续,则直到玩家的分数在0或者50的时候游戏自动结束。
4.2游戏运行结果(截图)
第五章课程设计心得与体会
对于课程设计一开始有一种一头雾水的感觉,它是干什么的,我要怎么做。
拿下来题目之后,觉得以我的能力根本就不可能实现这个题目的要求,可是慢慢我发现它并非不可实现。
只要耐心的分析它要的功能需要什么函数实现,就可以做到。
于是我就着手做这个程序,可是它也并不像我想得那么简单。
在设计中刚开始出现了一百多个错误,令我一头雾水,但是在经过几天的检查与修改后,能够编译出来,这令我非常的高兴,但是运行结果有点出乎我的意料,所运行的结果,不能达到所期望的,但是经过一番修改后,能够输出,并且能进行游戏,这让我喜出望外。
说实话这是我第一次,编写一个200多行的程序。
虽然写的程序比较繁琐,没有任何技巧,但我觉得这是个美好的开始,说明我也可以自己做东西了。
在我自己写出之后都有点不敢相信自己,因为对于我来说是个编程的新手,刚学了一学期,在课程设计中,刚开始真有点对自己失去信心,但是在我真正的开始编写时,就发现事情并不是我想的那么糟,只要肯下决心就会让你自己发现原来自己的事,只有在自己真正的做了之后,才能感觉到那种成功的喜悦,那种失败的酸辛。
这次课程设计也让我感觉得到了我的不足,我也从网上找到过相同的程序源代码。
并且比我的实现的功能还要多,可是我的程序却要比他们的多好几倍,这也使我很苦恼。
我知道原因就是我的程序并没有分模块编译,这也是问题所在,因为模块化设计部并不太明白。
我想既然这些问题暴露出来了,我也没必要回避了。
这次设计先搞一段落,放假后才是我追上别人的最好的时间,我将利用这段时间,好好的把这个弱项补回来。
没编程序时感觉难度很大,无从下手。
当耐下心来从头至尾将源代码看了两遍才对程序有个模糊的认识。
在修改程序时,发现有许多不懂和淡忘的地方,回过头来查找相关资料,把问题一个个击破。
并且有些较难理解的语句在不断修改的过程中可以逐渐清晰。
课程设计可以充分发挥我的编程综合能力,将自己的编程知识串联起来,综合利用,自己的编程能力。
很高兴有这个机会促使我编程。
总之,在这个程序设计中的收获还是非常多的。
附录一:
参考文献
1.谭浩强著.c++程序设计北京.清华大学出版社,2004
2.谭浩强著.c++程序设计题解与上机指导.北京:
清华大学出版社,2005
附录二:
程序清单
#include
#include
#include//定义杂项函数及内存分配函数
#include//定义关于时间的函数
intflag;
classCCard
{
staticintnloop;//出牌的次数,游戏结束时给出的总的出牌次数
intnscore;//总分
intnwin,nlose;
staticintndraw;//赢,输,平的次数
intnbet;//赌注
public:
intncard1,ncard2;//有2张牌
intbet;
CCard();//构造函数
voidsetcard();//随机产生2张牌
intaddbet(int);//增加赌注,失败返回0
friendvoidcompare(CCard&,CCard&);//友元函数,比较牌点的大小并显示结果
friendvoidshowresult(CCard&,CCard&);//友元函数,输出输赢结果及最后的积分
};
intCCard:
:
ndraw=0;
intCCard:
:
nloop=0;
CCard:
:
CCard()
{
nscore=20;
bet=nscore;
nwin=0;
nlose=0;
nbet=0;
}
voidCCard:
:
setcard()
{
//srand(time(NULL));
ncard1=(rand()%13+2);
ncard2=(rand()%13+2);
}
intCCard:
:
addbet(inta)
{
nbet=a;
if(nbet>nscore||nbet<1)
{
return0;
}
return1;
}
voidcompare(CCard&user,CCard&computer)
{
if((user.ncard1+user.ncard2)>(computer.ncard1+computer.ncard2))
{
user.nscore+=computer.nbet;
computer.nscore-=computer.nbet;
user.nloop++;
computer.nloop++;
user.nwin++;
computer.nlose++;
user.bet=user.nscore;
computer.bet=computer.nscore;
if(computer.nscore<=0)
{
showresult(user,computer);
return;
}
cout<<"这局玩家赢"<}
elseif((user.ncard1+user.ncard2)<(computer.ncard1+computer.ncard2))
{
computer.nscore+=user.nbet;
user.nscore-=user.nbet;
user.nloop++;
computer.nloop++;
computer.nwin++;
user.nlose++;
user.bet=user.nscore;
computer.bet=computer.nscore;
if(user.nscore<=0)
{
showresult(user,computer);
return;
}
cout<<"这局计算机赢"<}
else
{
cout<<"和局"<user.nloop++;
computer.ndraw++;
}
}
voidshowresult(CCard&user,CCard&computer)
{
cout<<"---------------游戏结束!
结果:
----------"<if(user.nscore<=0)cout<<"计算机胜出,玩家要加油咯!
"<elsecout<<"恭喜玩家胜出,再接再厉!
"<cout<<"出牌数:
"<cout<<"玩家积分:
"<cout<<"玩家胜的次数:
"<cout<<"玩家负的次数:
"<cout<<"玩家平的次数:
"<cout<<"计算机积分:
"<cout<<"计算机胜的次数:
"<cout<<"计算机负的次数:
"<cout<<"计算机平的次数:
"<cout<<"-----------------------------------------"<flag=1;
user.nloop=0;
user.ndraw=0;
cout<<"游戏结束,按任意键退出"<}
voidmain()
{
select:
flag=0;
inth,start,bet,cont,sel=1;
charch;
CCarduser,computer;
cout<<"开始游戏请按1"<<""<<"放弃请选0"<bingin:
if(flag==1)
{system("cls");
gotoselect;
}
cin>>start;
switch(start)
{
case1:
{cout<<"开始发牌,期待一下吧……";
user.setcard();
computer.setcard();
break;
}
case0:
{showresult(user,computer);exit(0);}
}
cout<cout<<"你的第一张牌是:
"<if(user.ncard1<=10&&user.ncard1>1)cout<else
{
switch(user.ncard1)
{
case14:
cout<<"A";
break;
case11:
cout<<"J";
break;
case12:
cout<<"Q";
break;
case13:
cout<<"K";
}
}
cout<cout<<"是否选择下注:
"<cin>>cont;
switch(cont)
{
case0:
{sel=0;gotonextplayer;}
}
cout<<"你现在还有"<bet:
cout<<"请押赌注"<cin>>bet;
if(bet>5)
{
cout<<"押注请不要超过5哦,重试一下吧"<gotobet;
}
if(!
(user.addbet(bet)&&computer.addbet(bet)))
{
cout<<"押注要大于0哟,再来一次"<gotobet;
}
nextplayer:
if(sel==0)
{
switch(computer.ncard1+computer.ncard2)
{
case28:
case27:
case26:
case25:
case24:
bet=5;break;
case23:
case22:
case21:
case20:
case19:
bet=4;break;
case18:
case17:
case16:
case15:
case14:
bet=3;break;
case13:
case12:
bet=2;break;
case11:
case10:
case9:
bet=1;break;;
case8:
case7:
case6:
bet=2;break;
case5:
case4:
case3:
case2:
case1:
bet=1;break;
}
while(!
(user.addbet(bet)&&computer.addbet(bet)))
{bet--;}
cout<<"计算机下注"<cin>>ch;
switch(ch)
{
case'Y':
case'y':
{
break;}
case'N':
case'n':
{
cout<<"继续游戏请选1,退出游戏请按0"<sel=1;
gotobingin;
break;
}
}
h=user.addbet(bet);
switch(h)
{
case0:
cout<<"你的剩余赌注已不足,请重新选择!
";gotobet;break;
case1:
break;
}
cout<<"押注成功"<cout<<"你的第二张牌是:
"<if(user.ncard2<=10&&user.ncard2>1)cout<else
{
switch(user.ncard2)
{
case14:
cout<<"A";
break;
case11:
cout<<"J";
break;
case12:
cout<<"Q";
break;
case13:
cout<<"K";
}
}
cout<cout<<"继续请选1"<cout<<"放弃请选0"<cin>>cont;
switch(cont)
{
case1:
{
cout<<"计算机的第一张牌是:
"<if(computer.ncard1<=10&&computer.ncard1>1)cout<else
{
switch(computer.ncard1)
{
case14:
cout<<"A";
break;
case11:
cout<<"J";
break;
case12:
cout<<"Q";
break;
case13:
cout<<"K";
}
}
cout<cout<<"计算机的第二张牌是:
"<if(computer.ncard2<=10&&computer.ncard2>1)cout<else
{
switch(computer.ncard2)
{
case14:
cout<<"A";
break;
case11:
cout<<"J";
break;
case12:
cout<<"Q";
break;
case13:
cout<<"K";
}
}
cout<break;
}
case0:
{
cout<<"重新开始请选1"<cout<<"不想玩了请选0"<gotobingin;
break;
}
}
compare(user,computer);
cout<<"重新开始选择1"<cout<<"不想玩了请选0"<gotobingin;
}