21xrx.com
2024-12-22 20:26:29 Sunday
登录
文章检索 我的文章 写文章
【编程教程】C++语言贪吃蛇代码及详细解释
2023-07-05 01:42:45 深夜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

  STOP = 0;

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;

  default:

    break;

  }

  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;

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

    score += 10;

    fruitX = rand() % width;

    fruitY = rand() % height;

    nTail++;

  }

}

int main() {

  Setup();

  while (!gameover) {

    Draw();

    Input();

    Logic();

    Sleep(50);

  }

  return 0;

}

上述代码中,首先定义了几个必要的变量。gameover是一个布尔类型变量,用于判断游戏是否结束。width和height代表游戏界面的宽度和高度。x和y分别代表蛇头的坐标,fruitX和fruitY代表食物的坐标。score表示游戏得分。tailX和tailY是两个int型数组,用于记录蛇身的坐标。nTail表示蛇的长度。

接下来是一个枚举类型eDirection,内部定义了蛇的四个方向和停止状态。dir表示当前蛇的方向。

代码中的Setup函数用于初始化游戏状态。Draw函数用于绘制游戏界面。Input函数用于读取用户的输入。Logic函数用于更新游戏状态。

main函数是游戏的主程序,其中的while循环控制游戏的运行。在循环中,先调用Draw函数绘制游戏界面,然后调用Input函数读取用户的输入,并根据用户的输入修改蛇的方向。然后调用Logic函数根据蛇的运动情况更新游戏状态。最后用Sleep函数控制游戏的帧率,以达到更好的游戏体验。

以上就是一个简单的C++语言贪吃蛇代码,通过学习和编写这个代码示例,可以帮助初学者更好地理解C++编程基础知识,比如数组、循环、逻辑判断等等。

  
  

评论区

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