#include const int h = 8; //地图的高
const int l = 16; //地图的长
char gamemap[h][l]; //游戏地图
int key; //按键保存
int sum = 1, over = 0; //蛇的长度, 游戏结束(自吃或碰墙)
int dx[4] = {0, 0, -1, 1}; //左、右、上、下的方向
int dy[4] = {-1, 1, 0, 0};
struct snake //蛇的每个节点的数据类型
{
int x, y; //左边位置
int now; //保存当前节点的方向, 0,1,2,3分别为左右上下
}snake[h*l];
const char shead = '@'; //蛇头
const char sbody = '#'; //蛇身
const char sfood = '*'; //食物
const char snode = '.'; //'.'在地图上标示为空
void initial(); //地图的初始化
void create_food(); //在地图上随机产生食物
void show(); //刷新显示地图
void button(); //取出按键,并判断方向
void move(); //蛇的移动
void check_border(); //检查蛇头是否越界
void check_head(int x, int y); //检查蛇头移动后的位置情况
int main()
{
initial();
show();
return 0;
}
void initial() //地图的初始化
{
int i, j;
int hx, hy;
system("title 贪吃蛇"); //控制台的标题
memset(gamemap, '.', sizeof(gamemap)); //初始化地图全部为空'.'
system("cls");
srand(time(0)); //随机种子
hx = rand()%h; //产生蛇头
hy = rand()%l;
gamemap[hx][hy] = shead;
snake[0].x = hx; snake[0].y = hy;
snake[0].now = -1;
create_food(); //随机产生食物
for(i = 0; i _= h
|| snake[0].y = l)
over = 1;
}
void check_head(int x, int y) //检查蛇头移动后的位置情况
{
if(gamemap[ snake[0].x ][ snake[0].y ] == '.') //为空
gamemap[ snake[0].x ][ snake[0].y ] = '@';
else
if(gamemap[ snake[0].x ][ snake[0].y ] == '*') //为食物
{
gamemap[ snake[0].x ][ snake[0].y ] = '@';
snake[sum].x = x; //新增加的蛇身为蛇头后面的那个
snake[sum].y = y;
snake[sum].now = snake[0].now;
gamemap[ snake[sum].x ][ snake[sum].y ] = '#';
sum++;
create_food(); //食物吃完了马上再产生一个食物
}
else
over = 1;
}