最近比较无聊所以做了一个简单的推箱子游戏
直接上源码了e QAQ
#include<stdio.h>//预处理命令标准的输入输出函数库
#include<conio.h>//键盘输入函数库
#include<stdlib.h>//系统标准输出函数
//0:空地 1:墙 2:箱子要放的位置 5:人与星号重叠6:箱子与星号重叠 3:人+-3 4:箱子:+-4
int map[7][7] = {0,0,1,1,1,1,0,
1,1,1,0,0,1,0,
1,3,0,2,4,1,1,
1,0,0,0,4,0,1,
1,0,1,2,0,0,1,
1,0,0,0,0,0,1,
1,1,1,1,1,1,1
};
void PrintMap()
{
int i, j;
for (i = 0; i < 7; i++)
{
for (j = 0; j < 7; j++)
{
switch (map[i][j])
{
//0:空地 1:墙 2:箱子要放的位置 5:人与星号重叠6:箱子与星号重叠 3:人+-3 4:箱子:+-4
case 0: printf(" "); break;
case 1: printf("■"); break;
case 2: printf("☆"); break;
case 3: printf("♀"); break;
case 4: printf("□"); break;
case 5: printf("♀"); break;
case 6: printf("★"); break;
default:
break;
}
}
printf("\n");
}
}
//0:空地 1:墙 2:箱子要放的位置 5:人与星号重叠6:箱子与星号重叠 3:人+-3 4:箱子:+-4
void PlayGame()
{
int i, j;
int x, y;//(x,y)人的坐标
//获取人的坐标
for(i=0;i<7;i++)
for(j=0;j<7;j++)
if (map[i][j] == 3||map[i][j]==5)
{
x = i;
y = j;
}
char ch;
ch = _getch();//无显示输入
//switch:用于判别不同键的输入
switch (ch)
{
case 'R':
case 'r':break;
case 's':
case 'S':
if (map[x + 1][y] == 0||map[x+1][y]==2)//下一个去的地方为空地或为箱子待放地
{
map[x + 1][y] +=3; //下一个去的位置变为人
map[x][y] -= 3;//清除当前位置
}
else if (map[x + 1][y] == 4||map[x+1][y]==6)//下一个去的地方放着箱子
{
if (map[x + 2][y] == 0 || map[x+2][y] == 2)//下一个位置为空地或者为箱子时
{
map[x + 2][y] += 4;
map[x + 1][y] = map[x + 1][y] - 4 + 3;
if(map[x][y]==5)
map[x][y] -= 3;//清除当前位置
else if (map[x][y] == 3)
map[x][y] -= 3;
}
}
else;
break;
case 'w':
case 'W':
if (map[x - 1][y] == 0 || map[x - 1][y] == 2)//下一个去的地方为空地或为箱子待放地
{
map[x - 1][y] += 3; //下一个去的位置变为人
map[x][y] -= 3;
}
else if (map[x - 1][y] == 4 || map[x - 1][y] == 6)//下一个去的地方放着箱子
{
if (map[x - 2][y] == 0 || map[x-2][y] == 2)//下一个位置为空地或者为箱子时
{
map[x - 2][y] += 4;
map[x - 1][y] = map[x - 1][y] - 4 + 3;
if (map[x][y] == 5)
map[x][y] -= 3;//清除当前位置
else if (map[x][y] == 3)
map[x][y] -= 3;
}
}
else;
break;
case 'd':
case 'D':
if (map[x][y+1] == 0 || map[x][y+1] == 2)//下一个去的地方为空地或为箱子待放地
{
map[x][y+1] += 3; //下一个去的位置变为人
map[x][y] -= 3;
}
else if (map[x][y+1] == 4 || map[x ][y+1] == 6)//下一个去的地方放着箱子
{
if (map[x ][y+2] == 0 || map[x][y+2] == 2)//下一个位置为空地或者为箱子时
{
map[x ][y+2] += 4;
map[x ][y+1] = map[x ][y+1] - 4 + 3;
if (map[x][y] == 5)
map[x][y] -= 3;//清除当前位置
else if (map[x][y] == 3)
map[x][y] -= 3;
}
}
else;
break;
case 'a':
case 'A':
if (map[x][y - 1] == 0 || map[x][y - 1] == 2)//下一个去的地方为空地或为箱子待放地
{
map[x][y - 1] += 3; //下一个去的位置变为人
map[x][y] -= 3;
}
if (map[x][y - 1] == 4 || map[x][y - 1] == 6)//下一个去的地方放着箱子
{
if (map[x][y - 2] == 0 || map[x][y-2] == 2)//下一个位置为空地或者为箱子时
{
map[x][y - 2] += 4;
map[x][y - 1] = map[x][y - 1] - 4 + 3;
if (map[x][y] == 5)
map[x][y] -= 3;//清除当前位置
else if (map[x][y] == 3)
map[x][y] -= 3;
}
}
else
break;
default:
break;
}
}
int main()
{
while (1) {
PrintMap();
PlayGame();
system("cls");
}
return 0;
}
运行效果:
自我感觉还是不错的。。。以后说不定会给他加上图形界面什么的。。。哈哈哈哈哈。