用c语言写一个功能稍微完整的推箱子游戏〈急〉

要求用到esay x图形化界面
要有一个用户注册和登录界面,用户数据储存在某个文件里面,这里面还要储存每个账号通关所用的步数
要有多关卡,并且界面旁边实时输出所用的步数
还要能重新开始当前关卡

我自己在写到上述功能的时候总是不行,希望各位有能力帮帮忙
实在不行也可以不用easyx只希望能!尽快!给出代码Ծ‸Ծ

C语言实现推箱子小游戏

挺详细得,可以借鉴下
https://blog.csdn.net/2301_77089353/article/details/129677129

我直接发你文件

非常感谢您提供的错误信息!我可以尝试给您提供一些指导来帮助您解决这个问题。

首先,您需要确保您已经在 xivz 目录下创建了 xviz 环境。如果您没有创建该环境,您需要使用 sudo yarn init 命令来初始化该环境。

然后,您需要确保您已经安装了 Node.js。您可以通过运行 sudo npm install -g node 命令来安装 Node.js。

接下来,您需要确保已经安装了 yarn。您可以通过运行 sudo yarn init 命令来初始化 yarn

一旦您完成上述步骤,您应该能够使用 sudo yarn upgradesudo yarn Bootstrap 命令来升级和初始化 xviz 环境。

接下来,您可以尝试使用 yarn 命令来构建您的推箱子游戏。您可以使用 yarn start 命令来启动您的游戏,或者使用 yarn build 命令来构建您的游戏,其中 --build 参数指定要构建的目录。

最后,如果您仍然遇到相同的错误,请检查您是否正确安装了 Node.js 和 yarn。您可以尝试使用 npm list 命令来查看您当前安装的所有npm包,并使用 npm install 命令来安装需要的依赖。

希望这些指导能够帮助您解决问题!

#include <graphics.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <ctype.h>
#include <string.h>

#define UP    0
#define DOWN  1
#define LEFT  2
#define RIGHT 3

#define MAX_LEVEL 5

#define WIDTH        700
#define HEIGHT        600
#define W        60
#define H        60

#define PIC_W        60
#define PIC_H        60

#define WALL        '#'
#define GOAL        '.'
#define BOX        '$'
#define MAN        '@'
#define SPACE        ' '

// 定义地图结构体
struct Map {
  char **data;
  int rows;
  int cols;
};

// 定义游戏状态结构体
struct GameState {
  struct Map map; // 当前地图
  int level;      // 当前关卡
  int move_count; // 移动次数
  int push_count; // 推箱子次数
  int undo_count; // 操作撤销次数
  int *history;   // 操作历史
};

// 加载地图文件
struct Map load_map(const char *filename);

// 绘制地图
void draw_map(const struct Map *map, int x, int y);

// 处理移动
int do_move(struct GameState *game, int direction);

// 判断是否通关
int check_win(const struct Map *map);

// 操作撤销
int undo(struct GameState *game);

// 游戏主循环
void game_loop(struct GameState *game);

int main() {
  initwindow(WIDTH, HEIGHT, "Push Box Game - EasyX");

  struct GameState game;
  game.level = 1;
  game.move_count = 0;
  game.push_count = 0;
  game.undo_count = 0;
  game.history = NULL;
  game.map = load_map("maps/level1.txt");

  game_loop(&game);

  return 0;
}

// 加载地图文件
struct Map load_map(const char *filename) {
  struct Map map;

  FILE *fp = fopen(filename, "r");

  // 读取行数和列数
  fscanf(fp, "%d %d", &map.rows, &map.cols);

  // 分配空间
  map.data = (char **)malloc(sizeof(char *) * map.rows);
  for (int i = 0; i < map.rows; i++) {
    map.data[i] = (char *)malloc(sizeof(char) * map.cols);
  }

  // 读取地图数据
  for (int i = 0; i < map.rows; i++) {
    for (int j = 0; j < map.cols; j++) {
      char c = fgetc(fp);
      if (c == '\n') {
        c = fgetc(fp);
      }

      map.data[i][j] = c;
    }
  }

  fclose(fp);

  return map;
}

// 绘制地图
void draw_map(const struct Map *map, int x, int y) {
  setbkcolor(COLOR(200, 200, 200));
  cleardevice();

  for (int i = 0; i < map->rows; i++) {
    for (int j = 0; j < map->cols; j++) {
      int x1 = j * W;
      int y1 = i * H;

      switch (map->data[i][j]) {
        case WALL:
          setfillcolor(COLOR(100, 100, 100));
          solidrectangle(x + x1, y + y1, x + x1 + PIC_W, y + y1 + PIC_H);
          break;

        case GOAL:
          setfillcolor(COLOR(0, 200, 0));
          solidrectangle(x + x1, y + y1, x + x1 + PIC_W, y + y1 + PIC_H);
          break;

        case BOX:
          setfillcolor(COLOR(200, 200, 0));
          solidrectangle(x + x1, y + y1, x + x1 + PIC_W, y + y1 + PIC_H);
          break;

        case MAN:
          setfillcolor(COLOR(200, 0, 0));
          solidrectangle(x + x1, y + y1, x + x1 + PIC_W, y + y1 + PIC_H);
          break;

        case SPACE:
        default:
          break;
      }
    }
  }

  flushbatch();
}

// 判断是否可以移动
int can_move(struct Map *map, int x, int y, int dx, int dy) {
  if (dx > 0 && x + dx >= map->cols) {
    return 0;
  }

  if (dx < 0 && x + dx < 0) {
    return 0;
  }

  if (dy > 0 && y + dy >= map->rows) {
    return 0;
  }

  if (dy < 0 && y + dy < 0) {
    return 0;
  }

  if (map->data[y + dy][x + dx] == WALL) {
    return 0;
  }

  if (map->data[y + dy][x + dx] == BOX) {
    if (!can_move(map, x + dx, y + dy, dx, dy)) {
      return 0;
    }
  }

  return 1