
#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
char gamePass[50][50];//变量二位数组,用于临时存放关卡
char firstPass[50][50]={
" ###",//位置算法第一位为0,0
" #*#",//
" # #",
"#######O######",
"#* OH O*#",
"#######O ####",
" # #",
" #*#",
" ###"
};
char secondPass[50][50]={
" ###",
" #*#",
" # #",
"#######O######",
"#* OS O*#",
"######### ####",
" # #",
" # O*#",
" #####"
};
int x,y,i,j,k,l;
int septNuamber=0;//步数统计
int passNumber=0;//关卡数统计
int box=0;//统计箱子完成数量
char key;//存储按键输入键值
void keyboard()//按键检测函数
{
if(key=='W'||key=='w')//向上//1用或是为了兼容大小写字母
{
if(gamePass[x-1][y]=='O')//判断前一位是不是O,是的话进去
{
if(gamePass[x-2][y]=='*')//判断前两位是不是*是的话
{
gamePass[x-2][y]='@';//把它变成@号。犯错,赋值是单个=号不是双==号,没注意看
box++;
}
else
{
gamePass[x-2][y]='O';//不是的话就把它变成字母O
}
}
if(gamePass[x-1][y]!='#' && gamePass[x-1][y]!='@' && gamePass[x-1][y]!='*')//如果前进方向第一位不是#,@和*都可以前挪一位
{
gamePass[x][y]=' ';
x--;
gamePass[x][y]='H';
}
}
if(key=='S'||key=='s')//向下
{
if(gamePass[x+1][y]=='O')
{
if(gamePass[x+2][y]=='*')
{
gamePass[x+2][y]='@';
box++;
}
else
{
gamePass[x+2][y]='O';
}
}
if(gamePass[x+1][y]!='#' && gamePass[x+1][y]!='@' && gamePass[x+1][y]!='*')
{
gamePass[x][y]=' ';
x++;
gamePass[x][y]='H';
}
}
if(key=='A'||key=='a')//向左
{
if(gamePass[x][y-1]=='O')
{
if(gamePass[x][y-2]=='*')
{
gamePass[x][y-2]='@';
box++;
}
else
{
gamePass[x][y-2]='O';
}
}
if(gamePass[x][y-1]!='#' && gamePass[x][y-1]!='@' && gamePass[x][y-1]!='*')
{
gamePass[x][y]=' ';
y--;
gamePass[x][y]='H';
}
}
if(key=='D'||key=='d')//向右
{
if(gamePass[x][y+1]=='O')
{
if(gamePass[x][y+2]=='*')
{
gamePass[x][y+2]='@';
box++;
}
else
{
gamePass[x][y+2]='O';
}
}
if(gamePass[x][y+1]!='#' && gamePass[x][y+1]!='@' && gamePass[x][y+1]!='*')
{
gamePass[x][y]=' ';
y++;
gamePass[x][y]='H';
}
}
};
void yemian()//页面函数//试着用swtich写判断
{
for(i=0;i<=9;i++)//后续要用变量来替换9实现随着关卡变化而变化,减低内存占用
puts(gamePass[i]);//此处犯错,没思考i就是数组的行,写成[i][y]
}
int main()
{
for(i=0;i<=9;i++)
{
//此处是按网上教程试着写,但是报错编译出错 gamePass[i]=firstPass[i];//
}
x=4; y=7;//初始化H位置//试着将坐标即关卡信息存在其中,并读取出来
yemian();//页面刷新函数
while(1)
{
key=getch();
keyboard();
system("cls");
yemian();
printf("当前关卡箱子已到位%d个\n",box);
}
return 0;
}