21xrx.com
2024-11-22 06:25:21 Friday
登录
文章检索 我的文章 写文章
C++贪吃蛇源代码
2023-07-08 22:10:12 深夜i     --     --
C++ 贪吃蛇 源代码 游戏开发 编程语言

C++是一种面向对象的编程语言,适用于开发各种应用程序。贪吃蛇游戏是一种经典的计算机游戏,通过控制蛇的移动,吃掉尽可能多的食物,不断地增长体长,挑战自己的反应和操作能力。

以下是使用C++语言编写的一个简单的贪吃蛇游戏源代码:


#include <iostream>

#include <conio.h>

#include <windows.h>

using namespace std;

bool gameOver;

const int width = 20;

const int height = 20;

int x, y, fruitX, fruitY, score;

int tailX[100], tailY[100];

int nTail;

enum eDirection LEFT;

eDirection dir;

void Setup()

{

  gameOver = false;

  dir = STOP;

  x = width / 2;

  y = height / 2;

  fruitX = rand() % width;

  fruitY = rand() % height;

  score = 0;

}

void Draw()

{

  system("cls"); // 清空屏幕

  // 绘制上边框

  for (int i = 0; i < width + 2; i++)

    cout << "#";

  cout << endl;

  // 绘制侧边框和蛇体

  for (int i = 0; i < height; i++)

  {

    for (int j = 0; j < width; j++)

    {

      if (j == 0)

        cout << "#";

      if (i == y && j == x)

        cout << "O";

      else if (i == fruitY && j == fruitX)

        cout << "F";

      else

      {

        bool print = false;

        for (int k = 0; k < nTail; k++)

        {

          if (tailX[k] == j && tailY[k] == i)

          

            cout << "o";

            print = true;

          

        }

        if (!print)

          cout << " ";

      }

      if (j == width - 1)

        cout << "#";

    }

    cout << endl;

  }

  // 绘制下边框

  for (int i = 0; i < width + 2; i++)

    cout << "#";

  cout << endl;

  // 输出当前得分

  cout << "Score:" << score << endl;

}

void Input()

{

  if (_kbhit()) // 如果有键盘输入

  {

    switch (_getch())

    

    case 'a':

      dir = LEFT;

      break;

    case 'd':

      dir = RIGHT;

      break;

    case 'w':

      dir = UP;

      break;

    case 's':

      dir = DOWN;

      break;

    case 'x':

      gameOver = true;

      break;

    

  }

}

void Logic()

{

  // 记录蛇的尾巴位置

  int prevX = tailX[0];

  int prevY = tailY[0];

  int prev2X, prev2Y;

  tailX[0] = x;

  tailY[0] = y;

  for (int i = 1; i < nTail; i++)

  {

    prev2X = tailX[i];

    prev2Y = tailY[i];

    tailX[i] = prevX;

    tailY[i] = prevY;

    prevX = prev2X;

    prevY = prev2Y;

  }

  // 根据方向移动蛇头

  switch (dir)

  {

  case LEFT:

    x--;

    break;

  case RIGHT:

    x++;

    break;

  case UP:

    y--;

    break;

  case DOWN:

    y++;

    break;

  }

  // 判断是否吃到了食物

  if (x == fruitX && y == fruitY)

  {

    score += 10;

    fruitX = rand() % width;

    fruitY = rand() % height;

    nTail++;

  }

  // 判断是否撞墙或撞到自己

  if (x >= width || x < 0 || y >= height || y < 0)

    gameOver = true;

  for (int i = 0; i < nTail; i++)

  {

    if (tailX[i] == x && tailY[i] == y)

      gameOver = true;

  }

}

int main()

{

  Setup();

  while (!gameOver)

  {

    Draw();

    Input();

    Logic();

    Sleep(50); // 每次循环暂停50毫秒

  }

  return 0;

}

以上源代码中,首先定义了一系列变量和常量,包括游戏区域的宽度、高度、蛇的位置、食物的位置、得分、蛇的尾巴位置等。然后使用枚举类型定义了蛇的方向,和方向键的对应关系。Setup函数用于初始化游戏,包括将游戏状态、蛇的方向、蛇和食物的位置等设置为初始值。Draw函数用于绘制游戏界面,包括上、下、左、右四个边框和蛇、食物、尾巴等部分。Input函数用于获取键盘输入。Logic函数用于处理游戏逻辑,包括将蛇的尾巴沿着蛇身移动、根据方向移动蛇头、判断是否吃到了食物、判断是否撞墙或撞到自己等。

最后,在主函数中首先调用Setup函数,然后使用循环不断执行Draw、Input、Logic函数,每次循环暂停50毫秒,直到游戏结束。如果撞墙或撞到自己,游戏结束。如果按下了x键,也会结束游戏。

这份C++贪吃蛇源代码相对简单,可以参照该代码进行修改和优化,加入更多的游戏元素和难度。

  
  

评论区

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