游戏场景
游戏资源
链接:https://pan.baidu.com/s/1ffGGgGQNX_Ky85wWIj7r9A
提取码:ab12
游戏源码
#include<easyx.h>
#include<stdio.h>
#include<mmsystem.h>
#pragma comment(lib,"winmm.lib")
#define WINDOW_W 800
#define WINDOW_H 600
#define SIZE 10
#define SPEED 10
typedef struct Snake {
int x;
int y;
}Snake;
typedef struct Food
{
int x;
int y;
}Food;
//蛇
Snake snake[100];
//蛇大小
int snakeCount = 1;
//食物
Food food;
//食物是否被吃掉 0吃掉 1未吃掉
int foodState = 1;
//游戏结束标志
int isOver = 0;
void moveSnake(void);
int main()
{
//食物生成
food.x= (rand() % (WINDOW_W / SIZE)) * SIZE;
food.y=(rand() % (WINDOW_H / SIZE))* SIZE;
//蛇头生成
snake[0].x = (rand() % (WINDOW_W / SIZE)) * SIZE;
snake[0].y = (rand() % (WINDOW_H / SIZE)) * SIZE;
initgraph(WINDOW_W, WINDOW_H);
BeginBatchDraw();
while (1)
{
if (foodState == 0)
{
//食物生成
food.x = (rand() % (WINDOW_W / SIZE)) * SIZE;
food.y = (rand() % (WINDOW_H / SIZE)) * SIZE;
foodState = 1;
}
//刷新
cleardevice();
//画食物
fillrectangle(food.x, food.y, food.x + SIZE, food.y + SIZE);
//画蛇头
fillrectangle(snake[0].x, snake[0].y, snake[0].x + SIZE, snake[0].y + SIZE);
//画蛇身体
for (int i = 1; i < snakeCount; ++i)
{
fillrectangle(snake[i].x, snake[i].y, snake[i].x + SIZE, snake[i].y + SIZE);
}
//刷新
FlushBatchDraw();
//处理用户输入
if (GetAsyncKeyState(VK_UP) & 0x8000)
{
//蛇头上移动
if (snake[0].y > 0)
{
//更新身体位置
moveSnake();
//更新蛇头位置
snake[0].y -= SPEED;
}
else
isOver = 1;
}
else if (GetAsyncKeyState(VK_DOWN) & 0x8000)
{
//蛇头下移动
if (snake[0].y < WINDOW_H - SIZE)
{
//更新身体位置
moveSnake();
//更新蛇头位置
snake[0].y += SPEED;
}
else
isOver = 1;
}
else if (GetAsyncKeyState(VK_LEFT) & 0x8000)
{
//蛇头左移动
if (snake[0].x > 0)
{
//更新身体位置
moveSnake();
//更新蛇头位置
snake[0].x -= SPEED;
}
else
isOver = 1;
}
else if (GetAsyncKeyState(VK_RIGHT) & 0x8000)
{
//蛇头右移动
if (snake[0].x < WINDOW_W - SIZE)
{
//更新身体位置
moveSnake();
//更新蛇头位置
snake[0].x += SPEED;
}
else
isOver = 1;
}
//碰撞检测
if (food.x == snake[0].x && food.y == snake[0].y)
{
snakeCount++;
foodState = 0;
snake[snakeCount - 1].x = food.x;
snake[snakeCount - 1].y = food.y;
}
//游戏是否结束
if (isOver == 1)
{
MessageBox(NULL, "你已死亡,游戏结束", "消息提示", MB_OK);
break;
}
Sleep(10);
}
closegraph();
return 0;
}
void moveSnake(void)
{
if (snakeCount == 1)
return;
//更新身体位置
for (int i = snakeCount; i > 1; --i)
{
snake[i - 1] = snake[i - 1 - 1];
}
}