easyx版贪吃蛇

这篇博客介绍了一款使用C++和Easyx库开发的贪吃蛇游戏,包含了闪烁开始提示、计分板、速度显示、游戏结束选项等特性。游戏中存在一些已知的Bug,如蛇身长度错误和暂停后显示问题。作者提醒读者注意程序使用了链表结构,并且游戏运行时需将输入法切换到英文模式。
摘要由CSDN通过智能技术生成

作为一枚小白加萌新,最快乐的事莫过于自己写游戏了。

这次的贪吃蛇包含了

1.Press any key to start 闪烁效果
2.添加了计分板和速度显示。
3.死亡后会有选择继续还是结束的界面。
4.结束界面可以显示得分。
5.解决了反向位移造成死亡的问题
6.速度可以自行调节并且达到上限后再加速或减速不会崩溃(加入了检测代码)
7.等等更多

操作:

wasd移动。
q暂停,之后长按wasd继续移动。
‘,’(逗号)减速 ‘。’(句号)加速。

Bug:(哪位大佬解决了请私我,感激不尽)

1.第一次开始移动会额外多出一节。
2.撞墙会少一节。
3.暂停会有一节隐藏,继续游戏会露出来。

注意点:

1.使用C++和easyx。
2.此程序的核心是蛇的链表结构。需要链表相关的知识。
3.输入法必须调成英文。

上图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

代码如下

//贪吃蛇1.0

#include<iostream>
#include<iomanip>
#include<graphics.h>
#include<conio.h>
#include<windows.h>
#include<time.h>
#include<cstdlib>
using namespace std;

const int sideLength = 20;//基础方块边长
const int interval = 8;//基础方块间距
char playerInput = 'm';
char run = 'm';//移动,初始化为wasdq外的任意值
char spe;//调节速度
int speed = 60;
int score = 0;
char c_score[6] = "0";//这个让得分在经过后面的程序处理后可以实时的显示
int level = 10;
char dellevel[6] = "     ";
char c_level[3] = "10";
struct coordinate {
   //定义一个存储坐标的结构变量类型。coordinate:坐标。
	int x;
	int y;
}food;
coordinate snake_head = {
    38,38 };
struct snake {
   //蛇的结构体.
	int x;
	int y;
	snake *next;
}*head, *tail, *p;//head只是一个snake型的指针,如要让其也能next则要new,不过显然不需要。

#define up 'w'
#define down 's'
#define left 'a'
#define right 'd'
#define wholeLength sideLength + interval
#define fast '.'
#define slow ','
#define pause 'q'

void drawBlock();//生成普通方块
void drawSnake();//生成蛇方块
void deleteBlock();//删除方块(以背景色生成)
void drawFood();//生成食物方块
void insertAthead();//在链表头部插入
void deletetail();//删除链表尾巴
void startpic();//开始界面
void drawMap();//生成初始地图
void drawSnake_0();//生成蛇
void drawDate();//在游戏面板右边显示数据
void initialize();//初始化
void runBody();//蛇身的移动
bool judgeAlive();//判断蛇是否死亡
void clickControl();//监听并获取键盘输入
void createFood();//生成食物
void eatFood();//吃食物
bool retry();//重开游戏
void reSet();//重新设置
void gameOver();//游戏结束生成面
void delSnake();//删除蛇的数据(用new就要delete)

void drawBlock(int x, int y)
{
   
	setfillcolor(YELLOW);
	solidrectangle(x, y, x + sideLength, y + sideLength);
}
void drawSnake(int x, int y)
{
   
	setfillcolor(WHITE);
	solidrectangle(x, y, x + sideLength, y + sideLength);
}
void deleteBlock(int x, int y)
{
   
	setfillcolor(BLACK);
	solidrectangle(x, y, x + sideLength, y + sideLength);
}
void drawFood(int x, int y)
{
   
	setfillcolor(GREEN);
	solidrectangle(x, y, x + sideLength, y + sideLength);
}
void startpic()
{
   
	initgraph(1400, 600);
	char str_0[] = "Snake 1.0";
	char tips[] = "Tips:";
	char str_1[
  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
以下是一个使用easyx库实现的简单贪吃蛇游戏的C语言代码: ```c #include <graphics.h> #include <conio.h> #include <time.h> #define WIDTH 640 // 窗口宽度 #define HEIGHT 480 // 窗口高度 #define SIZE 20 // 贪吃蛇每个正方形的边长 #define MAX_LENGTH (WIDTH / SIZE) * (HEIGHT / SIZE) // 贪吃蛇最大长度 struct Snake { int x, y; // 贪吃蛇头部坐标 int length; // 贪吃蛇长度 int direction; // 贪吃蛇运动方向 int body[MAX_LENGTH][2]; // 贪吃蛇身体各个部分的坐标 } snake; struct Food { int x, y; // 食物坐标 } food; void init(); // 初始化函数 void drawSnake(); // 绘制贪吃蛇 void moveSnake(); // 移动贪吃蛇 void generateFood(); // 生成食物 bool isHitWall(); // 判断是否撞墙 bool isHitBody(); // 判断是否撞身体 bool isEatFood(); // 判断是否吃到食物 int main() { init(); while (1) { moveSnake(); if (isHitWall() || isHitBody()) { break; } if (isEatFood()) { generateFood(); } cleardevice(); drawSnake(); Sleep(100); } closegraph(); return 0; } void init() { initgraph(WIDTH, HEIGHT); setbkcolor(WHITE); setfillcolor(BLACK); setcolor(BLACK); snake.x = WIDTH / 2; snake.y = HEIGHT / 2; snake.length = 3; snake.direction = VK_RIGHT; for (int i = 0; i < snake.length; i++) { snake.body[i][0] = snake.x - i * SIZE; snake.body[i][1] = snake.y; } generateFood(); } void drawSnake() { for (int i = 0; i < snake.length; i++) { fillrectangle(snake.body[i][0], snake.body[i][1], snake.body[i][0] + SIZE, snake.body[i][1] + SIZE); } setfillcolor(RED); fillrectangle(food.x, food.y, food.x + SIZE, food.y + SIZE); setfillcolor(BLACK); } void moveSnake() { for (int i = snake.length - 1; i > 0; i--) { snake.body[i][0] = snake.body[i - 1][0]; snake.body[i][1] = snake.body[i - 1][1]; } switch (snake.direction) { case VK_UP: snake.y -= SIZE; break; case VK_DOWN: snake.y += SIZE; break; case VK_LEFT: snake.x -= SIZE; break; case VK_RIGHT: snake.x += SIZE; break; } snake.body[0][0] = snake.x; snake.body[0][1] = snake.y; } void generateFood() { srand((unsigned int)time(NULL)); bool flag = true; while (flag) { flag = false; food.x = SIZE * (1 + rand() % (WIDTH / SIZE - 2)); food.y = SIZE * (1 + rand() % (HEIGHT / SIZE - 2)); for (int i = 0; i < snake.length; i++) { if (food.x == snake.body[i][0] && food.y == snake.body[i][1]) { flag = true; break; } } } } bool isHitWall() { if (snake.x < SIZE || snake.x > WIDTH - 2 * SIZE || snake.y < SIZE || snake.y > HEIGHT - 2 * SIZE) { return true; } else { return false; } } bool isHitBody() { for (int i = 1; i < snake.length; i++) { if (snake.body[i][0] == snake.x && snake.body[i][1] == snake.y) { return true; } } return false; } bool isEatFood() { if (snake.x == food.x && snake.y == food.y) { snake.length++; snake.body[snake.length - 1][0] = snake.body[snake.length - 2][0]; snake.body[snake.length - 1][1] = snake.body[snake.length - 2][1]; return true; } else { return false; } } ``` 在该代码中,我们使用了`graphics.h`和`conio.h`两个头文件来实现图形界面和键盘输入的功能。其中,`init()`函数负责初始化贪吃蛇和食物的位置、长度、方向等信息,`drawSnake()`函数负责绘制贪吃蛇和食物,`moveSnake()`函数负责移动贪吃蛇,`generateFood()`函数负责随机生成食物,并判断其是否与贪吃蛇身体重叠,`isHitWall()`函数和`isHitBody()`函数分别用于判断贪吃蛇是否撞墙和撞身体,`isEatFood()`函数用于判断贪吃蛇是否吃到了食物。在主函数中,我们使用一个循环不断移动贪吃蛇,并根据不同情况终止游戏。 在编写完代码后,我们需要在编译选项中添加`-lbgi -lgdi32 -lcomdlg32 -luuid -loleaut32 -lole32`这些库文件,才能正常编译和运行程序。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值