C语言实现推箱子
电脑 Mac, 代码编辑器VSCode
参考的是https://blog.csdn.net/ZackSock/article/details/101645494
参考的代码是在window电脑上编译的.
1、二维数组和平面直角坐标系的对应.
2、scanf函数的输入的时候.终端io的缓冲区的问题.
//DIY推箱子小游戏
#include <stdio.h>
// #include <stdlib.h>
// #include <curses.h>
// #include <conio.h>
//宏定义
#define WIDTH 8
#define HEIGHTH 8
//定义地图数组,二维数组有两个维度,地图是二维的矩形;
/**
* 0 表示空
* 1 表示墙
* 2 表示人
* 3 表示箱子
* 4 表示目的地
* 5 表示已经完成的箱子
*/
int map[WIDTH][HEIGHTH] = {
{
0, 0, 1, 1, 1, 0, 0, 0},
{
0, 0, 1, 4, 1, 0, 0, 0},
{
0, 0, 1, 0, 1, 1, 1, 1},
{
1, 1, 1, 3, 0, 3, 4, 1},
{
1, 4, 0, 3, 2, 1, 1, 1},
{
1, 1, 1, 1, 3, 1, 0, 0},
{
0, 0, 0, 1, 4, 1, 0, 0},
{
0, 0, 0, 1, 1, 1, 0, 0}
};
//人的位置;
int x = 0;
int y = 0;
//箱子的个数(没有推进去的)
int boxs = 0;
//初始化数据;
void initDate()
{
printf("游戏加载中....\n");
//遍历地图中的数据.
for (int i = 0; i < WIDTH; i++) {
for (int j = 0; j < HEIGHTH; j++) {
//遍历到人的时候.
if (map[i][j] == 2) {
//注意二维数组和数学中矩阵的对应.
x = i; //j -- 高度
y = j; //i -- 宽度
}
//未完成的箱子的数目
if (map[i][j] == 3) {
boxs++;
}
}
}
printf("boxs = %d, x = %d, y = %d\n", boxs, x, y);
}
//绘制地图;
void drawMap()
{
printf("开始绘制地图...\n");
for (int i = 0; i < WIDTH; i++) {
for (int j = 0; j <