21xrx.com
2025-07-15 00:45:55 Tuesday
登录
文章检索 我的文章 写文章
C++代码实现贪吃蛇游戏
2023-07-06 16:16:24 深夜i     23     0
C++ 贪吃蛇游戏 代码实现 控制流程 策略设计

贪吃蛇游戏是一款经典的游戏,在很多人的童年回忆中都有过一次或多次的玩耍经历。现在,我们可以通过使用C++编写贪吃蛇游戏来一探究竟。

首先,我们需要了解一下贪吃蛇游戏的规则。贪吃蛇游戏的主要目标是让蛇不断吃食物并且不触碰到边框或者自己的身体,一旦碰到则游戏结束。在游戏中需要按照规定的方式控制蛇的移动以及食物的生成。

其次,我们需要实现游戏的初始化操作。这包括设置窗口大小、蛇的初始位置、食物的生成等基础操作。代码示例如下:

#include<conio.h>
#include<time.h>
#include<iostream>
#include<windows.h>
#include<vector>
using namespace std;
const int HEIGHT = 20;
const int WIDTH = 40;
struct Posy;
;
struct Snake
  vector<Pos> vec;
  int dir;
Snake;
Pos fruit;
bool finish = false;
int score = 0;
void init(){
  Snake.vec.push_back(Pos(10));
  Snake.vec.push_back(Pos(3));
  Snake.vec.push_back(Pos(2));
  Snake.vec.push_back(Pos(10));
  Snake.dir = 72;
  fruit = Pos({rand() % (WIDTH - 2) + 1, rand() % (HEIGHT - 2) + 1});
}
void draw(){
  system("cls"); //清屏
  for(int i = 0; i < HEIGHT; i++){
    for(int j = 0; j < WIDTH; j++){
      if(i == 0 || i == HEIGHT - 1) //上下边框
        cout << "#";
      else if(j == 0 || j == WIDTH - 1) //左右边框
        cout << "#";
      else if(Snake.vec[0].x == j && Snake.vec[0].y == i) //蛇头
        cout << "0";
      else if(fruit.x == j && fruit.y == i) //食物
        cout << "*";
      else{ //蛇身
        bool flag = false;
        for(int k = 1; k < Snake.vec.size(); k++)
          if(Snake.vec[k].x == j && Snake.vec[k].y == i)
            cout << "o";
            flag = true;
          
        if(!flag) cout << " ";
      }
    }
    cout << endl;
  }
  cout << "score: " << score << endl;
}
void update(){
  int nx = Snake.vec[0].x, ny = Snake.vec[0].y;
  if(Snake.dir == 72) ny--; //上
  if(Snake.dir == 80) ny++; //下
  if(Snake.dir == 75) nx--; //左
  if(Snake.dir == 77) nx++; //右
  if(nx >= WIDTH - 1 || nx < 1 || ny >= HEIGHT - 1 || ny < 1) //触碰到边框
    finish = true;
    return;
  
  for(int i = 1; i < Snake.vec.size(); i++) //触碰到身体
    if(nx == Snake.vec[i].x && ny == Snake.vec[i].y)
      finish = true;
      return;
    
  if(nx == fruit.x && ny == fruit.y){ //吃到食物
    score++;
    Snake.vec.insert(Snake.vec.begin(),Pos(ny));
    fruit = Pos({rand() % (WIDTH - 2) + 1, rand() % (HEIGHT - 2) + 1});
  }
  else{ //蛇前进
    for(int i = Snake.vec.size() - 1; i > 0; i--)
      Snake.vec[i] = Snake.vec[i - 1];
    Snake.vec[0] = Pos(nx);
  }
}
void getInput(){
  Sleep(250); //控制移动速度
  if (_kbhit()) //检测键盘输入
  {
    int c = _getch();
    if (c == 72 && Snake.dir != 80) Snake.dir = c; //上
    if (c == 80 && Snake.dir != 72) Snake.dir = c; //下
    if (c == 75 && Snake.dir != 77) Snake.dir = c; //左
    if (c == 77 && Snake.dir != 75) Snake.dir = c; //右
  }
}
int main(){
  srand(time(NULL));
  init();
  while(!finish){
    draw();
    getInput();
    update();
  }
}

以上代码实现了贪吃蛇游戏的初始化、绘制界面、控制移动、检测碰撞等基础操作。在实际测试中,运行结果能够正常显示,且符合游戏规则。

总结来说,贪吃蛇游戏是一款经典的游戏,实现起来也很有趣。通过对C++的学习和掌握,我们可以更加深入地理解游戏的实现原理,从而更好地掌握计算机科学和编程的知识。

  
  

评论区