贪吃蛇小游戏 C++实现

Posted Michael-zhou

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了贪吃蛇小游戏 C++实现相关的知识,希望对你有一定的参考价值。

#include<iostream>
#include<windows.h>
#include<time.h>
#include<conio.h>
using namespace std;
// 刷新当前屏幕
inline void Refresh(char q[][22], int grade, int gamespeed)
    system("cls");     //  清屏
 int i,j;
 cout << endl;
 for(i=0;i<22;i++)
     cout << "\\t";
  for(j=0;j<22;j++)
   cout<<q[i][j]<<' ';    //  输出贪吃蛇棋盘
        if(i==0) cout << "\\t等级为:" << grade;
        if(i==4) cout << "\\t自动前进时间";
        if(i==6) cout << "\\t间隔为:" << gamespeed << "ms";
  cout<<endl;
 

int main()
    char tcsQipan[22][22];     //  贪吃蛇棋盘是一个二维数组(如22*22,包括墙壁)
    int i,j;
    for(i=1;i<=20;i++)
        for(j=1;j<=20;j++)
            tcsQipan[i][j]=' ';     //     初始化贪吃蛇棋盘中间空白部分
    for(i=0;i<=21;i++)
        tcsQipan[0][i] = tcsQipan[21][i] = '-';      //初始化贪吃蛇棋盘上下墙壁
    for(i=1;i<=20;i++)
        tcsQipan[i][0] = tcsQipan[i][21] = '|';      //初始化贪吃蛇棋盘左右墙壁
    int tcsZuobiao[2][100];     //蛇的坐标数组
    for(i=0; i<4; i++)
        tcsZuobiao[0][i] = 1;
        tcsZuobiao[1][i] = i + 1;
    
    int head = 3,tail = 0;
    for(i=1;i<=3;i++)
        tcsQipan[1][i]='*';    //蛇身
    tcsQipan[1][4]='#';       //蛇头
    int x1, y1;           // 随机出米
    srand(time(0));
    do
  x1=rand()%20+1;
  y1=rand()%20+1;
 while(tcsQipan[x1][y1]!=' ');
 tcsQipan[x1][y1]='*';
 cout<<"\\n\\n\\t\\t贪吃蛇游戏即将开始 !"<<endl;//准备开始;;
 long start;
    int grade = 1, length = 4;
    int gamespeed = 500;  //前进时间间隔
 for(i=3;i>=0;i--)
  start=clock();
  while(clock()-start<=1000);
  system("cls");
  if(i>0)
   cout << "\\n\\n\\t\\t进入倒计时:" << i << endl;
  else
   Refresh(tcsQipan,grade,gamespeed);
 
    int timeover;
    char direction = 77;  // 初始情况下,向右运动
    int x,y;
    while(1)
        timeover = 1;
        start = clock();
        while((timeover=(clock()-start<=gamespeed))&&!kbhit());
             //如果有键按下或时间超过自动前进时间间隔则终止循环
        if(timeover)
            getch();direction = getch();
        
        switch(direction)
        case 72: x= tcsZuobiao[0][head]-1; y= tcsZuobiao[1][head];break;     // 向上
        case 80: x= tcsZuobiao[0][head]+1; y= tcsZuobiao[1][head];break;      // 向下
        case 75: x= tcsZuobiao[0][head]; y= tcsZuobiao[1][head]-1;break;      // 向左
        case 77: x= tcsZuobiao[0][head]; y= tcsZuobiao[1][head]+1;           // 向右
        
        if(!(direction==72||direction==80||direction==75 ||direction==77))   //  按键非方向键
            cout << "\\tGame over!" << endl;return 0;
        
        if(x==0 || x==21 ||y==0 || y==21)   // 碰到墙壁
            cout << "\\tGame over!" << endl;return 0;
        
        if(tcsQipan[x][y]!=' '&&!(x==x1&&y==y1)) //   蛇头碰到蛇身
            cout << "\\tGame over!" << endl;return 0;
        
        if(x==x1 && y==y1)      //  吃米,长度加1
            length ++;
            if(length>=8)
                length -= 8;
                grade ++;
                if(gamespeed>=200)
                    gamespeed = 550 - grade * 50; // 改变自动前进时间间隔
            
            tcsQipan[x][y]= '#';
            tcsQipan[tcsZuobiao[0][head]][tcsZuobiao[1][head]] = '*';
            head = (head+1)%100;
            tcsZuobiao[0][head] = x;
            tcsZuobiao[1][head] = y;
            do
            
                x1=rand()%20+1;
                y1=rand()%20+1;
            while(tcsQipan[x1][y1]!=' ');
            tcsQipan[x1][y1]='*';
            Refresh(tcsQipan,grade,gamespeed);
        
        else       //  不吃米
            tcsQipan [tcsZuobiao[0][tail]][tcsZuobiao[1][tail]]=' ';
            tail=(tail+1)%100;
            tcsQipan [tcsZuobiao[0][head]][tcsZuobiao[1][head]]='*';
            head=(head+1)%100;
            tcsZuobiao[0][head]=x;
            tcsZuobiao[1][head]=y;
            tcsQipan[tcsZuobiao[0][head]][tcsZuobiao[1][head]]='#';
            Refresh(tcsQipan,grade,gamespeed);
        
    
    return 0;

以上是关于贪吃蛇小游戏 C++实现的主要内容,如果未能解决你的问题,请参考以下文章

结对-贪吃蛇游戏-结对项目总结

C++入门——实现贪吃蛇游戏

华为OD机试真题 Python 实现贪吃蛇

结队-贪吃蛇游戏-项目进度

javascript实现游戏贪吃蛇

结对-贪吃蛇-需求分析