21xrx.com
2024-11-05 18:44:16 Tuesday
登录
文章检索 我的文章 写文章
C++编程:贪吃蛇代码
2023-06-28 03:43:42 深夜i     --     --
C++编程 贪吃蛇 代码

贪吃蛇作为经典的游戏之一,在多年来一直受到玩家的喜欢。而在C++编程中,也可以通过编写贪吃蛇的代码来深入学习该编程语言的用法和思维方式。下面将介绍一份简单的C++贪吃蛇代码。

该代码使用了基本的控制流程和数据结构,主要分为两部分:游戏初始化和游戏循环。在游戏初始化部分,定义了蛇的初始位置、长度、方向等信息,并将地图初始化为一个二维数组。在游戏循环部分,通过监听键盘输入来改变蛇的方向,并利用循环来不断更新蛇的位置和绘制地图,实现了游戏的基本功能。

同时,在代码中还涉及到了一些C++的特有语法和函数,如vector(用于存储蛇的身体)、rand(用于生成随机数)、system(用于清屏、暂停游戏等操作)等。

虽然该代码相对简单,但是通过不断修改和拓展,可以将其转变为更为复杂的贪吃蛇游戏,甚至可以运用到类、继承、多态等高级编程概念中。因此,对于正在学习C++的初学者来说,编写一份贪吃蛇代码不仅有助于掌握基本语法和理解编程思维,还可以提高创造力和逻辑思维能力。

最后,为了鼓励大家动手编程,附上该代码的简要版,供参考和学习:

#include

#include

#include

#include

#include

using namespace std;

const int MAXN=20;

char map[MAXN][MAXN];

enum DirectionLEFTdir;

struct Pointy;

;

vector position;

void init(){

  dir=RIGHT;

  Point head;

  head.x=1,head.y=1;

  position.push_back(head);

  for(int i=0;i

    for(int j=0;j

      if(i==0||j==0||i==MAXN-1||j==MAXN-1){

        map[i][j]='*';

      }

      else{

        map[i][j]=' ';

      }

    }

  }

}

void drawMap(){

  system("cls");

  for(int i=0;i

    for(int j=0;j

      cout<

    }

    cout<

  }

}

void move(){

  Point head=position[position.size()-1];

  Point tail=position[0];

  position.erase(position.begin());

  if(dir==UP)

    head.y--;

  if(dir==DOWN){

    head.y++;

  }

  if(dir==LEFT)

    head.x--;

  if(dir==RIGHT){

    head.x++;

  }

  position.push_back(head);

  map[head.y][head.x]='@';

  map[tail.y][tail.x]=' ';

}

void changeDir(){

  if(_kbhit()){

    switch(_getch())

      case 'w':dir=UP;break;

      case 's':dir=DOWN;break;

      case 'a':dir=LEFT;break;

      case 'd':dir=RIGHT;break;

  }

}

void check(){

  Point head=position[position.size()-1];

  if(head.x==0||head.y==0||head.x==MAXN-1||head.y==MAXN-1){

    cout<<"game over"<

    exit(0);

  }

  for(int i=0;i

    if(head.x==position[i].x&&head.y==position[i].y){

      cout<<"game over"<

      exit(0);

    }

  }

}

void randGoal(){

  srand(time(NULL));

  Point goal;

  while(1){

    goal.x=rand()%(MAXN-2)+1;

    goal.y=rand()%(MAXN-2)+1;

    bool flag=true;

    for(int i=0;i

      if(goal.x==position[i].x&&goal.y==position[i].y)

        flag=false;

        break;

    }

    if(flag)

      break;

  }

  map[goal.y][goal.x]='o';

}

int main(){

  init();

  randGoal();

  while(1){

    drawMap();

    changeDir();

    move();

    check();

    if(position[position.size()-1].x==map[0].size()-2&&position[position.size()-1].y==map[0].size()-2)

      cout<<"You win!"<

      break;

    if(map[position[position.size()-1].y][position[position.size()-1].x]=='o'){

      position.insert(position.begin(),position[0]);

      randGoal();

    }

    Sleep(100);

  }

  return 0;

}

  
  

评论区

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