您的当前位置:首页C高级语言程序设计猜数字游戏

C高级语言程序设计猜数字游戏

2020-07-10 来源:乌哈旅游
《高级语言程序设计》课程设计

说明书

设计题目:猜数字游戏

目录

1. 游戏说明、、、、、、、、、、、、、、、、、、、、、、、、、、1 2. 程序的模块组成、、、、、、、、、、、、、、、、、、、、2 3. 程序流程、、、、、、、、、、、、、、、、、、、、、、、、、、2 4. 程序源清单、、、、、、、、、、、、、、、、、、、、、、、、2 5.课程设计总结、、、、、、、、、、、、、、、、、、、、、、、19

课题:猜数字游戏

说明:每次随机产生5个数字,提供10次机会,若猜中进入下一次猜数,每猜中一次奖励100分,可中途退出猜数游戏,可以累计分数,和产生积分榜 基本功能: 1.用户注册 2.用户积分查看

游戏流程设计思路: 答案真确 开始游戏

进入游戏1

答案错误 继续提示 10次后退出游戏 设计思路:

1. 程序的模块组成:

主函数、、、、、、、、、、、、int mian 创立结构体、、、、、、、、struct record 定义数组、、、、、、、、、、char name[ ] 清除文本模式窗口、、system(\"cls\")

.新游戏注册用户 用户积分查看 退出游戏 输入数字 与真确答案比较 给出提示 继续或退出游戏

1

2. 程序流程:

分别用void定义开始界面display,操作函数sys(int a),记录文件recwrite(),浏览界面vdisplay(),读取文件recread() ,开始游戏newgame(),判断并增加记录addrec()。在用int mian主函数调用。

srand( (unsigned)time( NULL ),以时间为种子,产生随机数,更具有代表性,这样避免了随机出显的数字服从正太分布。 3程序源清单: #include #include #include #include #include

struct record {

char name[10]; int sorce; }rec;

2

int num; //输入的数字

void display(); //开始界面 void xuanze(); //选择函数 void sys(int a); //操作函数 void zhuce(); void newgame(); void vdisplay(); int qushu(); int tishi(int aa); void addrec(); void recread(); void recwrite();

void main() { display(); }

void display() {

system(\"cls\"); //用户注册 //新游戏 //浏览记录界面 //取数函数 //提示函数

//判断并且增加记录 //读取记录文件 //写入记录文件 //开始界面 //清屏

3

printf(\"

============================================\\n\"); printf(\" ================数字竞猜游戏================\\n\"); printf(\"

============================================\\n\"); printf(\"\\n\");

printf(\" 1: 新游戏\\n\"); printf(\"\\n\");

printf(\" 2: 注册用户\\n\"); printf(\"\\n\");

printf(\" 3: 用户积分查看\\n\"); printf(\"\\n\");

printf(\" 4: 退出\\n\"); printf(\"\\n\");

printf(\"

============================================\\n\"); xuanze(); }

4

void xuanze() //选择函数 { int a;

printf(\"请输入你所选择的操作数:\\n\"); scanf(\"%d\

if(a==1||a==2||a==3||a==4) { sys(a);

}//选择相应的操作数执行函数 else {

printf(\"错误的操作数!\\n\");; printf(\"\\n\");

printf(\"请按任意键继续...\\n\"); getchar(); getchar(); display(); } }

void sys(int a) //操作函数 {

5

switch(a) {

case 1:newgame();break; case 2:zhuce();break; case 3:vdisplay();break; case 4:exit(0);break; //退出 } }

void zhuce() {

system(\"cls\");

printf(\"请输入你的名字\\n\"); scanf(\"%s\

recwrite(); printf(\"恭喜!注册成功!\\n\"); printf(\"请按任意键继续...\\n\"); getchar(); getchar(); display(); }

//写入6

void recwrite() //写入记录文件 { FILE *fp;

fp=fopen(\"E:\\\\rec.rec\ if(fp==NULL) printf(\"写入失败!\\n\");

fwrite(&rec,sizeof(struct record),1,fp); fclose(fp); }

void vdisplay() //浏览记录界面

system(\"cls\"); //清屏

printf(\"

============================================\\n\"); printf(\" ================数字竞猜游戏================\\n\");

printf(\" ====================积分

{

7

====================\\n\"); recread(); printf(\"\\n\");

printf(\" 姓名: %s : 分数 %d\\n\ printf(\"\\n\");

printf(\"请按任意键继续...\\n\"); getchar(); getchar(); display(); }

void recread() //读取记录文件 { FILE *fp;

L: fp=fopen(\"E:\\\\rec.rec\ if(fp==NULL) {

recwrite();

goto L; //初始化 }

if(fread(&rec,sizeof(record),1,fp)==1)

8

{ } else {

printf(\"文件读取失败!\"); } fclose(fp); }

void newgame() //新游戏 { recread();

system(\"cls\"); //清屏 printf(\"\\n\"); if (rec.name==0)

{ printf(\" 请先注册用户\\n\"); printf(\"请按任意键继续...\\n\"); getchar(); getchar(); vdisplay();}

9

///////////////////////////////////////////////////////////////////////////// int snum; //输入的数字 int sn=10; //机会次数 num=qushu(); //取数

L: system(\"cls\"); //清屏 printf(\"

============================================\\n\");

printf(\"

============================================\\n\"); printf(\" ================数字竞猜游戏================\\n\"); printf(\"

============================================\\n\"); printf(\"\\n\");

printf(\"

===========================================\\n\"); printf(\" 姓名: %s : 分数 %d\\n\ printf(\"\\n\");

printf(\" 按 1: 终止游戏,显示

答案\\n\");

printf(\"

============================================\\n\"); printf(\"\\n\");

printf(\"请输入你猜想的五个数字(格式为99999样式)你还有 %d 次机会:\\n\ scanf(\"%d\

if(snum<100000 && snum>10000 || snum==1) {

if(snum==1) {

printf(\"你放弃了本局游戏!该五个数字是: %d\\n\ printf(\"\\n\");

printf(\"请按任意键继续...\\n\"); getchar(); getchar(); display() ; } else

11

{

int flag=tishi(snum);

if(flag!=0 && sn!=0) { sn--; if(sn==0) {

printf(\"真是遗憾!十次机会没有了!没有关系!下次继续!\\n\"); printf(\"\\n\");

printf(\"请按任意键继续...\\n\"); getchar(); getchar(); newgame() ; }

printf(\"请按任意键继续猜...\\n\"); getchar(); getchar(); goto L; } else

12

{

if(sn!=0) addrec(); else {

printf(\"请按任意键继续...\\n\"); getchar(); getchar(); newgame(); } } } } else {

printf(\"错误的操作数!\\n\");; printf(\"\\n\");

printf(\"请按任意键继续...\\n\"); getchar(); getchar(); goto L; }

13

}

int tishi(int aa) //提示函数 { int a,b,c,d,e; int af,bf,cf,df,ef;

if(aa==num) {

printf(\"恭喜!你猜对了!五个数就是:%d\\n\

return(0);

} else

{ a=num/10000; b=num/1000%10;

c=num/100%100%10; //获取输入的四个数字 d=num/10%1000%100%10; e=num%10000%1000%100%10;

14

af=aa/10000; bf=aa/1000%10;

cf=aa/100%100%10; //获取输入的四个数字 df=aa/10%1000%100%10; ef=aa%10000%1000%100%10;

if(af>a)printf(\"\\n第一个数应该比 %d 小一点!\\n\ if(af==a)printf(\"恭喜!第一个数字对了!应该是: %d\\n\数字比较

if(afif(bf>b)printf(\"第二个数应该比 %d 小一点!\\n\

if(bf==b)printf(\"恭喜!第二个数字对了!就是: %d\\n\ 数字比较

if(bfif(cf>c)printf(\"第三个数应该比 %d 小一点!\\n\

if(cf==c)printf(\"恭喜!第三个数字对了!就是: %d\\n\ 数字比较

if(cfif(df>d)printf(\"第四个数应该比 %d 小一点!\\n\

////// 15

if(df==d)printf(\"恭喜!第四个数字对了!就是: %d\\n\ //数字比较

if(dfif(ef>e)printf(\"第五个数应该比 %d 小一点!\\n\

if(ef==e)printf(\"恭喜!第五个数字对了!就是: %d\\n\ 数字比较

if(efvoid addrec() //判断并且增加记录 {

int a; //标志位 a=100; recread();

//16

rec.sorce= rec.sorce+a; recwrite();

printf(\"请按任意键继续...\\n\"); getchar(); getchar(); newgame(); }

int qushu( ) //取数函数 { int a=0; int i=0;

17

srand( (unsigned)time( NULL ) ); //随机数种子设置

while(i==0) {

i=rand(); //这样做就是为了增加随机性 i=i%100; }

L: for(int j=0;ja=a+rand(); //判断随机数是否是五位数 如果不是继续取数 }

a=(a/i+rand())%100000; if(a<10000)goto L;

return(a); }

18

3. 课程设计总结

这次的课程设计总算是告一段落,虽然源程序不是自己亲自全部完成,但是毕竟也花费了自己的很多精力,从开始的到网上查找资料,然后自己一点点的改正,调试,中间的好多问题自己都没有办法解决,也看不懂,也让自己知道光靠书本的那点知识是无法解决的,书本的知识毕竟是有限的。好多知识都得自己去学,而不是等着老师教。第一次完成这么大的一个完整的程序,让自

己意识到了自己的知识欠缺。和以前课本上的许多知识没有学到位。有时候在电脑面前呆几个小时就是为了解决一个小问题,很是费时间和精力,更是让自己知道了基础知识的重要性,再复杂的程序也是从基础开始的,所以打好基础是关键!

19

因篇幅问题不能全部显示,请点此查看更多更全内容