C语言推箱子猜数字.docx
- 文档编号:6566925
- 上传时间:2023-01-08
- 格式:DOCX
- 页数:21
- 大小:84.31KB
C语言推箱子猜数字.docx
《C语言推箱子猜数字.docx》由会员分享,可在线阅读,更多相关《C语言推箱子猜数字.docx(21页珍藏版)》请在冰豆网上搜索。
C语言推箱子猜数字
一实验题目
1.3.猜数游戏
2.4.利用数组和字符显示实现推箱子游戏;
二实验内容
1,编写一个猜数字游戏,游戏规则:
a,一个四位数,各位上的数字不重复,从1到9。
b,按以下提示猜出这个四位数。
c,每次猜测输入的数据给出本次共猜对了多少个数字。
e,给出本次猜对的数字并且位置正确的个数。
2.推箱子游戏
用二维数组实现
三设计思想
1猜数字游戏
(1)随即数字和输入数字之间实现每一位的比较,需要把其每一位都独立出来才可,这就需要数组来实现存储。
要输出的数据是记录性数据,可以用全局变量实现。
(2)产生四位不同的随机数字,不知道方法。
可以用一次产生一个,然后判断是否合法,再把这一个和其他几个比较如果一样就一直产生。
这样可以产生四个不同的随机数字。
输入的数字为四位不同的数字,为了实现和随机数逐位的比较需要把它拆分为4个数字。
(3)把独立出来的数字比较,对的就把相应的全局变量+1,
(4)输出函数要实现输入一次就刷新一次,就需要处理函数循环调用输出函数,这样不是输出间断。
(5)细节。
可以在相应函数设置判断项实现。
游戏中输入错误了,输出函数要输出提示;过关了要提示。
若玩游戏途中要重新开始了,就重新开始函数。
2推箱子游戏
(1)要求用二唯数组实现推箱子游戏
(2)总体设置的思路规划。
A代表人,*箱子,O代表箱子要到的位置,@表位箱子到达了位置.1上2下3左4右.5初始化...w表示墙壁游戏规则,推箱子进入正确位子。
。
1.数据初始化:
屏幕初始化.用2伟数组实现.
2.判断是否胜利.
3.输出:
胜利输出,一般输出
4.实现移动
5.输出....循环调用实现自动刷新
(3)设置初始函数给各数赋值。
(4)输出函数,把数据全部输出。
判断怎么输出,还要循环来实现一步一刷新实现走动。
(5)设置走动函数。
什么情况下可以走动,什么情况下可以推动,可移动就通过字母的赋值实现走动
(6)优化细节。
输入错误提示,重玩提示,过关提示,
(7)关数的添加。
输出函数,初始函数由于调用的都是比较集中部分数据,可以把不同的输出和初始集成,再调用实现关数的增加。
所以可以一关一个自己的关级初始函数与关级输出函数。
就需要把初始函数部分分成总初始函数和关级初始函数,总初始函数判断调用哪个关级初始函数,同样输出函数也是这样。
在函数内部还是用调各自的总函数来实现循环。
不管什么情况下走动的规则都一样,所以走动函数不再改动。
(8)各关的连续,在过关的时候提示,然后判断是否调用下一关的初始函数中间可以用全局变量实现控制
四代码
1.猜数字代码:
//猜数字游戏
//1.产生随机数字
#include
#include
inta[10],b,n,p=0;//a数组用来实现记录随机数据和输入函数,,记为初始数组。
b用来实现正确数字的输出和数字统计,记为存储数组。
p统计正确的个数
//取得随即函数
voidrd()
{
//产生4个不一样的数并赋值给初始函数
n=rand()%10;
for(intm=0;;m++)
{
if(n!
=0)
{
a[0]=n;break;
}
else
n=rand()%10;
}
n=rand()%10;
for(m=0;;m++)
{
if(n!
=a[0]&&n!
=0)
{
a[1]=n;break;
}
else
n=rand()%10;
}
n=rand()%10;
for(m=0;;m++)
{
if(n!
=a[0]&&n!
=a[1]&&n!
=0)
{
a[2]=n;break;
}
else
n=rand()%10;
}
n=rand()%10;
for(m=0;;m++)
{
if(n!
=a[0]&&n!
=a[1]&&n!
=a[2]&&n!
=0)
{
a[3]=n;break;
}
else
n=rand()%10;
}
a[4]=a[0]*1000+a[1]*100+a[2]*10+a[3];
}
//输出函数
voidshow()
{
//输入提示
cout<<"!
!
!
按以下提示猜出这个每位数字都不同四位数。
如要重新玩请输入“0”!
!
"< //猜中的情况输出 if(p==5)cout<<"@数据错误请重新输入@"< if(p==4) cout<<"********恭喜你全部猜中! *********"< if(p<4) { cout<<"****你猜中数字个数! --->"< cout<<"*****你猜中正确位子的数字个数"< } cout<<"输入你猜的数字"; } //判断函数 voidjg() { show(); cin>>a[5]; //若是重玩则重新调用初始函数 if(a[5]==0){rd();p=0;} else{//将非初始化数据全重置 p=0; for(inti=6;i<=9;i++) a[i]=NULL; b=NULL; //将输入的数分解 a[9]=a[5]%10; a[8]=a[5]/10%10; a[7]=a[5]/10/10%10; a[6]=a[5]/10/10/10%10; //判断输入数据有效性 if(a[5]/10/10/10>=10&&a[5]/10/10/10==0)p=5;//输入大于5位的 else { for(i=6;i<=9;i++) for(intj=9-i;j>=1;j--) { if(a[i]==0){p=5;break;}//输入不足4位的 if(a[i]==a[i+j])//输入有重复的 {p=5;break;} }} //比较,若一样则猜对,将数值附给存储数组 if(p! =5) { for(i=0;i<=3;i++) for(intj=5;j<=9;j++) { //位置和数字都对的 if(a[i]==a[j]&&j==i+6) {p++;b++;break;} if(a[i]==a[j]) {b++;break;}//仅仅数字存在的 } } } jg();//实现连续。 } voidmain() { rd();//初始函数调用一次。 jg(); show(); } 2.推箱子代码 #include #include //定义初始化数组函数。 charn[20][20]; intj=2,k=2;//用来记录人走的路,实现走的连续性 charx=0;//x用于控制步子方向.由于是全局变量,可以实现连续调用 intf=1;//实现关数的控制 //枚举限制x的范围 //第一关的输出函数 voidfirstout() { cout<<"1代表上;2代表下;3代表左;4代表右;5代表初始化游戏.规则: *代表箱子,O代表要推倒的正确的位子。 A是人。 推入正确的箱子不再推会推动,可以一次走多步"< if(n[6][7]=='*')n[6][7]='@'; if(n[7][8]=='*')n[7][8]='@'; if(n[8][8]=='*')n[8][8]='@'; if(n[6][3]=='*')n[6][3]='@'; if(n[7][6]=='*')n[7][6]='@'; //数据为空的,显示位置 if(n[6][7]=='')n[6][7]='O'; if(n[7][8]=='')n[7][8]='O'; if(n[8][8]=='')n[8][8]='O'; if(n[6][3]=='')n[6][3]='O'; if(n[7][6]=='')n[7][6]='O'; //数据全部输出 for(inty=0;y<=19;y++) { for(inti=0;i<=19;i++) cout< cout< } } //第一关的重置函数 voidfirstrd() { for(inti=0;i<=19;i++) { n[0][i]='w'; n[19][i]='w'; n[i][0]='w'; n[i][19]='w'; } //人 n[j][k]='';j=2;k=2;n[2][2]='A'; //箱子 n[5][3]='*';n[5][4]='*';n[10][7]='*';n[5][5]='*';n[5][6]='*'; //位置 n[6][7]='O';n[7][8]='O';n[8][8]='O';n[7][6]='O';n[6][3]='O'; } //第二关输出函数部分 voidsndout() { cout<<"1代表上;2代表下;3代表左;4代表右;5代表初始化游戏.规则: 推箱子进入正确位子。 推入正确的箱子不再推会推动,可以一次走多步"< //箱子的位置要显示出来,,若是箱子和位置合二为一就显示为正确 if(n[6][7]=='*')n[6][7]='@'; if(n[10][3]=='*')n[10][3]='@'; if(n[8][8]=='*')n[8][8]='@'; if(n[6][3]=='*')n[6][3]='@'; if(n[16][15]=='*')n[16][15]='@'; //数据为空的,显示位置 if(n[6][7]=='')n[6][7]='O'; if(n[10][3]=='')n[10][3]='O'; if(n[8][8]=='')n[8][8]='O'; if(n[6][3]=='')n[6][3]='O'; if(n[16][15]=='')n[16][15]='O'; //数据全部输出 for(inty=0;y<=19;y++) { for(inti=0;i<=19;i++) cout< cout< } } //第二关重置函数部分 voidsndrd() { //墙壁 for(inti=0;i<=19;i++) { n[0][i]='w'; n[19][i]='w'; n[i][0]='w'; n[i][19]='w'; } for(ints=9;s<=19;s++) { n[3][s]='w'; } //人 n[j][k]='';j=3;k=3;n[3][3]='A'; //箱子 n[5][3]='*';n[10][4]='*';n[2][7]='*';n[5][5]='*';n[5][6]='*'; //位置 n[6][7]='O';n[10][3]='O';n[8][8]='O';n[7][6]='O';n[16][15]='O'; } //第三关输出函数部分 voidthout() { cout<<"1代表上;2代表下;3代表左;4代表右;5代表初始化游戏.规则: 推箱子进入正确位子。 推入正确的箱子不再推会推动,可以一次走多步"< //箱子的位置要显示出来,,若是箱子和位置合二为一就显示为正确 if(n[6][7]=='*')n[6][7]='@'; if(n[10][3]=='*')n[10][3]='@'; if(n[8][8]=='*')n[8][8]='@'; if(n[6][3]=='*')n[6][3]='@'; if(n[16][15]=='*')n[16][15]='@'; //数据为空的,显示位置 if(n[6][7]=='')n[6][7]='O'; if(n[10][3]=='')n[10][3]='O'; if(n[8][8]=='')n[8][8]='O'; if(n[6][3]=='')n[6][3]='O'; if(n[16][15]=='')n[16][15]='O'; //数据全部输出 for(inty=0;y<=19;y++) { for(inti=0;i<=19;i++) cout< cout< } } //第三关重置函数部分 voidthrd() { //墙壁 for(inti=0;i<=19;i++) { n[0][i]='w'; n[19][i]='w'; n[i][0]='w'; n[i][19]='w'; } for(inty=16;y<=19;y++) { for(ints=0;s<=6;s++) n[y][s]='w'; } for(ints=9;s<=19;s++) { n[3][s]='w'; } //人 n[j][k]='';j=3;k=3;n[3][3]='A'; //箱子 n[2][3]='*';n[10][4]='*';n[2][7]='*';n[5][5]='*';n[5][6]='*'; //位置 n[6][7]='O';n[10][3]='O';n[8][8]='O';n[7][6]='O';n[15][15]='O'; } //第四关输出函数部分 voidfrout() { cout<<"1代表上;2代表下;3代表左;4代表右;5代表初始化游戏.规则: 推箱子进入正确位子。 推入正确的箱子不再推会推动,可以一次走多步"< //箱子的位置要显示出来,,若是箱子和位置合二为一就显示为正确 if(n[4][5]=='*')n[4][5]='@'; if(n[5][6]=='*')n[5][6]='@'; if(n[6][7]=='*')n[6][7]='@'; if(n[7][8]=='*')n[7][8]='@'; if(n[8][8]=='*')n[8][8]='@'; //数据为空的,显示位置 if(n[4][5]=='')n[4][5]='O'; if(n[5][6]=='')n[5][6]='O'; if(n[6][7]=='')n[6][7]='O'; if(n[7][8]=='')n[7][8]='O'; if(n[8][8]=='')n[8][8]='O'; //数据全部输出 for(inty=0;y<=19;y++) { for(inti=0;i<=19;i++) cout< cout< } } //第四关重置函数部分 voidfrrd() { //墙壁 for(inti=0;i<=19;i++) { n[0][i]='w'; n[19][i]='w'; n[i][0]='w'; n[i][19]='w'; } for(inty=16;y<=19;y++) { for(ints=0;s<=6;s++) n[y][s]='w'; } for(ints=9;s<=19;s++) { n[3][s]='w'; n[4][s]='w'; n[5][s]='w'; n[6][s]='w'; } //人 n[j][k]='';j=3;k=3;n[3][3]='A'; //箱子 n[5][3]='*';n[9][4]='*';n[3][7]='*';n[5][5]='*';n[7][6]='*'; //位置 n[4][5]='O';n[5][6]='O';n[6][7]='O';n[7][8]='O';n[8][8]='O'; } //总重置函数 voidrd() { //清空全部数据 for(inty=0;y<=19;y++) { for(inti=0;i<=19;i++) n[y][i]=''; cout< } //重新规划墙壁 switch(f) { case1: firstrd();break; case2: sndrd();break; case3: thrd();break; case4: frrd();break; }} //判断是否胜利。 。 与输出函数数 voidjudgeout() { inti=0; switch(f) { case1: //先判断是否胜利 if(n[6][7]=='@'&&n[7][8]=='@'&&n[8][8]=='@'&&n[7][6]=='@'&&n[6][3]=='@') { cout<<"恭喜通过第一关"< cout<<"若想进下一关时请输入按9: "< cin>>i; if(i==9) {f++;//下一关的控制 n[j][k]='';//人物的数据清空 rd(); break; }} firstout();break;//刷新步子 case2: if(n[6][7]=='@'&&n[10][3]=='@'&&n[8][8]=='@'&&n[7][6]=='@'&&n[16][15]=='@') { cout<<"恭喜通过第二关"< cout<<"若想进下一关时请输入按9: "< cin>>i; if(i==9) {f++;//下一关的控制 n[j][k]='';//人物的数据清空 rd(); break; }} sndout();break; case3: if(n[6][7]=='@'&&n[10][3]=='@'&&n[8][8]=='@'&&n[7][6]=='@'&&n[15][15]=='@') { cout<<"恭喜通过第二关"< cout<<"若想进下一关时请输入按9两次: "< cin>>i; if(i==9) {f++;//下一关的控制 n[j][k]='';//人物的数据清空 rd(); break; } } thout();break; case4: if(n[4][5]=='@'&&n[5][6]=='@'&&n[6][7]=='@'&&n[7][8]=='@'&&n[8][8]=='@') { cout<<"恭喜通过第三关"< cout<<"若想进下一关时请输入按9: "< cin>>i; if(i==9) {f++;//下一关的控制 n[j][k]='';//人物的数据清空 rd(); break; } } frout();break; } cout<<"请输入移动方向-->"< cin>>x; for(i=0;x>54||x<48;i++) {cout<<"******错误命令请重新输入"< } //实现移动函数。 。 。 //实现移动函数。 。 。 voidmove(chari) { switch(i)//控制语句 { case49: if(n[j-1][k]! ='w'&&n[j-1][k]! ='@') //有墙阻挡原样输出 //用数据交换实现移动 { //判断可以移动箱子不能,能就交换数据,不能停止 if(n[j-1][k]=='*') if(n[j-2][k]! ='w'&&n[j-2][k]! ='*') { n[j-2][k]='*'; } else break; n[j][k]=''; j=j-1; n[j][k]='A'; } break; case50: if(n[j+1][k]! ='w'&&n[j+1][k]! ='@')//第一步判断下一步是否为墙和已经移动好的位置 { if(n[j+1][k]=='*')//第二步判断如果下一步为箱子的情况 if(n[j+2][k]! ='w'&&n[j+2][k]! ='*')//第三步判定可以推动箱子与否 { n[j+2][k]='*';//箱子的交换数据 } else break; //人的数据交换 n[j][k]=''; j=j+1; n[j][k]='A'; } break; case51: if(n[j][k-1]! ='w'&&n[j][k-1]! ='@') { if(n[j][k-1]=='*') if(n[j][k-2]! ='w'&&n[j][k-2]! ='*') { n[j][k-2]='*'; } else break; n[j][k]=''; k=k-1; n[j][k]='A'; } break; case52: if(n[j][k+1]! ='w'&&n[j][k+1]! ='@') { if(n[j][k+1]=='*') if(n[j][k+2]! ='w'&&n[j][k+2]! ='*') { n[j][k+2]='*'; } else break; n[j][k]=''; k=k+1; n[j][k]='A'; } break; case53: rd(); break; case54
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 箱子 数字
![提示](https://static.bdocx.com/images/bang_tan.gif)