最近迷上了推箱子这个游戏,所以兴起写了一下它的代码,仅以此抛砖引玉,如有不足请多指正。
#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
int main()
{
int i,j,k,p,q;
char ch;
k=0;
p=4;
q=7;
char a[50][50]={
" ###",
" # #",
" # #",
"######@######",
"# @ &@ #",
"#######@#####",
" # # ",
" ###",
};
for(i=0;i<8;i++)//打印输出游戏框图
puts(a[i]);
ch=getch();
while(ch=='s'||ch=='w'||ch=='a'||ch=='d'||ch=='S'||ch=='W'||ch=='A'||ch=='D'||ch=='t')
{
if(ch=='s'||ch=='S')
{
if(a[p+2][q]!='#')//判断是否遇到墙
{
if(a[p+1][q]=='@')//判断是否与箱子挨着
{
a[p][q]=' ';
a[p+2][q]='@';
a[p+1][q]='&';
p+=1;
system("cls");
for(i=0;i<8;i++)
puts(a[i]);
ch=getch();
}
}
if(a[p+1][q]==' ')//退回时判断是否有路可退
{
a[p][q]=' ';
a[p+1][q]='&';
p+=1;
system("cls");
for(i=0;i<8;i++)
puts(a[i]);
ch=getch();
}
}
if(ch=='w'||ch=='W')
{
if(a[p-2][q]!='#')//判断是否遇到墙
{
if(a[p-1][q]=='@')//判断是否与箱子挨着
{
a[p][q]=' ';
a[p-2][q]='@';
a[p-1][q]='&';
p-=1;
system("cls");
for(i=0;i<8;i++)
puts(a[i]);
ch=getch();
}
}
if(a[p-1][q]==' ')//退回时判断是否有路可退
{
a[p][q]=' ';
a[p-1][q]='&';
p-=1;
system("cls");
for(i=0;i<8;i++)
puts(a[i]);
ch=getch();
}
}
if(ch=='a'||ch=='A')
{
if(a[p][q-2]!='#')//判断是否遇到墙
{
if(a[p][q-1]=='@')//判断是否与箱子挨着
{
a[p][q]=' ';
a[p][q-2]='@';
a[p][q-1]='&';
q-=1;
system("cls");
for(i=0;i<8;i++)
puts(a[i]);
ch=getch();
}
}
if(a[p][q-1]==' ')//退回时判断是否有路可退
{
a[p][q]=' ';
a[p][q-1]='&';
q-=1;
system("cls");
for(i=0;i<8;i++)
puts(a[i]);
ch=getch();
}
}
if(ch=='D'||ch=='d')
{
if(a[p][q+2]!='#')//判断是否遇到墙
{
if(a[p][q+1]=='@')//判断是否与箱子挨着
{
a[p][q]=' ';
a[p][q+2]='@';
a[p][q+1]='&';
q+=1;
system("cls");
for(i=0;i<8;i++)
puts(a[i]);
ch=getch();
}
}
if(a[p][q+1]==' ')//退回时判断是否有路可退
{
a[p][q]=' ';
a[p][q+1]='&';
q+=1;
system("cls");
for(i=0;i<8;i++)
puts(a[i]);
ch=getch();
}
}
if(ch=='t')
break;
}
system("cls");
for(i=0;i<8;i++)
puts(a[i]);
printf("游戏结束");
return 0;
}