贪吃蛇(C++)

devtools/2024/9/22 20:35:31/

使用EasyX图形库绘制,在VC中安装,EasyX官网:EasyX Graphics Library for C++

EasyX官方文档:EasyX 文档 - 使用教程

#include<iostream>
#include<easyx.h>
#include<vector>//顺序表,容器
#include<ctime>	class Sprite {
public://委托构造函数Sprite():Sprite(0,0) {}Sprite(int x, int y) :m_x(x), m_y(y),m_color(RED) {}//绘制精灵virtual void draw() {//设置填充颜色setfillcolor(m_color);//绘制矩形fillrectangle(m_x, m_y, m_x+10, m_y+10);}//移动void moveBy(int dx, int dy){m_x += dx;m_y += dy;}//碰撞检测bool collision(const Sprite& ohter){return m_x == ohter.m_x && m_y == ohter.m_y;}bool coollisionWall(){return m_x > 640 || m_x < 0 || m_y>480 || m_y < 0;}
protected:int m_y;int m_x;COLORREF m_color;//颜色};
//蛇类
class Snake:public Sprite
{
public:Snake():Snake(0,0) {}Snake(int x, int y) :Sprite(x, y),dir(VK_RIGHT){//初始化三节蛇nodes.push_back(Sprite(20, 0));nodes.push_back(Sprite(10, 0));nodes.push_back(Sprite(0, 0));}void draw() override//绘制蛇{for (int i = 0; i < nodes.size(); i++){nodes[i].draw();}}//蛇移动void bodyMove(){//身体跟蛇头移动for (size_t i = nodes.size()-1; i >0; i--){nodes[i] = nodes[i - 1];}//蛇头移动switch (dir){case VK_UP://上移nodes[0].moveBy(0, -10);break; case VK_DOWN://下移nodes[0].moveBy(0, 10);break;case VK_LEFT://左移nodes[0].moveBy(-10, 0);break;case VK_RIGHT://右移nodes[0].moveBy(10, 0);break;}}//吃食物,蛇碰撞bool collision(const Sprite& other){return nodes[0].collision(other);}//碰撞墙壁bool die(){return nodes[0].coollisionWall();}//蛇增加一节void incrment(){nodes.push_back(Sprite());}
private:std::vector<Sprite>nodes;//蛇的所有结点
public:int dir;//蛇的方向
};
//食物
class Food :public Sprite
{
public:Food():Sprite(0,0){changePos();}//绘制食物void draw()override{setfillcolor(m_color);solidellipse(m_x, m_y, m_x + 10, m_y + 10);}//产生食物的坐标void changePos(){//生成随机坐标 m_x = rand() % 64 * 10;//食物坐标为10的整数倍m_y = rand() % 48 * 10;}
};//游戏场景
class GameScene
{
public:GameScene() {}void run(){	//开启双缓冲BeginBatchDraw();//清屏cleardevice();//绘制蛇snake.draw();//绘制食物food.draw();EndBatchDraw();//移动蛇,改变蛇的坐标snake.bodyMove();//是否吃到食物snakeEatFood();//获取消息ExMessage msg = { 0 };if(peekmessage(&msg, EX_KEY)){onMsg(msg);		}}//响应消息:鼠标消息,键盘消息void onMsg(const ExMessage& msg){//如果有按键按下if (msg.message == WM_KEYDOWN){//判断具体是那个按键按下 virtual key code 虚拟键码//判断上时不能按下,左时不能按右switch (msg.vkcode){case VK_UP:if(snake.dir!=VK_DOWN)snake.dir = msg.vkcode;break;case VK_DOWN:if (snake.dir != VK_UP)snake.dir = msg.vkcode;break;case VK_LEFT:if (snake.dir != VK_RIGHT)snake.dir = msg.vkcode;break;case VK_RIGHT:if (snake.dir != VK_LEFT)snake.dir = msg.vkcode;break;}}}//判断蛇能否吃到食物void snakeEatFood(){if (snake.collision(food))//如果蛇和食物产生碰撞{//蛇的节数增加snake.incrment();//产生新的食物food.changePos();}}//判断蛇是否碰到墙壁,如果碰到了游戏结束bool snakeDie(){if (snake.die()){cleardevice();//清除屏幕outtextxy(250, 200, L"GAME OVER!");return true;}return false;}
private:Snake snake;//创建蛇Food food;//食物};int main() {//绘制窗口initgraph(640, 480);//设置随机数种子srand(time(nullptr));GameScene scene;while (true){scene.run();//是否死亡if (scene.snakeDie()){break;}Sleep(100);	}	getchar();return 0;
}


http://www.ppmy.cn/devtools/42138.html

相关文章

L3-037 夺宝大赛 - java

L3-037 夺宝大赛 Java (javac) 时间限制 800 ms 内存限制 256 MB 其他编译器 时间限制 400 ms 内存限制 64 MB 栈限制 8192 KB 题目描述&#xff1a; 夺宝大赛的地图是一个由 n m n \times m nm 个方格子组成的长方形&#xff0c;主办方在地图上标明了所有障碍、以及大本营宝…

构建智能化不动产管理系统:数字化引领未来房地产行业发展

随着城市化进程的不断推进和房地产市场的持续发展&#xff0c;不动产管理系统的重要性日益凸显。在这一背景下&#xff0c;构建智能化不动产管理系统成为推动房地产行业数字化转型的关键举措。本文将深入探讨智能化不动产管理系统的构建与优势&#xff0c;助力房地产企业把握数…

[CAM_REQ_MGR_EVENT_MAX]高通6225平台相机老化异常重启

报错log 相机老化出现20/7万比例的老化异常重启&#xff0c;具体报错log入下 <4>[ 167.506585] [1970:01:02 18:52:26](0) [0:swapper/0]cam_v4l2_event_queue_notify_error: 251 callbacks suppressed 7 3339<6>[ 167.506602] [1970:01:02 18:52:26](0) [0:swap…

Java环境搭建(二)Notepad++和IDEA的下载

Notepad&#xff08;不推荐使用&#xff09; 高级记事本 下载地址 Notepad (juxinwk1.cn) 下载安装后一直下一步就可以了 注&#xff1a;改一下路径还有建立快捷方式&#xff08;自己选择&#xff09; IDEA 集成环境 下载地址 IntelliJ IDEA – the Leading Java and Kotl…

六种恢复已删除PDF文件的方法及实用方法全解析

在数字化时代PDF文件已成为我们日常工作中不可或缺的一部分。有时我们可能会因误操作或系统故障而不小心删除Excel、Word或PPT文档&#xff0c;特别是重要的PDF文件。此时如何高效地恢复这些文件就显得尤为重要。今天将为大家介绍六种恢复已删除PDF文件恢复方法&#xff0c;继续…

从电话到全渠道:呼叫中心软件如何重塑客户服务生态

一.引言 在数字时代&#xff0c;客户服务已不再是简单的电话接听与问题解答。随着消费者期望的提升和科技的飞速发展&#xff0c;客户服务已成为企业品牌建设与维护客户忠诚度的关键战场。从早期的电话客服中心到如今的全渠道服务生态系统&#xff0c;呼叫中心软件作为这一转变…

谷歌举办Gemini API开发者大赛;ChatGPT iOS版更新支持中文

&#x1f989; AI新闻 &#x1f680; 谷歌举办Gemini API开发者大赛&#xff0c;大奖1981款电动DeLorean 摘要&#xff1a;IT之家 5 月 15 日消息&#xff0c;在 2024 年谷歌 I/O 开发者大会上&#xff0c;谷歌宣布举办 Gemini API 开发者大赛&#xff0c;主要面向个人开发者…

Java-String

String 特点&#xff1a; 效果上相当于字符数组&#xff08;char[]&#xff09;&#xff0c;实际上底层原理是字节数组&#xff08;byte[]&#xff09; 构造方法 不同构造方法特点 使用""方法创建的对象实际指向的是同一个内存地址使用new创建的对象即时字符换内…