C语言推箱子,猜数字
- 格式:docx
- 大小:100.14 KB
- 文档页数:16
一实验题目
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 //随机函数头文件
int a[10],b,n,p=0; //a数组用来实现记录随机数据和输入函数,,记为初始数组。b用来实现正确数字的输出和数字统计,记为存储数组。p统计正确的个数
//取得随即函数
void rd()
{
//产生4个不一样的数并赋值给初始函数
n=rand()%10;
for(int m=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];
}
//输出函数
void show()
{
//输入提示
cout<<"!!!按以下提示猜出这个每位数字都不同四位数。如要重新玩请输入 “0” !!"<
//猜中的情况输出
if(p==5) cout<<"@数据错误请重新输入@"<
if(p==4) cout<<"********恭喜你全部猜中!*********"<
if(p<4)
{
cout<<" ****你猜中数字个数!--->"<
cout<<"*****你猜中正确位子的数字个数"<
}
cout<<"输入你猜的数字";
}
//判断函数
void jg( )
{
show();
cin>>a[5];
// 若是重玩则重新调用初始函数
if(a[5]==0) {rd();p=0;}
else{ //将非初始化数据全重置
p=0;
for(int i=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(int j=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(int j=5;j<=9;j++)
{
//位置和数字都对的
if(a[i]==a[j]&&j==i+6) { p++;b++;break;}
if(a[i]==a[j])
{b++;break;} //仅仅数字存在的
}
}
}
jg();//实现连续。
}
void main()
{
rd();//初始函数调用一次。
jg();
show();
}
2.推箱子代码
#include
#include
//定义初始化数组函数。
char n[20][20];
int j=2,k=2; //用来记录人走的路,实现走的连续性
char x=0; //x用于控制步子方向.由于是全局变量,可以实现连续调用
int f=1; //实现关数的控制
//枚举限制x的范围
//第一关的输出函数
void firstout()
{
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(int y=0;y<=19;y++)
{
for(int i=0;i<=19;i++)
cout<
cout<
}
}
//第一关的重置函数
void firstrd()
{
for(int i=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';
}
//第二关输出函数部分
void sndout()
{
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';