完整版本的推箱子小游戏,最简单的纯C语言打造

时间:2021-12-31 22:21:47
/*
推箱子小游戏
1.定义绘制样式
用二维数组的方式
2.绘制图像
3.找出当前位置
4.逻辑判断,制造动作
根据数学xy轴的规律,这里使用ij
上移,行轴上升,行数减少
下移,行数下降,函数增加
左移,列数向左,列数减少
右移,列数向右,列数增加
*/
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#define ROWS 8 //行数
#define COLS 9 //列数 int i = ; //行轴
int j = ; //列轴 //定义绘制样式
/*
0 代表 空地
1 代表 墙壁
3 代表 目的地
4 代表 箱子
5 代表 推箱子的人
7 代表 目的地上的箱子
8 代表 目的地上的人
*/
int cMap[ROWS][COLS] = {
{ , , , , , , , , },
{ , , , , , , , , },
{ , , , , , , , , },
{ , , , , , , , , },
{ , , , , , , , , },
{ , , , , , , , , },
{ , , , , , , , , },
{ , , , , , , , , }
}; //绘制图像
int GreatMap()
{ for (int i = ; i < ROWS;i++)
{
for (int j = ; j < COLS; j++)
{
switch (cMap[i][j])
{
case :
printf(" ");
break;
case :
printf("■");
break;
case :
printf("△");
break;
case :
printf("◎");
break;
case :
printf("♀");
break;
case :
printf("●");
break;
case :
printf("♀");
break;
default:
break;
}
}
printf("\n");
} return ;
} //找出人的当前位置
int FindManIndex()
{
for (i = ; i < ROWS;i++)
{
for (j = ; j < COLS;j++)
{
if (cMap[i][j] == || cMap[i][j] == )
break;
}
if (cMap[i][j] == || cMap[i][j] == )
break;
}
printf("人的坐标:[%d,%d]",j,i); return ;
} //制造动作
int CreateActions()
{
char cAction = _getch(); //输入字符不用回车
switch (cAction)
{
case 'W':
case 'w':
//----------------------------------上移
//如果上方是空地或者目的地
if (cMap[i - ][j] == || cMap[i - ][j] == )
{
cMap[i - ][j] += ;
cMap[i][j] -= ;
}
//如果上方是箱子或者目的地上的箱子,同时更上方是空地或者目的地
if ((cMap[i - ][j] == || cMap[i - ][j] == ) &&
(cMap[i - ][j] == || cMap[i - ][j] == ))
{
cMap[i - ][j] += ; cMap[i - ][j] += ;
cMap[i][j] -= ;
} break;
case 'A':
case 'a':
//----------------------------------左移
//如果左方是空地或者目的地
if (cMap[i][j-] == || cMap[i][j-] == )
{
cMap[i][j-] += ;
cMap[i][j] -= ;
}
//如果左方是箱子或者目的地上的箱子,同时更左方是空地或者目的地
if ((cMap[i][j-] == || cMap[i ][j-] == ) &&
(cMap[i][j-] == || cMap[i ][j-] == ))
{
cMap[i][j-] += ;
cMap[i][j-] += ;
cMap[i][j] -= ;
}
break;
case 'S':
case 's':
//----------------------------------下移
//如果下方是空地或者目的地
if (cMap[i + ][j] == || cMap[i + ][j] == )
{
cMap[i + ][j] += ;
cMap[i][j] -= ;
}
//如果下方是箱子或者目的地上的箱子,同时更下方是空地或者目的地
if ((cMap[i + ][j] == || cMap[i + ][j] == ) &&
(cMap[i + ][j] == || cMap[i + ][j] == ))
{
cMap[i + ][j] += ;
cMap[i + ][j] += ;
cMap[i][j] -= ;
}
break;
case 'D':
case 'd':
//----------------------------------右移
//如果右方是空地或者目的地
if (cMap[i][j + ] == || cMap[i][j + ] == )
{
cMap[i][j + ] += ;
cMap[i][j] -= ;
}
//如果右方是箱子或者目的地上的箱子,同时更右方是空地或者目的地
if ((cMap[i][j + ] == || cMap[i][j + ] == ) &&
(cMap[i][j + ] == || cMap[i][j + ] == ))
{
cMap[i][j + ] += ;
cMap[i][j + ] += ;
cMap[i][j] -=;
}
break;
}
return ;
} int main()
{ while ()
{
GreatMap();
FindManIndex(); CreateActions();
system("cls");
} system("pause");
return ;
}