一、思路
- 定义二维数组window表示窗口;
- 定义BLANK、BORDER、SNAKE、FOOD 分别表示:空白、边框、蛇身、食物;
- 定义并初始化: 蛇头,蛇尾,食物;
- 显示初始窗口;
- 循环getchar,确定move方向,并使用fifo保存move方向,用于移动蛇尾;
- 计算新的蛇头,判断新蛇头为空白则移动蛇尾;为食物则不移动蛇尾,并重新生成食物;其他情况则直接结束游戏;
- 显示蛇头;
- 显示窗口。
二、最终效果
lim@TIM:~/code/game$ ./main
OOOOOOOOOOOOOOOO
O * O
O DDD O
O D O
O D O
O D D O
O DDDD O
O O
O O
O O
O O
O O
O O
O O
O O
OOOOOOOOOOOOOOOO
三、代码
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <memory.h>
#define XLEN 16
#define YLEN 16
enum {
BLANK = ' ',
BORDER = 'O',
SNAKE = 'D',
FOOD = '*',
};
typedef struct point {
int x;
int y;
}point;
typedef struct queue
{
char buf[256];
char in;
char out;
}queue;
void queue_init(queue *q)
{
q->in = 0;
q->out = 0;
}
void queue_push(queue *q