十点半小游戏课程设计.docx
- 文档编号:15873365
- 上传时间:2023-07-08
- 格式:DOCX
- 页数:24
- 大小:212.01KB
十点半小游戏课程设计.docx
《十点半小游戏课程设计.docx》由会员分享,可在线阅读,更多相关《十点半小游戏课程设计.docx(24页珍藏版)》请在冰点文库上搜索。
十点半小游戏课程设计
目录
第一章课程设计任务内容.............................................1
第二章游戏说明....................................................2
第三章程序设计的目的和要求3
3.1课程设计的目的3
3.2课程设计的实验环境3
3.3课程设计的预备知识3
3.4课程设计的要求4
第四章需求分析5
4.1引言5
4.2玩法设计介绍5
4.3系统性能需求分析5
第五章程序详细设计及流程图7
第六章系统测试及调试结果13
6.1系统测试13
6.2调试结果及截图13
第七章软件使用说明16
第八章课程设计总结及心得17
附录Ⅰ参考文献19
附录Ⅱ程序代码20
第一章课程设计任务内容
根据所学C++知识编写十点半小游戏程序代码,游戏者能正常进行游戏,任务列表如下:
1.开始游戏;
2.计算机对游戏者进行发牌;
3.游戏者根据自己的点数与10.5的差距以及对比电脑所拿牌的点数多少,决定是否要牌;
4.系统对游戏者和电脑拿到的牌进行比较;
5.判断胜负;
6.游戏者跟电脑分出胜负后,电脑会提示游戏者是否继续游戏,根据提示,按Y或y继续游戏,否则按任意健停止,退出游戏。
通过C++语言课程设计,我们了解高级程序设计语言的结构,掌握基本的分析问题和利用计算机解决问题的能力,并且具备初步的高级语言程序设计能力,为今后的计算机课程学习打下了坚实的基础。
第二章游戏说明
该程序必须在VisualC++6.0环境中运行,程序具有操作简单,无需组建等工序,直接编译、连接即可运行。
操作简单,根据提示即可完成游戏的全过程。
第三章程序设计概述
3.1课程设计的目的
通过本项课程设计,可以培养独立思考、综合运用所学有关相应知识的能力,能更好地巩固《高级语言程序设计》课程学习的内容,掌握工程软件设计的基本方法,强化上机动手编程能力,闯过理论和实践相结合的难关,更加了解c语言的好处和其可用性。
通过C语言课程设计,使学生了解高级程序设计语言的结构,掌握基本的分析问题和利用计算机求解问题的能力,具备初步的高级语言程序设计能力,为后续各门计算机课程的学习和毕业设计打下坚实的基础。
3.2课程设计的实验环境
该课程设计在设计与实验过程中需要在windowsXP系统/windowsVista系统中进行,程序设计要求在visualC++6.0平台中进行,完成代码的编写、编译、调试、测试等工作。
3.3课程设计的预备知识
在知识方面此课程设计需要掌握C语言的基本知识,熟练指针、链表等应用,掌握数据库等知识。
在操作方面此课程设计需要清楚windowsXP系统/windowsVista系统的操作,熟悉visualC++6.0编码平台。
以此可以顺利完成课程设计的编写、编译、调试、测试等工作。
3.4课程设计的要求
C语言程序设计的主要任务是要求学生遵循软件开发过程的基本规范,运用结构化程序设计的方法。
所谓结构化程序就是用高级语言表示的结构化算法,结构化程序设计强调程序设计风格和程序结构的规范化提倡清晰的结构。
这就要求
学生把一个复杂问题的求解过程分阶段进行,每一个阶段处理的问题都控制在人们容易理解和处理的范围内。
可以采用自顶向下、逐步细化、模块化设计、结构化编码的方法。
同时为了更好地完成本次程序设计,还要求学生仔细分析自己的选题,深刻了解课题的设计背景,做好课题的需求分析,将项目要完成的功能分析清楚,划分好功能模块,逐个实现。
在实际编码过程中,要做到思维严谨,化繁为简,代码简练。
第四章需求分析
4.1引言
这个小游戏操作简单,虽然只是人机对玩,但能够满足平常的娱乐需求。
按照游戏的提示,输入2,你可以看到游戏的介绍,在通俗易懂的介绍里面,你可以知道本小游戏的基本玩法,老少咸宜。
4.2玩法设计介绍
按游戏提示,输入1按回车进入游戏。
首先出现在你面前的,是电脑随机发给人和电脑的点数,这里有个好处,人可以看到电脑的牌,然后你根据自己的点数与10.5的差距以及对比电脑所拿牌的点数多少,决定是否要牌。
按游戏的进一步提示,按1,电脑会随机再抽一张牌给你,屏幕上会显示“你在拿到的点数为……”,“目前总点数为……”后面的就靠自己了,如果一开始你就按0,尽管你拿到的牌点数会比电脑低,但当电脑拿牌,一旦电脑所拿点数超过10.5,你还是有机会胜利的!
不过如果你一开始要牌就超过10.5了,那你就输入给电脑了。
当人跟电脑分出胜负后,电脑会提示你是否继续游戏,根据提示,按Y或y继续游戏,否则按任意健停止,退出游戏。
游戏玩法简单,基本上能达到娱乐的目的,但由于时间问题以及自己所掌握知识的有限,游戏还不够完美,希望在以后的学习中能够做到更好。
4.3系统性能需求分析
1.技术可行性
C语言是国际上广泛流行的计算机高级语言,它适合作为系统描述语言,即可以用来编写系统软件,也可以编写应用软件。
本游戏运用Windows2000/XP以上的操作系统,开发以WindowsXP为用户的操作平台,操作简单,方便,界面友善、老少都可以在闲暇时作为娱乐的《十点半小游戏》。
2.经济可行性
该系统所需要硬件设备,如服务器,PC机等,这些设备在性能上已经有了很大的提高,价格又相对较低,能够满足系统功能的要求。
在软件上,操作系统采用windowsXP,系统的开发采用VisualC++6.0,它作为一种现代化的编程语言,提供完善的指令控制语句等,同时满足不同系统的技术要求,这些软、硬件在游戏设计中已被大量应用,技术上都比较成熟。
3.操作可行性
操作上只需要简单的键盘操作即可。
游戏之前只要读懂游戏规则即可正常进行游戏。
第五章程序详细设计及流程图
函数的流程图是根据函数算法的内部结构而画,从清晰的函数流程图可以更清楚地了解函数。
z
图5.1主函数的流程图
子函数(voidfa_card(intj,intl,inta[52])电脑随机发牌流程图:
图5.4电脑拿牌流程图
第六章系统测试及调试结果
6.1系统测试
完成是十点半小游戏系统的详细设计后,接下来就到了系统测试阶段。
在这一阶段中,首先要完成代码的编译过程。
代码初步完成编写后,要仔细地进行编译,根据系统提示错误,进行修改。
注意代码的书写规范,包括命名惯例、注释、分隔和缩进等。
在这个过程中,我们要养成良好的程序编写习惯,对编译过程中经常出现的错误情况加以注意,为今后的程序编写打下基础。
6.2调试结果及截图
正确操作的显示结果
(1)进入游戏后显示的欢迎界面如图6.1所示:
图6.1
(2)按2进入游戏说明,显示界面如图6.2所示:
图6.2
(3)按1开始游戏,其中人按1拿牌到超过10.5的显示结果如图6.3、图6.4所示:
图6.3
图6.4
(4)人按1要完牌,按0电脑取牌,并比较两者得出胜负显示的结果如图6.5、图6.6所示:
图6.5
图6.6
(5)按任意键退出时的界面如图6.7所示:
图6.7
第七章软件使用说明
在windows操作系统下打开该软件,首先系统提示输入文件名称,如果该文件存在,系统将进入命令界面;如果不存在,系统将提示用户创建新文件并输入要创建文件的名称。
创建新文件后,按游戏提示,输入1按回车进入游戏。
首先出现在你面前的,是电脑随机发给人和电脑的点数。
按游戏的进一步提示,按1继续进行。
当人跟电脑分出胜负后,电脑会提示你是否继续游戏,根据提示,按Y或y继续游戏,否则按任意健停止,退出游戏。
第八章课程设计总结及心得
从课程设计开始到上交,用了三个星期的时间,在段时间里,我每天都对着电脑,思考着。
由于自己对十点半这个小游戏的玩法有点了解,所以这次课程设计我题目我选了“十点半小游戏”。
从代码的构思到基本完成,用了我一周时间,由于刚开始时对C语言课本的内容不是很熟悉,由于时间不多,所以我花了两天去看书,看完书后就到电脑上的操作,通过练习熟悉内容,基本上掌握了了一些基本操作,然后就上网去找资料,接着着手开始编写代码。
我先在脑海里回忆了几遍了这个小游戏的玩法,具体步骤,大体上定下一个架构。
由于这个游戏据自己所知的玩法是这样的:
首先庄家发牌,庄家人各一张牌,然后人根据自己所发牌的点数先决定是否要多一张牌,直到要到超过10.5为止。
当人要了牌,点数超过10.5后,庄家不需要再要牌就获得胜利,游戏结束;当人要完了牌,点数不超过10.5,到庄家要牌,如果庄家要完牌后点数超过了10.5,人获得胜利,否则比较两者谁的点数,大的获得胜利(这里不考虑当两者都超过10.5这种情况)。
根据游戏的玩法,为了游戏的方便,我忽略了一副牌的花色和颜色,用数字来代表相应的牌,如J,Q,K分别用11,12,13表示,A用1表示,其余数字2~10,用相应的数字表示。
由于一副牌中有52张牌(除去王),每一种牌都有四张,因些我把一副牌用一个数组a[52]表示,里面的元素用{1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,6,6,6,6,7,7,7,7,8,8,8,8,9,9,9,9,10,10,10,10,11,11,11,11,12,12,12,12,13,13,13}表示,每种牌所代表的点数为:
A代表1点,由于J,Q,K代表0.5,所以11,12,13代表的点数为0.5。
根据这种想法,我把代码的主函数分为了这样几部分:
一,首先由电脑随机发牌,人一张,电脑一张(电脑不能拿到人拿到的牌,同样在以后的发牌中都不能要到同样一张牌),以点数的形式显示在屏幕上,这里作为一个电脑发牌的子函数;二,人开始要牌,由电脑随机再发牌,直到人不要牌为止,这里作为一个人拿牌的子函数;三,人拿完牌后,到电脑拿牌,直到电脑拿牌超过10.5为止,这里作为一个电脑拿牌的了函数;四,在主函数里进行比较;整个代码的架构基本完成。
接着就是代码部分,由于要用到随机函数。
通过个课程设计,可以学得新的函数,新的知识,收益不错。
还有,由于自己定义的这副牌不分花色颜色,只代表点数,为了避免人和电脑在各自要牌中都抽到同一张牌或同一张牌被抽到多次,所以函数里要用到标记的方法,用到了指针,通过标记,达到不重复抽取牌的目的;另外,还用到了多种循环语句,for,while,还有if,break等语句。
在代码编写的过程中,也遇到很多问题,例如在电脑随机发给人和电脑一张牌时,由于时间极短,随机发到的牌会是相同的点数,因此在人与电脑共同随机获得牌这间至少要有一秒的延迟,,由于没用到delay函数,最后在同学的帮助下,通过两个空循环来实现时间的延迟,效果显著。
虽然遇到的问题还不止这些,但通过这次课程设计,在遇到问题,解决通过思考,查找资料,问老师或同学,到最终把问题解决,经过这两星期的经历,真的学到了不少东西。
同时,通过问老师或同学,可以学习他们的编程技巧,他们的编程思路,解决问题的方法等等,可谓受益非浅。
附录Ⅰ参考文献
【1】谭浩强<
【2】谭浩强<
附录Ⅱ程序代码
/*课程设计的题目为:
十点半小游戏*/#include"stdio.h"
#include"iostream"
#include"stdlib.h"
#include"time.h"
start()/*游戏界面*/
{
printf("\n");
printf("\n");
printf("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n");
printf("=========================================================================\n");
printf("\n");
printf("☆!
!
!
Well忽略etothegame!
!
!
☆\n");
printf("\n");
printf("\n");
printf("☆欢迎进入十点半小游戏☆\n");
printf("\n");
printf("--------〓-----〓-----〓-----〓-----〓-----〓---------\n");
printf("\n");
printf("☆1、开始游戏☆\n");
printf("\n");
printf("☆2、进入游戏说明☆\n");
printf("\n");
printf("=========================================================================\n");
printf("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n");
printf("制作人:
靳蓉\n");
printf("玩的开心\n");
return0;
}
jieshao()
{
printf("游戏介绍\n\n\n");
printf("欢迎大家来到十点半小游戏,这是一个简单易玩的小游戏,老少适合.");
printf("\n");
printf("\n");
printf("游戏玩法:
\n\n");
printf("按1开始游戏\n\n");
printf("电脑先随机发给人跟电脑一张牌,接着人先根据牌点数的大小决定是否要牌,然后电脑才要牌\n");
printf("拿完牌后电脑开始判断:
\n\n");
printf("1.人先要牌,当点数超过10.5时,电脑胜利.\n\n");
printf("2.人拿完牌,点数不超过10.5,到电脑要牌,电脑点数\n也不超过10.5,此时谁牌的总点数大谁胜利\n\n");
printf("3.人拿完牌,点数不超过10.5,到电脑要牌,电脑点数超过10.5,人胜利\n\n");
printf("☆你会玩了吗?
让我们一起进入十点半小游戏里面体验一下吧☆\n");
printf("按1进入游戏\n");
return0;
}
floatman,忽略pu,man1,忽略1;/*声明全局变量,man,忽略既是第一次人跟电脑拿牌也是第一次人跟电脑拿牌的总数*/
voidmain()/*主函数*/
{
voidfa_card(intj,intl,inta[52]);/*声明fa_card函数*/
voidmanget_card(intq,intw,inta[52],intb[52]);/*声明manget_card函数*/
void忽略puget_card(inta[52],intb[52]);/*声明忽略puget_card函数*/
intj1=0,l1=0;/*对电脑随机发给人和电脑的第一张牌点数赋初值,为0*/
ints,x;
charp;
inta[52]={1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,6,6,6,6,7,7,7,7,8,8,8,8,
9,9,9,9,10,10,10,10,11,11,11,11,12,12,12,12,13,13,13,13};/*定义副牌,不分花色,只代表点数*/
intb[52]={0};/*定义一个数组,用来标记牌中已被选过牌*/
int*pa,*pb,*pj1,*pl1;/*定义指针,分别用来指向a,b数组,以及电脑随机发给人和电脑的第一张牌*/
pa=a;
pj1=&j1;
pl1=&l1;
pb=b;
start();/*调用游戏开始界面函数*/
for(x=0;x<=1;x++)
{
scanf("%d",&s);
if(s==1)/*按1进入游戏*/
{
while
(1)
{
fa_card(j1,l1,pa);/*调用人拿牌函数*/
manget_card(j1,l1,pa,pb);/*调用电脑拿牌函数*/
if(man>=0.5&&man<=10.5)/*执行电脑拿牌函数的前提*/
忽略puget_card(pa,pb);
if((man>=1&&man<=10.5)&&(忽略pu>=1&&忽略pu<=10.5))/*人与电脑点数均没超过10.5时进行判断大小*/
{
if(man>忽略pu)
printf("youwin!
\n");
elseif(man==忽略pu)
printf("nolosenowin\n");
elseprintf("youlose!
\n");
}
printf("是否还要继续玩,按Y表示继续,按任意键结束游戏。
\n");/*询问是否执行新一轮的游戏*/
for(p=0;p<1;p++)
getchar();
p=getchar();
if(p!
='Y'&&p!
='y')/*新一轮游戏开始,上一次游戏数据清零*/
{printf("欢迎下次在来,谢谢!
~");
exit(0);
}
}
}
if(s==2)
jieshao();
}
}
voidfa_card(intj,intl,inta[52])/*定义fa_card函数,电脑随机发牌,
得到电脑随机发给人和电脑各一张牌所代表的点数*/
{
intf,g;
floatk,d;
srand(time(NULL));/**/
j=rand()%52;/*电脑开始随机发牌给人*/
k=a[j];
if(k>10)/*定义牌所代表的点数*/
man=0.5;
else
man=k;
printf("你得到的点数为:
%f\n",man);
for(f=0;f<10000;f++)/*空循环,用来延长时间*/
{
for(g=0;g<10000;g++)/*空循环,用来延长时间*/
{
}
}
l=rand()%52;/*两次空循环后,大概延时1S,电脑开始随机发牌给人*/
while
(1)
{
if(l==j)/*如果抽到相同的牌,重新再抽*/
l=rand()%52;
elsebreak;
}
d=a[l];
if(d>10)
忽略pu=0.5;
else
忽略pu=d;
printf("电脑得到的点数为:
%f\n",忽略pu);
}
voidmanget_card(intq,intw,inta[52],intb[52])/*定义manget_card函数,人拿牌*/
{
intj,n;
floatk;
b[q]=1;/*作标记*/
b[w]=1;/*作标记*/
srand(time(NULL));
while
(1)/*无限循环*/
{
printf("是否还要牌?
输入1表示要,输入0表示不要\n");
scanf("%d",&n);
if(n==1)/*按1进行选择要牌*/
{
j=rand()%52;
while
(1)
{
if(b[j]==1)/*抽到相同的牌重新再抽,直到不同为止*/
j=rand()%52;
elsebreak;
}
k=a[j];
if(k>10)
man1=0.5;
else
man1=k;
printf("你现在拿到的点数为:
%f\n",man1);
man=man1+man;
printf("目前总点数为:
%f\n",man);
}
if(n==0)break;/*n取0结束循环*/
if(man>=11)/*人先拿牌直到超过10.5,一轮游戏结束*/
{printf("youlose!
!
!
\n");
break;}
}
}
void忽略puget_card(inta[52],intb[52])/*定义忽略puget_card函数,电脑拿牌*/
{
intj,k;
srand(time(NULL));
while(忽略pu<=7)/*自定义当电脑拿牌总点数累加低于7时电脑才继续要牌*/
{
j=rand()%52;
while
(1)
{
if(b[j]==1)
j=rand()%52;
elsebreak;
}
k=a[j];
if(k>10)
忽略1=0.5;
else
忽略1=k;
printf("电脑拿到的牌为;%f\n",忽略1);
忽略pu=忽略1+忽略pu;
printf("目前电脑总的点数为:
%f\n",忽略pu);
if(忽略pu>=11)/*电脑超过10.5,而人没超过,判断,一轮游戏结束*/
{
printf("youwin!
!
!
!
\n");
break;
}
}
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 十点半 小游戏 课程设计