食物变化一直在最上面一层,为什么不变化在中间或者下面
#include
#include
#include
#include//easyx头文件
/*
知识点:结构体,循环,函数,easyx,数组
*/
//做界面,创建图形窗口
#define SNAKE_NUM 500
enum DIR//表示蛇的方向
{
UP,
DOWN,
LEFT,
RIGHT,
};
//蛇的结构
struct Snake
{
int size;
int dir;//蛇的方向
int speed;
POINT coor[SNAKE_NUM];//坐标
}snake;
//食物结构
struct Food
{
int x;
int y;
int r; //食物大小
bool flag;//食物是否被吃了
DWORD color;//食物颜色
}food;
//数据的初始化
void GameInit()
{ //init初始化 graph图形窗口 SHOWCONSOLE显示控制台
initgraph(640, 480/*SHOWCONSOLE*/);
//设置随机数种子 GetTickCount();获取系统开机到现在所经过的毫秒数
srand(GetTickCount());
//初始化蛇 一开始有三节
snake.size = 3;
snake.speed = 10;
snake.dir = RIGHT;
for (int i = 0; i < snake.size; i++)
{
snake.coor[i].x = 40 - i * 10;
snake.coor[i].y = 10;
}
//初始化食物,rand()随机产生一个整数,如果没有设置随机种子,每次产生的都是固定的整数
//设置种子需要头文件 stdlib.h 一般把时间作为种子因为时间是在不断变化的
food.x = rand() % 640;
food.x = rand() % 480;
food.color = RGB(rand() % 256, rand() % 256, rand() % 256);
food.r = rand() % 10 + 5;
food.flag = true;
}
void GameDraw()
{//双缓冲绘图
BeginBatchDraw();
//设置背景颜色
setbkcolor(RGB(28, 115, 119));
cleardevice();
//绘制蛇
setfillcolor(RED);
for (int i = 0; i < snake.size; i++)
{
solidcircle(snake.coor[i].x, snake.coor[i].y, 5);
}
if (food.flag)
{
solidcircle(food.x, food.y, food.r);
}
EndBatchDraw();
}
//移动蛇
void snakeMove()
{
//让身体跟着头运动
for (int i = snake.size-1; i >0; i--)
{
snake.coor[i] = snake.coor[i - 1];
}
//移动是什么发生改变
switch (snake.dir)
{
case UP:
snake.coor[0].y -= snake.speed;;
if (snake.coor[0].y +10<= 0)
{
snake.coor[0].y = 480;
}
break;
case DOWN:
snake.coor[0].y+= snake.speed;
if (snake.coor[0].y - 10 <= 480)
{
snake.coor[0].y = 0;
}
break;
case LEFT:
snake.coor[0].x-= snake.speed;
if (snake.coor[0].x+ 10 <= 0)
{
snake.coor[0].x = 640;
}
break;
case RIGHT:
snake.coor[0].x+= snake.speed;
if (snake.coor[0].x-10 >=640)
{
snake.coor[0].x= 0;
}
break;
}
}
//通过按键改变蛇的移动方向
void keyControl()
{//判断有没有按键 如果有按键,就返回真
if(_kbhit())
//72 80 75 77 上下左右键值
switch (_getch())
{
case'w':
case'W':
case 72:
//改变方向
if (snake.dir != DOWN)
{
snake.dir = UP;
}
break;
case's':
case'S':
case 80:
if (snake.dir != UP)
{
snake.dir = DOWN;
}
break;
case'a':
case'A':
case 75:
if (snake.dir != RIGHT)
{
snake.dir = LEFT;
}
break;
case'd':
case'D':
case 77:
if (snake.dir != LEFT)
{
snake.dir = RIGHT;
}
break;
case' '://游戏暂停逻辑
while(1)
{
if (_getch() == ' ')
{
return;
}
break;
}
}
}
void EatFood()
{
if (food.flag&&snake.coor[0].x >= food.x-food.r && snake.coor[0].x <= food.x+food.r&&snake.coor[0].y>=food.y-food.r&&snake.coor[0].y<=food.y+food.r)
{
food.flag = false;
snake.size++;
}
//如果食物消失,则重新生成一个食物
if (!food.flag)
{
food.x = rand() % 640;
food.x = rand() % 480;
food.color = RGB(rand() % 256, rand() % 256, rand() % 256);
food.r = rand() % 10 + 5;
food.flag = true;
}
/*可以加一个分数吃一个食物加N分 */
}
int main()
{
GameInit();
//cleardevice();
while (1)
{
snakeMove();
GameDraw();
keyControl();
EatFood();
Sleep(200);
}
return 0;
}
你的初始的思路呢?