21xrx.com
2024-11-05 16:25:22 Tuesday
登录
文章检索 我的文章 写文章
贪吃蛇C++代码 完整版本
2023-07-03 06:26:39 深夜i     --     --
贪吃蛇 C++代码 完整版本

贪吃蛇是一款历史悠久的经典游戏,很多人都会在童年时期留下美好的回忆。如今,贪吃蛇已经成为了程序员们练手的绝佳项目,本文将介绍一份完整的C++版贪吃蛇代码。

首先我们看一下程序的基本结构:


#include <iostream>

#include <conio.h>

#include <stdlib.h>

#include <time.h>

#include <windows.h>

using namespace std;

const int width = 20;  //地图宽度

const int height = 20; //地图高度

int posX, posY;     //蛇头坐标

int fruitX, fruitY;   //水果坐标

int tailX[100], tailY[100]; //尾部坐标数组

int tailLength = 0;   //尾部长度

int score = 0;     //分数

bool gameOver;     //游戏是否结束

enum Direction STOP = 0; //移动方向枚举类型

Direction dir;     //移动方向

void Setup(){

  gameOver = false;  //初始化

  dir = STOP;

  posX = width / 2;

  posY = height / 2;

  srand(time(NULL)); //随机种子

  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 == posY && j == posX)

        cout << "O";

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

        cout << "F";

      else {

        bool print = false;

        for(int k = 0; k < tailLength; 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], prevY = tailY[0];

  int prev2X, prev2Y;

  tailX[0] = posX;

  tailY[0] = posY;

  for(int i = 1; i < tailLength; i++){

    prev2X = tailX[i];

    prev2Y = tailY[i];

    tailX[i] = prevX;

    tailY[i] = prevY;

    prevX = prev2X;

    prevY = prev2Y;

  }

  switch(dir){  //移动

    case LEFT: posX--; break;

    case RIGHT: posX++; break;

    case UP:  posY--; break;

    case DOWN: posY++; break;

  }

  //判断是否撞墙或者吃到水果

  if(posX < 0 || posX >= width || posY < 0 || posY >= height)

    gameOver = true;

  if(posX == fruitX && posY == fruitY){

    score += 10;

    srand(time(NULL));

    fruitX = rand() % width;

    fruitY = rand() % height;

    tailLength++;

  }

  //检查是否撞到自己的尾巴

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

    if(tailX[i] == posX && tailY[i] == posY)

      gameOver = true;

  }

}

int main(){

  Setup();

  while(!gameOver){

    Draw();

    Input();

    Logic();

    Sleep(50); //延迟50毫秒

  }

  return 0;

}

在这份代码中,程序主要有4个函数:Setup、Draw、Input和Logic。

Setup:初始化游戏,主要设置各变量的初始值,生成随机数等。

Draw:绘制游戏画面,包括绘制蛇、水果和地图边界等。

Input:接受玩家的输入,改变蛇的移动方向。

Logic:处理游戏的逻辑,包括蛇的移动、碰撞检测和分数的计算等。

总的来说,这份代码十分简单易懂,适合初学者练习,同时也可以加以改进以增加游戏性、美化画面等。

在编写贪吃蛇代码的过程中,不仅可以锻炼编程技巧,还可以提升自己的逻辑思维和优化能力。相信不久的将来,你也可以编写出一份自己心仪的贪吃蛇代码。

  
  

评论区

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