对于新手使用easyx做贪吃蛇游戏,必须出现黑框才能控制蛇的移动的处理方法

打开电脑的系统,点击开发者选项,再将终端选择:Windows控制台主机。

进行了以上操作之后,你就可以控制小蛇啦!

  • 9
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是一个简单的贪吃实现,使用EasyX图形库: ```c++ #include <graphics.h> #include <conio.h> #include <time.h> const int MAP_SIZE = 20; // 地图大小 const int BLOCK_SIZE = 30; // 方块大小 const int SPEED = 200; // 移动速度(ms) struct Point { int x, y; Point(int x = 0, int y = 0):x(x), y(y) {} }; class Snake { public: Snake(int size = 3); // 构造函数,size为的初始长度 ~Snake(); // 析构函数 void move(); // 移动 bool isDead(); // 判断是否死亡 void draw(); // 绘制 void changeDir(int dir); // 改变的方向 Point getHead(); // 获取头位置 private: Point *body; // 的身体,用数组保存每个方块的位置 int length; // 的长度 int dir; // 的方向,0表示上,1表示右,2表示下,3表示左 }; class Food { public: Food(); // 构造函数 void generate(); // 生成新的食物 void draw(); // 绘制食物 Point getPos(); // 获取食物位置 private: Point pos; // 食物位置 }; Snake::Snake(int size) { body = new Point[size]; length = size; dir = 2; for (int i = 0; i < length; i++) { body[i].x = MAP_SIZE / 2; body[i].y = MAP_SIZE / 2 + i; } } Snake::~Snake() { delete[] body; } void Snake::move() { Point head = getHead(); Point newHead(head.x, head.y); switch (dir) { case 0: newHead.y--; break; case 1: newHead.x++; break; case 2: newHead.y++; break; case 3: newHead.x--; break; } for (int i = length - 1; i > 0; i--) { body[i] = body[i - 1]; } body[0] = newHead; } bool Snake::isDead() { Point head = getHead(); if (head.x < 0 || head.x >= MAP_SIZE || head.y < 0 || head.y >= MAP_SIZE) { return true; // 撞到墙了 } for (int i = 1; i < length; i++) { if (head.x == body[i].x && head.y == body[i].y) { return true; // 撞到自己了 } } return false; } void Snake::draw() { setfillcolor(RGB(0, 255, 0)); for (int i = 0; i < length; i++) { fillrectangle(body[i].x * BLOCK_SIZE, body[i].y * BLOCK_SIZE, (body[i].x + 1) * BLOCK_SIZE, (body[i].y + 1) * BLOCK_SIZE); } } void Snake::changeDir(int d) { if (abs(d - dir) == 2) { return; // 禁止掉头 } dir = d; } Point Snake::getHead() { return body[0]; } Food::Food() { generate(); } void Food::generate() { srand(time(NULL)); pos.x = rand() % MAP_SIZE; pos.y = rand() % MAP_SIZE; } void Food::draw() { setfillcolor(RGB(255, 0, 0)); fillrectangle(pos.x * BLOCK_SIZE, pos.y * BLOCK_SIZE, (pos.x + 1) * BLOCK_SIZE, (pos.y + 1) * BLOCK_SIZE); } Point Food::getPos() { return pos; } int main() { initgraph(MAP_SIZE * BLOCK_SIZE, MAP_SIZE * BLOCK_SIZE); setbkcolor(RGB(255, 255, 255)); cleardevice(); Snake snake; Food food; while (!snake.isDead()) { snake.draw(); food.draw(); Sleep(SPEED); snake.move(); if (snake.getHead().x == food.getPos().x && snake.getHead().y == food.getPos().y) { snake.length++; food.generate(); } if (_kbhit()) { int ch = _getch(); switch (ch) { case 'w': snake.changeDir(0); break; case 'd': snake.changeDir(1); break; case 's': snake.changeDir(2); break; case 'a': snake.changeDir(3); break; } } cleardevice(); } outtextxy(MAP_SIZE / 2 * BLOCK_SIZE - 50, MAP_SIZE / 2 * BLOCK_SIZE - 12, "Game Over"); _getch(); closegraph(); return 0; } ``` 该贪吃实现使用EasyX图形库进行绘制,具体实现可以参考代码中的注释。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值