实现贪吃蛇+双向链表+详细注释
代码如下:
main.c
#include "snake.h"
int main()
{
initSnake();
initMap();
HideCursor();
gameRun();
return 0;
}
snake.h
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
#include <conio.h>
#define N 30
#define TRUE 1
#define FALSE 0
#define TIME 200
#define LEFT 37
#define UP 38
#define RIGHT 39
#define DOWN 40
typedef struct SnakeNode {
// 定义蛇的节点的双向链表结构体并将其重命名为snakeNode
int pos_x;
int pos_y;
struct SnakeNode* pre;
struct SnakeNode* next;
}snakeNode;
typedef struct FoodNode {
// 定义food的结构体,并将其命名为foodNode
int pos_x;
int pos_y;
}foodNode;
typedef enum{
false = 0, true = 1 }bool;
void initSnake();
void initMap();
void gameRun();
void showGame();
void Move(int key);
void addSnakeNode(int cur_tail_x, int cur_tail_y);
void createFood(); // 产生食物
bool crashTest(int head_x, int head_y); // 判断是否撞墙或撞到自己
bool foodinsnake(); // 判断新产生的食物是否在蛇身上
void gotoxy(int x, int y); //光标控制
void HideCursor(); //隐藏光标
void gameover();
snake.c
#include "snake.h"
int map[N][N];
int Score = 2;
snakeNode* snake_head;
snakeNode* snake_tail;
foodNode* food;
void initSnake()
{
snake_head = (snakeNode*)malloc(sizeof(snakeNode));
snake_tail = (