1、高级程序语言课程设计猜数字推箱子高级程序语言课程设计课程名称:C语言课程设计 指导老师: 班 级: 学 号: 姓 名: 一、实验题目1、猜数字游戏;2、推箱子游戏。二、实验内容1、猜数字编写一个猜数字游戏,规则如下:a,一个四位数,各位上的数字不重复,从1到9。b,按一下提示猜出这个四位数。c,每次猜测输入的数据给出本次共猜对了多少个数字。d,给出本次猜对的数字并且为之正确的个数。2、推箱子利用数组和字符显示实现推箱子游戏。三、设计思路1、猜数字游戏首先通过rand()随机产生一个四位数,将各个数位上的数字储存到一个数组num中,定义int型变量number储存输入的四位数,然后将这个数的各个
2、数位上的数字储存到数组cmp中,将num和cmp中的元素相比较,当numi= =cmpj时,m+,当i= =j同时成立时,n+,这样就可以判断出本次输入的四位数猜对了m个,其中n个位置正确。2、推箱子游戏推箱子游戏地图由一个字符型二维数组确定,通过调用无返回值的函数move_up(),move_down(),move_left(),move_right()来实现向上下左右的移动。每次移动前都会有一个循环遍历数组找到小人位置,然后用switch语句对不同情况下小人如何移动进行不同的处理,while()循环来判断是否箱子都被移动到指定位置来确定是继续移动还是结束游戏。int step用于记录移动的
3、步数。四、程序代码1、猜数字游戏程序代码如下:#include#include#includevoid main() int i,j,x,number,m,n; int num10,cmp10; srand(unsigned(time(NULL); for (i=0;i4;i+) leap:x=rand()%9+1; for(j=0;ji;j+) if(numj=x) goto leap; numi=x; cout*endlendl; cout 猜数字游戏 endlendl; cout*endlendl; cout* 游戏规则:此数字为一个由19组成的各个数位不相等的四位数,每次输入后,系统给
4、出猜对数字个数xAyB(即猜对x个,其中y个位置正确),直到猜对四个数字,游戏结束。endlendl; cout* 小提示:输入“0”直接看答案。endlendl; cout* 开始游戏! *endlendl;leapp:cout请输入一个四位数:nnumber;if(number=0) cout正确答案:endl;for(i=0;i4;i+) coutnumi ; coutendl;m=n=0;for(i=0;i4;i+) cmp3-i=number%10; number=number/10;for(i=0;i4;i+)for(i=0;i4;i+) for(j=0;j4;j+) if(cmp
5、i=numj) m+; if(i=j) n+; if(n=4) coutCONGRATULATIONA!endl; for(i=0;i4;i+) coutnumi ; coutendl;else coutnAmBendl; goto leapp;2、推箱子游戏程序代码如下:#include#includechar arr88=37,37,37,37,37,37,37,37,37,20, ,37, , , ,37,37, ,2,37, ,2, ,37,37, , ,37, , , ,37,37, , ,2, , , ,37,37,15, ,37,37,37,37,37,37,15, , , ,
6、,15,37,37,37,37,37,37,37,37,37;int i,j,step=0;char t=0,a=20,b=2,c=15,d=37;void print() system(cls); cout*endlendl; cout 推 箱 子 endlendl; cout*endlendl; cout* 游戏规则 *endlendl; cout d 代表墙壁,a 是人,b 是箱子,c 是目的地,8、5、4、6分别为上、下、左、右。endlendl; cout* 开始游戏 *endlendlstep:stependlendl; if (arr51= ) arr51=15; if (arr
7、61= ) arr61=15; if (arr66= ) arr66=15; for(i=0;i8;i+) for(j=0;j8;j+) coutarrij ; if(j=7) coutendl; void move_up() for(i=0;i8;i+) for(j=0;j8;j+) if(arrij=20) switch(arri-1j) case 37:print(); break; case 2: switch (arri-2j) case 15: t=arri-2j; arri-2j=arri-1j; arri-1j=arrij; arrij= ; step+; print(); b
8、reak; case : t=arri-2j; arri-2j=arri-1j; arri-1j=arrij; arrij=t; step+; print(); break; case 37:print(); break; break; case 15: t=arri-1j; arri-1j=arrij; arrij= ; step+; print(); break; case : t=arri-1j; arri-1j=arrij; arrij=t; step+; print(); break; default: print(); void move_down() for(i=0;i8;i+)
9、 for(j=0;j8;j+) if(arrij=20) switch(arri+1j) case 37: print(); break; case 2: switch (arri+2j) case 15: t=arri+2j; arri+2j=arri+1j; arri+1j=arrij; arrij= ; step+; print(); break; case : t=arri+2j; arri+2j=arri+1j; arri+1j=arrij; arrij=t; step+; print(); break; case 37:print(); break; break; case 15:
10、 t=arri+1j; arri+1j=arrij; arrij= ; step+; print(); break; case : t=arri+1j; arri+1j=arrij; arrij=t; step+; print(); break; default: print(); void move_left() for(i=0;i8;i+) for(j=0;j8;j+) if(arrij=20) switch(arrij-1) case 37: print(); break; case 2: switch (arrij-2) case 15: t=arrij-2; arrij-2=arri
11、j-1; arrij-1=arrij; arrij= ; step+; print(); break; case : t=arrij-2; arrij-2=arrij-1; arrij-1=arrij; arrij=t; step+; print(); break; case 37:print(); break; break; case 15: t=arrij-1; arrij-1=arrij; arrij= ; step+; print(); break; case : t=arrij-1; arrij-1=arrij; arrij=t; step+; print(); break; def
12、ault: print(); void move_right() for(i=0;i8;i+) for(j=0;jn; switch(n) case 8: move_up(); break; case 5: move_down(); break; case 4: move_left(); break; case 6: move_right(); break; default : goto leap; coutendl恭喜过关!endlendlstep:stependl; 五、运行结果1、猜数字运行结果:2、推箱子游戏运行结果:六、实验心得这次课程设计题目有实用性强的“学生信息管理系统”,还有趣
13、味性强的“推箱子”和“猜数字”小游戏,也有挑战自我的“大数相乘”。通过“猜数字”和“推箱子”小游戏程序的设计和编写,我感觉在编写调试运行程序的过程中,我正在一点点的享受这个过程,而不是把它当做枯燥无味的作业来应付。虽然这个过程也许并不是很顺利,有时候会很纠结,甚至在编写“推箱子”代码的过程中我还面临把即将完成的代码推到重写的情况,在这种情况下,我学会了如何说服自己心平气和的坐下来重新整理思路,重新一行行的把新的代码写好并调试运行成功。我想这就是我们能从一遍遍的程序编写中学到的相比知识更重要的东西,这也算是一种经验,也是一种态度吧。虽然以现在的水平还不能做的尽善尽美,但是只要是自己一点点想出来做出来的东西,就是一点点经验的积累,也是值得肯定的。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1