C课程设计报告--十点半小游戏.doc_第1页
C课程设计报告--十点半小游戏.doc_第2页
C课程设计报告--十点半小游戏.doc_第3页
C课程设计报告--十点半小游戏.doc_第4页
C课程设计报告--十点半小游戏.doc_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

仲恺农业技术学院课 程 设 计课 程 设 计题 目:十点半小游戏目 录一、需求分析 3二、概要设计 39三、祥细设计 916四、调试分析 1718五、课程设计总结 1819一、需求分析这个小游戏操作简单,虽然只是人机对玩,但能够满足平常的娱乐需求。按照游戏的提示,输入2,你可以看到游戏的介绍,在通俗易懂的介绍里面,你可以知道本小游戏的基本玩法,老少咸宜。按游戏提示,输入1按回车进入游戏。首先出现在你面前的,是电脑随机发给人和电脑的点数,这里有个好处,人可以看到电脑的牌喔 (_),然后你根据自己的点数与10.5的差距以及对比电脑所拿牌的点数多少,决定是否要牌(告诉你们一个秘密,这个游戏中电脑有点笨,呵呵。)。按游戏的进一步提示,按1,电脑会随机再抽一张牌给你,屏幕上会显示“你在拿到的点数为”,“目前总点数为”后面的就靠自己了,如果一开始你就按0,尽管你拿到的牌点数会比电脑低,但当电脑拿牌,一旦电脑所拿点数超过10.5,你还是有机会胜利的哦!不过如果你一开始要牌就超过10.5了,那你就输入给电脑了喔。当人跟电脑分出胜负后,电脑会提示你是否继续游戏,根据提示,按Y或y继续游戏,否则按任意健停止,退出游戏。 游戏玩法简单,基本上能达到娱乐的目的,但由于时间问题以及自己所掌握知识的有限,游戏还不够完美,希望在以后的学习中能够做到更好。二、概要设计这个小游戏只要采用while循环,附助以for循环,用到ifelse,break,指针等,还用了没学过的随机函数。整体上用到的函数,算法比较通俗易懂。(注:本代码用VC运行)yyYYNstart();int x ,ss=11s=2jieshao();fa_car(int j,int l,pa);manget_card(j1,l1,pa,pb);man=0.5&man=10.5compuget_card(pa,pb);开 始输入sx=0;xcompuYNYUNYNp=0;p=1&man=1&compu10YNf=0;f10000;f+g=0;g10YNn子函数(void manget_card(int q,int w,int a52,int b52)人拿牌流程图int j,n; float k; bq=1; bw=1;开 始输入n电脑得到的点数为:compu=dcompu=0.5是否还要牌?输入1表示要,输0表示不要nn=1j=rand()%52;YNn=03+45compuget_card(int a52,int b52)bj=1YNBreakk=ajk10man1=0.5Yman=k你现在拿到的点数为:man=man1+man;你目前总点数为:man11you lose!5Y2子函数compuget_card(int a52,int b52)电脑拿牌流程图开 始int j,k;compu10Ycom1=0.5;Ncom1=k;电脑拿到的点数为:compu=com1+compu;目前电脑总的点数为:compu=11Yyou win!2三、详细设计/* 课程设计的题目为:十点半小游戏 */#include stdio.h#includestdlib.h#includetime.hstart()/*游戏界面*/ printf(n); printf(n); printf( AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA n); printf( = n); printf( n); printf( !Wellcome to the game! n); printf( n); printf( n); printf( 欢迎进入十点半小游戏 n); printf( n); printf( - - n); printf( n); printf( 制作人:李土怀 n); printf( n); printf( 特别鸣谢:郑旭泽 n); printf( n); printf( = n); printf( AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA n); printf( 1、开始游戏 n); printf( 2、进入游戏说明 n); return 0;jieshao() printf( 游 戏 介 绍 nnn);printf(欢迎大家来到十点半小游戏,这是一个简单易玩的小游戏,老少适合. );printf( n);printf( n);printf(游戏玩法: nn);printf(按1开始游戏 nn);printf(电脑先随机发给人跟电脑一张牌,接着人先根据牌点数的大小决定是否要牌,然后电脑才要牌 n); printf(拿完牌后电脑开始判断: nn); printf(1.人先要牌,当点数超过10.5时,电脑胜利. nn); printf(2.人拿完牌,点数不超过10.5,到电脑要牌,电脑点数n也不超过10.5,此时谁牌的总点数大谁胜利nn); printf(3.人拿完牌,点数不超过10.5,到电脑要牌,电脑点数超过10.5,人胜利 nn); printf( 你会玩了吗?让我们一起进入十点半小游戏里面体验一下吧 n); printf( 按1进入游戏 n); return 0;float man,compu,man1,com1;/*声明全局变量,man,com既是第一次人跟电脑拿牌也是第一次人跟电脑拿牌的总数*/void main()/*主函数*/ void fa_card(int j,int l,int a52);/*声明fa_card函数*/void manget_card(int q,int w,int a52,int b52);/*声明manget_card函数*/void compuget_card(int a52,int b52);/*声明compuget_card函数*/ int j1=0,l1=0;/*对电脑随机发给人和电脑的第一张牌点数赋初值,为0*/ int s,x; char p; int a52=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;/*定义副牌,不分花色,只代表点数*/ int b52=0;/*定义一个数组,用来标记牌中已被选过牌*/ int *pa,*pb,*pj1,*pl1;/*定义指针,分别用来指向a,b数组,以及电脑随机发给人和电脑的第一张牌*/ pa=a; pj1=&j1; pl1=&l1; pb=b; start();/*调用游戏开始界面函数*/ for(x=0;x=0.5&man=1&man=1&compucompu) printf(you win!n); else if(man=compu) printf(no lose no winn); else printf(you lose!n); printf(是否还要继续玩,按Y表示继续,按任意键结束游戏。n);/*询问是否执行新一轮的游戏*/ for(p=0;p10)/*定义牌所代表的点数*/ man=0.5; else man=k; printf(你得到的点数为:%fn,man); for(f=0;f10000;f+)/*空循环,用来延长时间*/ for(g=0;g10) compu=0.5; else compu=d; printf(电脑得到的点数为:%fn,compu);void manget_card(int q,int w,int a52,int b52)/* 定义manget_card函数,人拿牌*/ int j,n;float k;bq=1;/*作标记*/bw=1;/*作标记*/srand(time(NULL); while(1)/*无限循环*/ printf(是否还要牌?输入1表示要,输入0表示不要n); scanf(%d,&n); if(n=1)/*按1进行选择要牌*/ j=rand()%52; while(1) if(bj=1)/*抽到相同的牌重新再抽,直到不同为止*/ j=rand()%52; else break; k=aj; if(k10) man1=0.5; else man1=k; printf(你现在拿到的点数为:%fn,man1); man=man1+man; printf(目前总点数为:%fn,man); if(n=0)break;/*n取0结束循环*/ if(man=11)/*人先拿牌直到超过10.5,一轮游戏结束*/ printf(you lose!n); break; void compuget_card(int a52,int b52)/* 定义compuget_card函数,电脑拿牌*/ int j,k; srand(time(NULL); while(compu10) com1=0.5; else com1=k; printf(电脑拿到的牌为;%fn,com1); compu=com1+compu; printf(目前电脑总的点数为:%fn,compu); if(compu=11)/*电脑超过10.5,而人没超过,判断,一轮游戏结束*/ printf(you win!n); break; 四、调试分析A、正确操作的显示结果进入游戏后显示的欢迎界面:按1开始游戏显示的结果:其中人按1拿牌到超过10.5的显示结果:人按1要完牌,按0电脑取牌,并比较两者得出胜负显示的结果:按任意键退出时的界面:五、课程设计总结实验心得从课程设计开始到上交,用了一个星期跟二天,在这一周多点的时间里,我每天都对着电脑,思考着。由于自己对十点半这个小游戏的玩法有点了解,所以这次课程设计我题目我选了“十点半小游戏”。 从代码的构思到基本完成,用了我一周时间,由于刚开始时对C语言课本的内容不是很熟悉,由于时间不多,所以我花了两天去看书,看完书后就到电脑上的操作,通过练习熟悉内容,基本上掌握了了一些基本操作,然后就上网去找资料,接着着手开始编写代码。 我先在脑海里回忆了几遍了这个小游戏的玩法,具体步骤,大体上定下一个架构。由于这个游戏据自己所知的玩法是这样的:首先庄家发牌,庄家人各一张牌,然后人根据自己所发牌的点数先决定是否要多一张牌,直到要到超过10.5为止。当人要了牌,点数超过10.5后,庄家不需要再要牌就获得胜利,游戏结束;当人要完了牌,点数不超过10.5,到庄家要牌,如果庄家要完牌后点数超过了10.5,人获得胜利,否则比较两者谁的点数,大的获得胜利(这里不考虑当两者都超过10.5这种情况)。根据游戏的玩法,为了游戏的方便,我忽略了一副牌的花色和颜色,用数字来代表相应的牌,如J,Q,K分别用11,12,13表示,A用1表示,其余数字210,用相应的数字表示。由于一副牌中有52张牌(除去王),每一种牌都有四张,因些我把一副牌用一个数组a52表示, 里面的元素用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. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论