C语言实现贪吃蛇游戏简单的C语言实现贪吃蛇游戏的代码,并附上了相关的解释说明:#include #include #include #include #include #define WIDTH 20#define HEIGHT 20#define UP 1#define DOWN -1#define LEFT 2#define RIGHT -2typedef struct Snake { int row; int col; struct Snake *next;} Snake;typedef struct Food { int row; int col;} Food;Snake *snake_head = NULL;Snake *snake_tail = NULL;Food food;int dir = RIGHT;int key;void gotoxy(int x, int y) { COORD coord; coord.X = x; coord.Y = y; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);}void init_game() { snake_head = (Snake*)malloc(sizeof(Snake)); snake_head->row = HEIGHT / 2; snake_head->col = WIDTH / 2; snake_head->next = NULL; snake_tail = snake_head; // 初始化食物位置 srand(time(NULL)); food.row = rand() % HEIGHT; food.col = rand() % WIDTH;}void draw_map() { system("cls"); for (int i = 0; i < HEIGHT; i++) { for (int j = 0; j < WIDTH; j++) { if (i == 0 || i == HEIGHT - 1 || j == 0 || j == WIDTH - 1) { printf("#"); // 打印边界 } else if (i == food.row && j == food.col) { printf("O"); // 打印食物 } else { Snake *temp = snake_head; while (temp != NULL) { if (temp->row == i && temp->col == j) { printf("Q"); // 打印蛇身 break; } temp = temp->next; } if (temp == NULL) { printf(" "); // 打印空格 } } } printf("\n"); }}void move_snake() { Snake *new_head = (Snake*)malloc(sizeof(Snake)); new_head->row = snake_head->row + (dir == UP ? -1 : (dir == DOWN ? 1 : 0)); new_head->col = snake_head->col + (dir == LEFT ? -1 : (dir == RIGHT ? 1 : 0)); new_head->next = snake_head; snake_head = new_head; // 检查蛇是否吃到食物 if (snake_head->row == food.row && snake_head->col == food.col) { // 重新生成食物位置 srand(time(NULL)); food.row = rand() % HEIGHT; food.col = rand() % WIDTH; } else { // 移除蛇尾 Snake *temp = snake_head; while (temp->next->next != NULL) { temp = temp->next; } free(temp->next); temp->next = NULL; snake_tail = temp; }}void check_game_over() { if (snake_head->row == 0 || snake_head->row == HEIGHT - 1 || snake_head->col == 0 || snake_head->col == WIDTH - 1) { // 撞墙游戏结束 printf("Game Over! You hit the wall.\n"); exit(0); } Snake *temp = snake_head->next; while (temp != NULL) { if (temp->row == snake_head->row && temp->col == snake_head->col) { // 咬到自己游戏结束 printf("Game Over! You bit yourself.\n"); exit(0); } temp = temp->next; }}void handle_input() { if (_kbhit()) { key = _getch(); switch (key) { case 'w': dir = UP; break; case 's': dir = DOWN; break; case 'a': dir = LEFT; break; case 'd': dir = RIGHT; break; } }}int main() { init_game(); while (1) { draw_map(); handle_input(); move_snake(); check_game_over(); Sleep(100); // 控制游戏速度 } return 0;}代码解释:头文件:引入了必要的头文件,如stdio.h、stdlib.h、conio.h、windows.h和time.h。
定义和结构体:· 定义了地图的宽度和高度· 定义了蛇的移动方向(上、下、左、右)· 定义了Snake和Food结构体,用于表示蛇和食物的位置全局变量:.· snake_head和snake_tail分别指向蛇的头和尾· food表示食物的位置· dir表示蛇的移动方向· key用于存储用户的输入函数:.· gotoxy:将光标移动到指定位置· init_game:初始化游戏,包括蛇的位置和食物的位置· draw_map:绘制地图,包括边界、食物和蛇· move_snake:移动蛇,并检查是否吃到食物如果吃到食物,则重新生成食物位置;否则,移除蛇尾· check_game_over:检查游戏是否结束,包括撞墙和咬到自己· handle_input:处理用户的输入,改变蛇的移动方向· main:游戏的主函数,循环调用绘制地图、处理输入、移动蛇和检查游戏结束的函数这段代码实现了一个简单的贪吃蛇游戏,你可以在控制台中运行它,并使用w、a、s、d键来控制蛇的移动方向。