21xrx.com
2025-04-08 04:49:39 Tuesday
文章检索 我的文章 写文章
C++编写贪吃蛇游戏:完整代码
2023-07-05 11:09:07 深夜i     18     0
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++语言编写游戏有一个更深入的了解。

  
  

评论区