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<<"******错误命令请重新输入"<>x;}
}
//实现移动函数。
。
。
//实现移动函数。
。
。
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