C语言Easyx实现贪吃蛇详解
简介
贪吃蛇是经典的小游戏,此篇攻略详细讲解如何用C语言结合Easyx图形库实现贪吃蛇的效果。
准备工作
安装Easyx
Easyx是一款基于C语言的图形库,在此之前需要先下载和安装Easyx。
代码框架
以下是整个贪吃蛇程序的代码框架:
#include <graphics.h> //Easyx头文件,必须要含有这个
//贪吃蛇头部
typedef struct
{
int x;
int y;
} SNAKE;
int main()
{
//窗口初始化
initgraph(640, 480);
//循环游戏,直到ESC键退出游戏
while (!GetAsyncKeyState(VK_ESCAPE))
{
//绘制游戏界面
setbkcolor(BLACK);
cleardevice();
//刷新游戏区域
flushbatch();
//睡眠0.05s,每秒20帧
Sleep(50);
}
//程序结束,关闭窗口
closegraph();
return 0;
}
实现步骤
1.绘制游戏界面
在循环中一直绘制游戏界面,并且刷新游戏区域。
setbkcolor(BLACK); //设置背景颜色为黑色
cleardevice(); //清空设备上的图形
//绘制游戏区域
//绘制贪吃蛇
//绘制果实
//绘制分数
//绘制游戏说明
flushbatch(); //将绘制缓存一次性显示到窗口中
2.实现贪吃蛇的移动
通过键盘事件监听,实现移动方向的判断,接着实现贪吃蛇的移动。
//变量定义
SNAKE head; //贪吃蛇头部
SNAKE snake[500]; //贪吃蛇身体
int len = 3; //贪吃蛇初始长度为3
//初始化贪吃蛇
head.x = 320;
head.y = 240;
snake[0] = head;
head.x -= 20;
snake[1] = head;
head.x -= 20;
snake[2] = head;
while (!GetAsyncKeyState(VK_ESCAPE))
{
//获取按键事件
if (GetAsyncKeyState(VK_LEFT) & 0x8000) //左键
{
head.x -= 20; //向左移动20个像素
}
else if (GetAsyncKeyState(VK_RIGHT) & 0x8000) //右键
{
head.x += 20; //向右移动20个像素
}
else if (GetAsyncKeyState(VK_UP) & 0x8000) //上键
{
head.y -= 20; //向上移动20个像素
}
else if (GetAsyncKeyState(VK_DOWN) & 0x8000) //下键
{
head.y += 20; //向下移动20个像素
}
snake[len] = head; //将新移动的头部放到snake中
len++; //长度+1
//显示贪吃蛇
for (int i = 0; i < len; i++)
{
fillrectangle(snake[i].x, snake[i].y, snake[i].x + 20, snake[i].y + 20); //绘制贪吃蛇
}
}
3.游戏结束
如果贪吃蛇头部碰壁或者碰到自己的身体,则游戏结束。
if (head.x < 0 || head.x > 620 || head.y < 0 || head.y > 460) //碰到边框
{
MessageBox(GetHWnd(), TEXT("游戏结束,你撞墙了!"), TEXT("游戏结束"), MB_OK); //弹框提示游戏结束
break; //跳出循环,结束游戏
}
for (int i = 1; i < len; i++) //从下标1开始
{
if (snake[i].x == head.x && snake[i].y == head.y) //碰到自己的身体
{
MessageBox(GetHWnd(), TEXT("游戏结束,你碰到自己了!"), TEXT("游戏结束"), MB_OK); //弹框提示游戏结束
break; //跳出循环,结束游戏
}
}
示例说明
示例一
实现贪吃蛇的移动,按控制键时蛇会朝着对应的方向移动。
//变量定义
SNAKE head; //贪吃蛇头部
SNAKE snake[500]; //贪吃蛇身体
int len = 3; //贪吃蛇初始长度为3
//初始化贪吃蛇
head.x = 320;
head.y = 240;
snake[0] = head;
head.x -= 20;
snake[1] = head;
head.x -= 20;
snake[2] = head;
while (!GetAsyncKeyState(VK_ESCAPE))
{
//获取按键事件
if (GetAsyncKeyState(VK_LEFT) & 0x8000) //左键
{
head.x -= 20; //向左移动20个像素
}
else if (GetAsyncKeyState(VK_RIGHT) & 0x8000) //右键
{
head.x += 20; //向右移动20个像素
}
else if (GetAsyncKeyState(VK_UP) & 0x8000) //上键
{
head.y -= 20; //向上移动20个像素
}
else if (GetAsyncKeyState(VK_DOWN) & 0x8000) //下键
{
head.y += 20; //向下移动20个像素
}
snake[len] = head; //将新移动的头部放到snake中
len++; //长度+1
//显示贪吃蛇
for (int i = 0; i < len; i++)
{
fillrectangle(snake[i].x, snake[i].y, snake[i].x + 20, snake[i].y + 20); //绘制贪吃蛇
}
}
示例二
游戏结束,如果贪吃蛇头部碰壁或者碰到自己的身体,则弹框提示游戏结束。
if (head.x < 0 || head.x > 620 || head.y < 0 || head.y > 460) //碰到边框
{
MessageBox(GetHWnd(), TEXT("游戏结束,你撞墙了!"), TEXT("游戏结束"), MB_OK); //弹框提示游戏结束
break; //跳出循环,结束游戏
}
for (int i = 1; i < len; i++) //从下标1开始
{
if (snake[i].x == head.x && snake[i].y == head.y) //碰到自己的身体
{
MessageBox(GetHWnd(), TEXT("游戏结束,你碰到自己了!"), TEXT("游戏结束"), MB_OK); //弹框提示游戏结束
break; //跳出循环,结束游戏
}
}
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言Easyx实现贪吃蛇详解 - Python技术站