写的一个推箱子的小游戏,只有一关,可以设计为多关卡,各位让我看看你们能写多少关
#include<stdio.h>#include <stdlib.h>
#include <conio.h>
void keydown();
void draw();
int yanzheng();
int a={
{1,1,1,1,1,1,1,1},
{1,1,0,0,0,0,1,1},
{1,1,0,1,0,0,1,1},
{1,0,0,1,1,0,1,1},
{1,0,4,4,3,3,0,1},
{1,0,0,0,1,1,0,1},
{1,1,5,0,1,0,0,1},
{1,1,1,1,1,1,1,1}
};
//打印一个8行8列的map
void draw()
{
//0:空的 1:▆ 3:☆ 4:★ 5:※ 7:⊙ 8:※
int i,j;
for(i=0;i<8;i++)
{
for(j=0;j<8;j++)
{
switch(a)
{
case 1:
printf("▆"); //表示墙壁
break;
case 0:
printf(""); //表示空地
break;
case 3:
printf("☆"); //表示目的地
break;
case 4:
printf("★"); //表示箱子
break;
case 5:
printf("※"); //表示人
break;
case 7:
printf("⊙"); //表示箱子在目的地
break;
case 8:
printf("※"); //表示人站在目的地上
break;
}
}
printf("\n");
}
}
//键盘输入与游戏逻辑
void keydown()
{
int i,j;
char c=_getch(); //看不家的字符输入,要加头文件coni0.h
for(i=0;i<8;i++)
{
for(j=0;j<8;j++)
{
if(a==5||a==8)
{
break;
}
}
if(a==5||a==8)
{
break;
}
} //找到人的位置
switch(c)
{
case 'w':
case 'W':
case 72:
{
if(a==0||a==3) //判断前方是不是空地或者目的地
{
a+=5; //把上一个赋值加上5,表示人或者人站在目的地的上
a-=5; //把原来的赋值减5,表示空地或者目的地
}
else if(a==4||a==7) //判断前方是不是箱子或者箱子在目的地上
{
if(a==0||a==3) //在原来的判断上判断前方的前方是不是空地或者目的地
{
a+=4; //把前方的前方的赋值加4,表示箱子或者箱子在目的地上
a+=1; //把前方的赋值加1,表示表示人或者人站在目的地的上
a-=5; //把原来位置的赋值减5,表示空地或者目的地
}
}
}
break; //前进变换
case 's':
case 'S':
case 80:
{
if(a==0||a==3) //判断前方是不是空地或者目的地
{
a+=5; //把上一个赋值加上5,表示人或者人站在目的地的上
a-=5; //把原来的赋值减5,表示空地或者目的地
}
else if(a==4||a==7) //判断前方是不是箱子或者箱子在目的地上
{
if(a==0||a==3) //在原来的判断上判断前方的前方是不是空地或者目的地
{
a+=4; //把前方的前方的赋值加4,表示箱子或者箱子在目的地上
a+=1; //把前方的赋值加1,表示表示人或者人站在目的地的上
a-=5; //把原来位置的赋值减5,表示空地或者目的地
}
}
}
break; //后退变换
case 'a':
case 'A':
case 75:
{
if(a==0||a==3) //判断前方是不是空地或者目的地
{
a+=5; //把上一个赋值加上5,表示人或者人站在目的地的上
a-=5; //把原来的赋值减5,表示空地或者目的地
}
else if(a==4||a==7) //判断前方是不是箱子或者箱子在目的地上
{
if(a==0||a==3) //在原来的判断上判断前方的前方是不是空地或者目的地
{
a+=4; //把前方的前方的赋值加4,表示箱子或者箱子在目的地上
a+=1; //把前方的赋值加1,表示表示人或者人站在目的地的上
a-=5; //把原来位置的赋值减5,表示空地或者目的地
}
}
}
break; //向左变换
case 'd':
case 'D':
case 77:
{
if(a==0||a==3) //判断前方是不是空地或者目的地
{
a+=5; //把上一个赋值加上5,表示人或者人站在目的地的上
a-=5; //把原来的赋值减5,表示空地或者目的地
}
else if(a==4||a==7) //判断前方是不是箱子或者箱子在目的地上
{
if(a==0||a==3) //在原来的判断上判断前方的前方是不是空地或者目的地
{
a+=4; //把前方的前方的赋值加4,表示箱子或者箱子在目的地上
a+=1; //把前方的赋值加1,表示表示人或者人站在目的地的上
a-=5; //把原来位置的赋值减5,表示空地或者目的地
}
}
}
break; //向右变换
}
}
//验证是否已经结束游戏
int yanzheng()
{
int i,j;
int count=0;
for(i=0;i<8;i++)
{
for(j=0;j<8;j++)
{
if(a==7)
{
count+=1;
}
}
}
return count;
}
int main()
{
int c;
while(1)
{
draw();
c=yanzheng();
if(c==2)
{
printf("game over\n");
break;
}
keydown();
system("cls");
}
system("pause");
return 0;
}
页:
[1]