21xrx.com
2024-11-22 12:58:08 Friday
登录
文章检索 我的文章 写文章
贪吃蛇DevC++代码
2023-07-04 19:22:14 深夜i     --     --
DevC++ 贪吃蛇 代码

贪吃蛇是许多人从小就喜欢玩的一款经典游戏,而在DevC++中也能实现写出自己的贪吃蛇游戏。

首先,我们需要一个窗口来显示游戏,可以使用WinBGIm图形库来实现。接着,定义一个结构体来表示蛇的每个节点,包括坐标和方向。然后,在窗口中初始化贪吃蛇和食物的位置,并且在每次游戏循环里更新蛇的状态。

下面是一段简单的贪吃蛇DevC++代码:


#include <graphics.h>

#include <conio.h>

#include <time.h>

#define W 800

#define H 600

#define UNIT_SIZE 20 // 每个节点大小为20

struct SnakeNode

  int x;

SnakeNode snake[100]; // 最多支持100个节点

int length = 4; // 初始蛇的长度为4

int score = 0; // 得分为0

int food_x, food_y; // 食物的坐标

void draw_snake() { // 绘制蛇

  for(int i=length-1; i>=0; i--) {

    setfillcolor(BLUE);

    solidrectangle(snake[i].x, snake[i].y, snake[i].x+UNIT_SIZE, snake[i].y+UNIT_SIZE);

  }

}

void update_snake() { // 更新蛇的状态

  for(int i=length-1; i > 0; i--) {

    snake[i].x = snake[i-1].x;

    snake[i].y = snake[i-1].y;

  }

  switch(snake[0].dir) { // 根据当前方向更新蛇头坐标

    case 0: snake[0].y -= UNIT_SIZE; break; // 上

    case 1: snake[0].y += UNIT_SIZE; break; // 下

    case 2: snake[0].x -= UNIT_SIZE; break; // 左

    case 3: snake[0].x += UNIT_SIZE; break; // 右

  }

  if(snake[0].x == food_x && snake[0].y == food_y) { // 如果吃到了食物

    score += 10; // 得分加10

    length++; // 蛇长加1

    food_x = rand() % (W/UNIT_SIZE) * UNIT_SIZE; // 随机生成食物位置

    food_y = rand() % (H/UNIT_SIZE) * UNIT_SIZE;

  }

}

void generate_food() { // 生成食物

  setfillcolor(RED);

  solidrectangle(food_x, food_y, food_x+UNIT_SIZE, food_y+UNIT_SIZE);

}

bool check_gameover() { // 判断是否结束游戏

  if(snake[0].x < 0 || snake[0].x >= W || snake[0].y < 0 || snake[0].y >= H) // 撞到墙了

    return true;

  for(int i=1; i<length; i++) { // 撞到自己了

    if(snake[0].x == snake[i].x && snake[0].y == snake[i].y)

      return true;

  }

  return false; // 不结束游戏继续进行

}

int main() {

  initgraph(W, H); // 初始化窗口

  setbkcolor(WHITE);

  settextcolor(BLACK);

  // 初始化蛇和食物位置

  for(int i=0; i<length; i++) {

    snake[i].x = W/2 - i * UNIT_SIZE;

    snake[i].y = H/2;

    snake[i].dir = 3;

  }

  food_x = rand() % (W/UNIT_SIZE) * UNIT_SIZE;

  food_y = rand() % (H/UNIT_SIZE) * UNIT_SIZE;

  while(true) {

    cleardevice();

    draw_snake();

    generate_food();

    update_snake();

    if(check_gameover()) // 如果结束游戏

      break;

    outtextxy(30, 30, "Score: ");

    outtextxy(100, 30, to_string(score).c_str()); // 显示得分

    flushinput(); // 删除缓存的输入

    Sleep(150); // 等待150ms

  }

  outtextxy(W/2-60, H/2, "GAME OVER"); // 显示游戏结束

  getch();

  closegraph();

  return 0;

}

以上就是一个简单的贪吃蛇DevC++代码实现,大家可以根据自己的需求进行修改和完善。希望对大家有所帮助!

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复