推箱子c语言代码

时间:2025-02-13 23:58:00 单机游戏

```c

include

include

define ROW 5

define COL 5

char map[ROW][COL] = {

{'', '', '', '', ''},

{'', 'S', '.', '.', ''},

{'', '.', '', '.', ''},

{'', '.', '.', 'T', ''},

{'', '', '', '', ''}

};

void printMap() {

int i, j;

for (i = 0; i < ROW; i++) {

for (j = 0; j < COL; j++) {

printf("%c ", map[i][j]);

}

printf("\n");

}

printf("\n");

}

void move(int x, int y, int x2, int y2) {

map[x2][y2] = map[x][y];

map[x][y] = '.';

}

int main() {

int x, y, x2, y2;

printMap();

while (1) {

printf("请输入要移动的方向(W/A/S/D):");

char c = getchar();

getchar(); // Consume newline

switch (c) {

case 'w':

x = x - 1;

y = y;

break;

case 'a':

x = x;

y = y - 1;

break;

case 's':

x = x;

y = y + 1;

break;

case 'd':

x = x + 1;

y = y;

break;

default:

continue;

}

if (map[x][y] == 'T') {

printf("恭喜你,成功!\n");

break;

}

if (map[x][y] == '.' || map[x][y] == 'X') {

x2 = x;

y2 = y + 1;

if (map[x2][y2] == 'X' || map[x2][y2] == 'T') {

move(x, y, x2, y2);

} else if (map[x2][y2] == '.') {

move(x, y, x2, y2);

x2 = x;

y2 = y + 1;

if (map[x2][y2] == 'X' || map[x2][y2] == 'T') {

move(x, y, x2, y2);

}

}

}

printMap();

}

return 0;

}

```

代码说明:

地图定义:

使用二维字符数组`map`来表示游戏地图,其中`'.'`表示空地,`'S'`表示玩家,`'X'`表示箱子,`'T'`表示目标。

打印地图:

`printMap`函数用于打印当前地图状态。

移动函数:

`move`函数用于移动玩家或箱子,并更新地图。

主循环:

在`main`函数中,通过一个无限循环来处理用户输入,并根据输入更新玩家位置和箱子位置。如果玩家移动到目标位置,则输出恭喜信息并退出循环。

注意事项:

该代码假设地图大小为5x5,玩家初始位置在`(1, 1)`,目标位置在`(3, 4)`。

玩家只能上下左右移动,并且只能推动箱子到目标位置。

如果玩家或箱子移动到墙壁或已经走过的位置,则不会移动。

你可以根据需要修改地图大小、玩家初始位置和目标位置,以适应不同的游戏需求。