21xrx.com
2024-12-22 20:21:30 Sunday
登录
文章检索 我的文章 写文章
C++编写贪吃蛇游戏:完整代码
2023-07-05 11:09:07 深夜i     --     --
C++ 贪吃蛇游戏 完整代码 编写 游戏开发

贪吃蛇游戏是一款经典的单人游戏,其简单的操作和挑战性的玩法吸引了无数玩家。本文将介绍如何使用C++语言编写一款简单的贪吃蛇游戏,并提供完整的代码。

在C++中编写贪吃蛇游戏需要使用图形库,常见的有Windows.h和graphics.h。本文使用的是graphics.h,该库提供了一系列的图形绘制函数,包括点、线、矩形、圆、文字等。

完整的代码如下:


#include<graphics.h>

#include<iostream>

#include<conio.h>

#include<time.h>

using namespace std;

const int N=100;//地图大小

const int M=100;

int x[N],y[M];//存储蛇身的位置

int length=3;//蛇身的长度

int speed=200;//蛇的速度

int dir=1;//蛇的方向,1为右,2为下,3为左,4为上

int food_x,food_y;//食物的坐标

bool gameover=false;//游戏是否结束

int score=0;//分数

//初始化蛇身

void InitSnake(){

  x[0]=N/2,y[0]=M/2;

  x[1]=N/2,y[1]=M/2+1;

  x[2]=N/2,y[2]=M/2+2;

  setfillcolor(YELLOW);

  fillcircle(x[0]*10+5,y[0]*10+5,5);

  setfillcolor(RED);

  fillcircle(x[1]*10+5,y[1]*10+5,5);

  fillcircle(x[2]*10+5,y[2]*10+5,5);

}

//绘制食物

void drawfood(){

  setfillcolor(GREEN);

  fillcircle(food_x*10+5,food_y*10+5,5);

}

//生成食物

void generfood(){

  srand(time(NULL));

  food_x=rand()%(N-2)+1;

  food_y=rand()%(M-2)+1;

  drawfood();

}

//移动蛇

void MoveSnake(){

  //清除尾巴

  setfillcolor(BLACK);

  fillcircle(x[length-1]*10+5,y[length-1]*10+5,5);

  for(int i=length-1;i>=1;i--){

    x[i]=x[i-1];

    y[i]=y[i-1];

  }

  //移动头部

  if(dir==1)//右

    x[0]++;

  else if(dir==2)//下

    y[0]++;

  else if(dir==3)//左

    x[0]--;

  else if(dir==4)//上

    y[0]--;

  //检测是否撞墙

  if(x[0]<=0 || x[0]>=N-1 || y[0]<=0 || y[0]>=M-1)

    gameover=true;

  //检测是否吃到食物

  if(x[0]==food_x && y[0]==food_y){

    length++;

    score+=10;

    setfillcolor(RED);

    fillcircle(x[length-1]*10+5,y[length-1]*10+5,5);

    generfood();

  }

  //检测是否撞到自己的身体

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

    if(x[0]==x[i] && y[0]==y[i])

      gameover=true;

  }

  //绘制头部

  setfillcolor(YELLOW);

  fillcircle(x[0]*10+5,y[0]*10+5,5);

  //更新分数

  char strscore[10];

  settextstyle(20,0,"宋体");

  setcolor(WHITE);

  sprintf(strscore,"Score:%d",score);

  outtextxy(0,0,strscore);

}

//游戏循环

void loopgame(){

  while(!gameover){

    delay(speed);

    if(kbhit()){//判断有没有按下键盘

      int c = getch();

      if(c==224){//如果按下方向键,则需要继续获取一次键值

        c = getch();

        if(c==72 && dir!=2)//向上

          dir=4;

        else if(c==75 && dir!=1)//向左

          dir=3;

        else if(c==80 && dir!=4)//向下

          dir=2;

        else if(c==77 && dir!=3)//向右

          dir=1;

      }else if(c==' '){//如果按下空格键,则暂停游戏

        bool flag=true;

        while(flag){

          int t=getch();

          if(t==' '){

            flag=false;

            break;

          }

        }

      }

    }

    MoveSnake();

  }

  //游戏结束

  settextstyle(50,0,"宋体");

  setcolor(RED);

  outtextxy(N*5-120,M*5-100,"Game Over!");

}

int main(){

  initgraph(N*10,M*10);//初始化图形库

  setbkcolor(BLACK);//设置背景色

  cleardevice();//清空画布

  settextcolor(WHITE);//设置文字颜色

  generfood();//生成食物

  InitSnake();//初始化蛇身

  loopgame();//游戏循环

  getch();//防止闪屏退出

  closegraph();//关闭图形库

  return 0;

}

实现思路如下:

1. 初始化图形库,并设置背景色和文字颜色;

2. 生成食物,并初始化蛇身;

3. 进入游戏循环,每个循环中,判断是否按下键盘或者空格,如果按下键盘,则判断方向是否合法,并更新方向;如果按下空格键,则暂停游戏;然后移动蛇,判断是否撞墙、是否吃到食物、是否撞到自己的身体等,更新分数和当前蛇身的状态,并重新绘制头部和食物;

4. 如果游戏结束,则显示游戏结束的提示信息,并退出循环;

5. 关闭图形库。

在绘制图形时,我们使用了 graphics.h 提供的一些图形绘制函数,例如 fillcircle()、outtextxy()、setfillcolor()、settextstyle() 等。

这段代码实现了一个简单的贪吃蛇游戏,运行代码后,可以使用方向键控制蛇的方向,空格键暂停游戏,ESC键退出游戏。玩家可以通过吃食物来增加分数,蛇的长度也会增加,如果撞到墙壁或者自己的身体,则游戏结束。玩家的分数将会在游戏进行过程中一直显示在屏幕左上角。

总的来说,贪吃蛇游戏是一款非常简单易懂的游戏,对于初学者来说是一个很好的练手项目。通过本文的介绍,相信读者可以对如何用C++语言编写游戏有一个更深入的了解。

  
  

评论区

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