21xrx.com
2024-11-05 16:25:34 Tuesday
登录
文章检索 我的文章 写文章
C++贪吃蛇最短代码
2023-07-02 21:34:28 深夜i     --     --
C++ 贪吃蛇 最短代码

贪吃蛇是一款老少皆宜、简单易懂且极富挑战性的游戏,大量程序员在学习编程的过程中都会尝试写一份自己的贪吃蛇游戏。在众多的语言中,C++被广泛应用于编写游戏程序,在C++中编写贪吃蛇也是很受欢迎的。本文将介绍一个C++贪吃蛇的最短代码。

首先,我们需要知道C++的graphics.h库。graphics.h库是一个用于图形界面的C++库,我们可以用它来实现游戏的界面。代码中需要用到的函数如下:

int initgraph(int &gd, int &gm, char *path);// 初始化绘图界面

void setcolor(int color);// 设置绘图颜色

void line(int x1, int y1, int x2, int y2);// 画直线

void rectangle(int left, int top, int right, int bottom);// 画矩形

void fillellipse(int x, int y, int rx, int ry);// 画椭圆

void settextstyle(int font, int direction, int size);// 设置文本风格

void outtextxy(int x, int y, char *str);// 输出文本

接下来,我们将进入游戏的具体编程过程。

第一步,初始化界面和变量

int gd = DETECT, gm;// 初始化绘图界面

initgraph(gd, gm, "");// 初始化绘图界面

int snake[100][2], apple_x, apple_y;// 贪吃蛇身体坐标、苹果坐标

int direction = 1, len = 3, flag = 1;// 初始方向、初始身体长度、初始标志位

第二步,画出游戏边框、贪吃蛇和苹果

rectangle(5, 5, 595, 595);// 画游戏边框

setcolor(WHITE);// 设置绘图颜色

snake[0][0] = 300, snake[0][1] = 300;// 初始贪吃蛇头部坐标

fillellipse(snake[0][0], snake[0][1], 10, 10);// 画出贪吃蛇头部

setcolor(BLACK);// 设置绘图颜色

for (int i = 1; i != len; ++i) {

  snake[i][0] = snake[i - 1][0] + 15, snake[i][1] = snake[i - 1][1];

  fillellipse(snake[i][0], snake[i][1], 10, 10);// 画出贪吃蛇身体

}

apple_x = rand() % 590 + 10, apple_y = rand() % 590 + 10;// 随机生成苹果坐标

setcolor(RED);// 设置绘图颜色

fillellipse(apple_x, apple_y, 10, 10);// 画出苹果

第三步,循环移动贪吃蛇

while (1) {

  switch (direction) {// 根据方向移动贪吃蛇头部坐标

    case 1: {

      snake[0][0] += 15; break;// 右

    }

    case 2: {

      snake[0][1] += 15; break;// 下

    }

    case 3: {

      snake[0][0] -= 15; break;// 左

    }

    case 4: {

      snake[0][1] -= 15; break;// 上

    }

  }

  if (snake[0][0] < 10 || snake[0][0] > 590 || snake[0][1] < 10 || snake[0][1] > 590) {// 判断是否撞墙

    outtextxy(300, 300, "Game Over!");

    getch();

    closegraph();

    break;

  }

  for (int i = len - 1; i != 0; --i) {// 贪吃蛇身体跟随前一节身体移动

    snake[i][0] = snake[i - 1][0];

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

  }

  if (snake[0][0] - 10 <= apple_x && apple_x <= snake[0][0] + 10 && snake[0][1] - 10 <= apple_y && apple_y <= snake[0][1] + 10) {// 如果吃到了苹果

    len += 1;// 贪吃蛇长度加一

    apple_x = rand() % 590 + 10, apple_y = rand() % 590 + 10;// 重新生成苹果坐标

    setcolor(RED);// 设置绘图颜色

    fillellipse(apple_x, apple_y, 10, 10);// 画出苹果

  }

  setcolor(WHITE);// 设置绘图颜色

  fillellipse(snake[len - 1][0], snake[len - 1][1], 10, 10);// 抹掉贪吃蛇尾部

  setcolor(BLACK);// 设置绘图颜色

  fillellipse(snake[0][0], snake[0][1], 10, 10);// 画出贪吃蛇头部

  for (int i = 1; i != len - 1; ++i) {

    setcolor(WHITE);// 设置绘图颜色

    fillellipse(snake[i][0], snake[i][1], 10, 10);// 画出贪吃蛇身体

  }

  delay(100);// 延迟100ms

  if (kbhit()) {// 监听按键

    flag = 1;// 启动标志位

    char c = getch();

    switch (c) {

      case 72: {// 上

        if (direction != 2 && flag)

          direction = 4;

          flag = 0;

        break;

      }

      case 80: {// 下

        if (direction != 4 && flag)

          direction = 2;

          flag = 0;

        break;

      }

      case 75: {// 左

        if (direction != 1 && flag)

          direction = 3;

          flag = 0;

        break;

      }

      case 77: {// 右

        if (direction != 3 && flag)

          direction = 1;

          flag = 0;

        break;

      }

    }

  }

}

以上便是C++贪吃蛇最短代码的大体编写过程。虽然代码不长,但游戏内容丰富,操作有趣,同时对程序员的编程技巧和思维能力也提出了一定的挑战。对于想要学习游戏编程的初学者来说,该代码无疑是一个很好的入门案例。

  
  

评论区

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