由于代码较长,只能放部分代码,完整代码可以在我的GitHub上查看。

#include <stdio.h> #include <stdlib.h> #include <conio.h> #include <windows.h>

/* 定义地图大小 */ #define ROW 20 #define COL 40

/* 定义方向 */ #define UP 'w' #define DOWN 's' #define LEFT 'a' #define RIGHT 'd'

/* 定义蛇的身体 */ typedef struct Snake { int row; int col; struct Snake *next; } Snake;

/* 定义食物 */ typedef struct Food { int row; int col; } Food;

/* 定义全局变量 */ Snake *head = NULL; // 蛇头 Food food; // 食物 int speed = 200; // 游戏速度

/* 初始化地图 */ void initMap(char map[ROW][COL]) { int i, j; for (i = 0; i < ROW; i++) { for (j = 0; j < COL; j++) { if (i == 0 || i == ROW - 1 || j == 0 || j == COL - 1) { map[i][j] = '#'; } else { map[i][j] = ' '; } } } }

/* 画地图 */ void drawMap(char map[ROW][COL]) { int i, j; system("cls"); for (i = 0; i < ROW; i++) { for (j = 0; j < COL; j++) { printf("%c", map[i][j]); } printf("\n"); } }

/* 创建蛇 */ void createSnake() { int i; Snake *tail = NULL; for (i = 0; i < 3; i++) { Snake *node = (Snake *)malloc(sizeof(Snake)); node->row = 10; node->col = 20 - i; node->next = NULL; if (head == NULL) { head = node; } else { tail->next = node; } tail = node; } }

/* 画蛇 */ void drawSnake(char map[ROW][COL]) { Snake node = head; while (node != NULL) { map[node->row][node->col] = ''; node = node->next; } }

/* 移动蛇 / void moveSnake(char map[ROW][COL], char direction) { int flag = 0; // 判断是否吃到食物 int row = head->row; int col = head->col; switch (direction) { case UP: row--; break; case DOWN: row++; break; case LEFT: col--; break; case RIGHT: col++; break; } / 判断是否撞墙 / if (map[row][col] == '#' || map[row][col] == '') { printf("Game over!\n"); exit(0); } /* 判断是否吃到食物 / if (row == food.row && col == food.col) { flag = 1; } / 添加新的蛇头 */ Snake *node = (Snake )malloc(sizeof(Snake)); node->row = row; node->col = col; node->next = head; head = node; / 如果没有吃到食物,删除蛇尾 / if (!flag) { node = head; while (node->next->next != NULL) { node = node->next; } free(node->next); node->next = NULL; } else { / 如果吃到食物,重新生成食物 */ createFood(map); } }

/* 创建食物 / void createFood(char map[ROW][COL]) { int row, col; do { / 随机生成食物的位置 / row = rand() % (ROW - 2) + 1; col = rand() % (COL - 2) + 1; } while (map[row][col] == ''); food.row = row; food.col = col; }

/* 画食物 */ void drawFood(char map[ROW][COL]) { map[food.row][food.col] = '@'; }

/* 控制游戏速度 */ void controlSpeed() { int ch; if (_kbhit()) { ch = _getch(); if (ch == '+') { speed -= 10; } else if (ch == '-') { speed += 10; } } if (speed < 50) { speed = 50; } if (speed > 500) { speed = 500; } }

/* 主函数 / int main() { char map[ROW][COL]; // 地图 char direction = RIGHT; // 初始方向 initMap(map); // 初始化地图 createSnake(); // 创建蛇 createFood(map); // 创建食物 while (1) { drawMap(map); // 画地图 drawSnake(map); // 画蛇 drawFood(map); // 画食物 moveSnake(map, direction); // 移动蛇 controlSpeed(); // 控制游戏速度 Sleep(speed); // 等待一段时间 / 判断是否按下方向键 */ if (_kbhit()) { char ch = _getch(); if (ch == UP || ch == DOWN || ch == LEFT || ch == RIGHT) { direction = ch; } } } return 0; }

C语言编写一个贪吃蛇代码

原文地址: https://www.cveoy.top/t/topic/bjpU 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录