今天有点无聊,随便写了点东西
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
#define mov_1 72//上
#define mov_2 80//下
#define mov_3 77//左
#define mov_4 75//右
#define tui 27//退出
char history[5][10] = {"未过关","未过关","未过关","未过关","未过关"};
int a[8][8]=
{
{0,0,3,3,3,3,0,0},
{0,0,3,5,5,3,0,0},
{0,0,3,0,5,0,3,0},
{0,3,0,0,4,5,3,0},
{3,3,0,4,0,0,3,3},
{3,0,0,3,4,4,0,3},
{3,0,0,2,0,0,0,3},
{3,3,3,3,3,3,3,3}
};//地图1
int guan_1(int a[][8]);
int reverse(char *a,int len);
void int_to_string(int his, char *hst)
{
char d[10];
char temp[2]= {0};
int i;
while(his%10)
{
char a = his%10 + '0';
temp[0] = a;
his = his/10;
strcat(hst,temp);
printf("%s\n",hst);
}
reverse(hst,strlen(hst));
}
int xuanguan()
{
int his = 0;
while(true)
{
system("cls");//清屏
printf("选关\n");
printf("1.懒得起名1\n");
printf("2.懒得起名1\n");
printf("3.懒得起名1\n");
printf("4.懒得起名1\n");
printf("5.懒得起名1\n");
printf("6.返回上一菜单\n");
switch(getch())
{
case 49:
int b[8][8];
for(int i=0; i<8; i++)
{
for(int j=0; j<8; j++)
{
b[i][j]= a[i][j];
}
}
his = guan_1(b);
if(his!=0)
{
int_to_string(his,history[0]);
return 1;
}
break;
case 50:
case 51:
case 52:
case 53:
printf("本关暂未设计");
getchar();
break;
case 54:
return 0;
}
}
}
int guan_1(int a[][8])
{
int cut=0;//计步数
int x=6,y=3;//初始位置
for(;;)//循环
{
int cunt=0;
system("cls");
for(int i=0; i<8; i++)
{
for(int j=0; j<8; j++)
{
if(a[i][j]==9)
{
cunt++;
}
switch(a[i][j])
{
case 0:
printf(" ");
break;
case 2:
printf("你");
break;//人
case 3:
printf("墙");
break;//墙
case 4:
printf("箱");
break;//箱子
case 5:
printf("〇");
break;//目标位置
case 7:
printf("你");
break;
case 9:
printf("箱");
break;
}
}
printf("\n");
}
if(4==cunt)
{
printf("成功\n步数:%d",cut);
return 0;
}
//根据数据的大小来判断当前的坐标上的情况
switch(getch())
{
case 'w':
case 'W':
case mov_1:
if(0!=x&&3==a[x-1][y])
{
a[x][y]=2;
}
else if(5==a[x-1][y]||0==a[x-1][y])
{
a[x][y]-=2;
a[x-1][y]+=2;
x--;
cut++;
}
else if((5==a[x-2][y]||0==a[x-2][y])&&(4==a[x-1][y]||9==a[x-1][y]))
{
a[x-2][y]+=4;
a[x-1][y]-=4;
a[x-1][y]+=2;
a[x][y]-=2;
x--;
cut++;
}
break;
case 'S':
case 's':
case mov_2:
if(0!=x&&3==a[x+1][y])
{
a[x][y]=2;
}
else if((5==a[x+1][y])||(0==a[x+1][y]))
{
a[x][y]-=2;
a[x+1][y]+=2;
x++;
cut++;
}
else if((5==a[x+2][y]||0==a[x+2][y])&&(4==a[x+1][y]||9==a[x+1][y]))
{
a[x+2][y]+=4;
a[x+1][y]-=4;
a[x+1][y]+=2;
a[x][y]-=2;
x++;
cut++;
}
break;
case 'a':
case 'A':
case mov_3:
if(0!=x&&3==a[x][y+1])
{
a[x][y]=2;
}
else if(5==a[x][y+1]||0==a[x][y+1])
{
a[x][y]-=2;
a[x][y+1]+=2;
y++;
cut++;
}
else if((0==a[x][y+2]||5==a[x][y+2])&&(4==a[x][y+1]||9==a[x][y+1]))
{
a[x][y+2]+=4;
a[x][y+1]-=4;
a[x][y+1]+=2;
a[x][y]-=2;
y++;
cut++;
}
break;
case 'D':
case 'd':
case mov_4:
if(0!=x&&3==a[x][y-1])
{
a[x][y]=2;
}
else if(5==a[x][y-1]||0==a[x][y-1])
{
a[x][y]-=2;
a[x][y-1]+=2;
y--;
cut++;
}
else if((0==a[x][y-2]||5==a[x-1][y])&&(4==a[x][y-1]||9==a[x][y-1]))
{
a[x][y-2]+=4;
a[x][y-1]-=4;
a[x][y-1]+=2;
a[x][y]-=2;
y--;
cut++;
}
break;
case tui:
return 0;
}
}
return cut;
}
int main(int argc,const char*argv[])
{
int choose = 1;
int level = 5;
while(true)
{
system("cls");//清屏
printf("推箱子(umbrella)\n");
printf("1.选关\n");
printf("2.记录\n");
switch(getch())
{
case 49:
xuanguan();
break;
case 50:
for(int i=1; i<=level; i++)
{
printf("第%-2d关的成绩为:%5s\n",i,history[i-1]);
}
getchar();
break;
}
}
}
int reverse(char *a,int len)
{
int i = 0;
int t;
int j;
for(i=0; i<len/2; i++)
{
t = a[i];
a[i] = a[len-1-i];
a[len-1-i] = t;
}
printf("\n");
}
在运行之前,先运行一下下面的代码以确定字符编码。
#include<stdio.h>
#include<conio.h>
int main(){
while(true){
int i=getch();
printf("%d\n",i);}
}
玩玩可以,但......