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