C语言推箱子猜数字.docx

上传人:b****6 文档编号:6566925 上传时间:2023-01-08 格式:DOCX 页数:21 大小:84.31KB
下载 相关 举报
C语言推箱子猜数字.docx_第1页
第1页 / 共21页
C语言推箱子猜数字.docx_第2页
第2页 / 共21页
C语言推箱子猜数字.docx_第3页
第3页 / 共21页
C语言推箱子猜数字.docx_第4页
第4页 / 共21页
C语言推箱子猜数字.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

C语言推箱子猜数字.docx

《C语言推箱子猜数字.docx》由会员分享,可在线阅读,更多相关《C语言推箱子猜数字.docx(21页珍藏版)》请在冰豆网上搜索。

C语言推箱子猜数字.docx

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1