#include
#include
#include
#include
#include
//辅助宏定义
#define maph 25
#define mapw 40
#define snakesize 50
struct
{
//如何去定位:坐标
int x;
int y;
}food;
//蛇的结构体
struct
{
//记录蛇得坐标
int x[snakesize];
int y[snakesize];
//蛇的长度
int len;
int speed;
}snake;
//全局变量
int key = 'w';//初始方向
int changeFlage = 0;//变化标记
//
//模块设计
//地图
void drawmap();
//食物
void creatfood();
//按键控制方向
void keydown();
//状态,判断是否结束游戏
int snakestatus();
//光标移动,光标移动
void gotoxy(int x,int y);
//
主函数
//
int main(void)
{
drawmap();
while (1)
{
creatfood();
Sleep(snake.speed);
keydown();
if (!snakestatus())
{
break;
}
}
gotoxy(mapw/2, maph/2);
printf("Game Over");
system("pause");
return 0;
}
//地图
void drawmap()
{ //○食物■墙和贪吃蛇
//随机函数种子
srand((unsigned int)time(NULL));
//圈地
for (int i = 0; i <= maph; i++)
{
gotoxy(0,i);
printf("■");
gotoxy(mapw-2, i);
printf("■");
}
for (int i = 1; i <= mapw; i+=2)
{
gotoxy(i, 0);
printf("■");
gotoxy(i, maph-1);
printf("■");
}
//化蛇
//确定蛇的属性
snake.len = 3;
snake.speed = 300;
snake.x[0] = mapw / 2;
snake.y[0] = maph / 2;//将蛇放到屏幕中间
//画蛇头
gotoxy(snake.x[0],snake.y[0]);
printf("■");
//画蛇的身体
for (int k = 1; k < snake.len; k++)
{
snake.x[k] = snake.x[k - 1] + 2;
snake.y[k] = snake.y[k-1];
gotoxy(snake.x[k], snake.y[k]);
printf("■");
}
//画食物
//坐标的确定
while(1)
{food.x = rand() % (mapw - 4) + 2;
food.y = rand() % (maph - 2) + 1;
if (food.x % 2 == 0)
{
break;
}
}
//将确定的坐标画出来
gotoxy(food.x, food.y);
printf("○");
}
//食物产生
void creatfood()
{
//蛇吧食物吃了
if (snake.x[0] == food.x&&food.y[0] == food.y)
{
srand((unsigned int )time(NULL));
//产生的食物不能再蛇的身上并且坐标要是偶数
while (1)
{
int flag = 1;
food.x = rand() % (mapw - 4) + 2;
food.y = rand() % (maph - 2) + 1;
//产生的食物不能再蛇的身上
for (int k = 0; k < snake.len; k++)
{
if (snake.x[k] == food.x&&snake.y[k] == food.y)
{
flag = 0;
break;
}
}
if (flag&&food.x % 2 == 0)
{
break;
}
}
}
gotoxy(food.x,food.y);
printf("○");
snake.len++;
changeFlage =1;//蛇的标记
}
//按键实现
void keydown()
{
//无按键的处理
if (_kbhit())
{ //有按键接受
fflush(stdin);
key = _getch();
}
//擦除最后一节
if (!changeFlage)
{
gotoxy(snake.x[snake.len-1], snake.y[snake.len - 1]);
printf(" ");
}
//后面的蛇身处理
for (int i =snake.len-1 ; i > 0; i--)
{
snake.x[i] = snake.x[i - 1];
snake.y[i] = snake.y[i - 1];
}
//按键处理移动方向的处理
switch (key)
{
case 'w':
case 'W':
snake.y[0]--;
break;
case 's':
case 'S':
snake.y[0]++;
break;
case 'a':
case 'A':
snake.x[0]-=2;
break;
case 'd':
case 'D':
snake.x[0]+=2;
break;
}
//蛇头画出来
gotoxy(snake.x[0], snake.y[0]);
printf("■");
changeFlage = 0;
gotoxy(maph +2,0);
}
//状态
int snakestatus()
{
if (snake.x[0] == 2 || snake.x[0] == maph-2 || snake.y[0] == 0 || snake.y[0] == mapw-1)
return 0;
//蛇头不能吃自己
for (int k = 1; k < snake.len; k++
余下内容下载附件