贪吃蛇代码(c++)

这是一个使用C++编写的贪吃蛇游戏程序。程序包含了游戏的模式选择、用户界面设计、游戏流程控制、蛇的移动、得分显示、边界判断等功能。玩家可以通过键盘输入控制蛇的方向,游戏难度可以通过选择不同的模式来调整。当蛇头碰到边界或者自身身体时,游戏结束。游戏中的随机方块用于蛇的增长,每吃到一个方块,蛇的长度会增加并且速度会略微提升。
摘要由CSDN通过智能技术生成

#include<iostream>
using namespace std;
#include<conio.h>
#include<windows.h>
#include <stdlib.h>
#include <time.h>

#define line 42
#define col 27
#define left 1
#define right 2
#define    up 3
#define down 4

int level(void);//模式选择
void basic(void);//设计用户界面
void game(void);//游戏大致过程
void rungame(void);//游戏运行's cause
void randomPosition(void);//生成随机方块
//更新snake头坐标
bool cP(char input);//2.用户操作
void direction(void);//1.用户 NONE 操作
void displayScore(void);//打印分数
void streng(void);//判断snake是否增长
void move(void);//snake移动一次
bool judge(void);//判断是否game over!
void renew(void);//更新snake的长度
void littleRenew(void);
void placeCursor(int x , int y);//移动光标位置

int lev;
int snack[500][2];//存储snake每一点的位置
int num=1;//存储snake长度
int mem[22][27]={0};//存储snake以及随机黑快
int player=1;//游戏运行标识
int add=0;//是否增长标识
int head[2]={10,11};//snake head position
int flag=left;//direction

int main()
{
    basic();
    game();
    return 0;
}

//游戏大致过程
void game(void)
{
    char input;
    lev=level()*100;
    snack[0][0]=11;
    snack[0][1]=10;
    randomPosition();
    while(player){
        
        _sleep(lev);
        
        if (kbhit()){
            input=getch();
            if (cP(input)){
                rungame();
            }
            else {
                direction();
                rungame();
            }

        }

        else {
            direction();
            rungame();
        }
        displayScore();
    }

}

//打印分数
void displayScore()
{
    placeCursor(60,15);
    cout<<"you sorce is :"<<(num-1)*100;
}


//游戏运行's cause
void rungame(void)
{
    //judge()边界判断
    if (!judge() || mem[head[0]][head[1]]==1){
        move();
        player=0;
        placeCursor(16,15);
        cout<<"G a m e   o v e r!";}
    else {
        streng();//判断snake是否增长
        if (!add){
        move();
        renew();
        }
        else{
            renew();
            add=0;
        }
    }    
}

//生成随机方块
void randomPosition(void)
{
    srand((unsigned)time(NULL));
    int m=0,n=0;
    while (m==0 || n==0){
        m=rand()%21;
        n=rand()%26;
        if (mem[m][n]!=1 && m!=0 && n!=0)
            break;
    }
    placeCursor(45,12);
    placeCursor(2*m,n);
    mem[m][n]=2;
    cout<<"▇";
}

//判断snake是否增长
void streng(void)
{
    if (mem[head[0]][head[1]]==2){
        num+=1;
        add=1;
        if (num%5==0)
            lev-=50;
    }
}

//更新snake的长度
void renew(void)
{
    mem[head[0]][head[1]]=1;
    if (add){
        randomPosition();
        littleRenew();
    }

    else{
        mem[snack[num-1][0]][snack[num-1][1]]=0;
        littleRenew();
    }
    snack[0][0]=head[0];
    snack[0][1]=head[1];
}

void littleRenew(void)
{
    for (int p=num-1;p>0;p--){
            snack[p][1]=snack[p-1][1];
            snack[p][0]=snack[p-1][0];}
}

//判断是否game over!
bool judge(void)
{
    if (head[0]==0 || head[0]==21 || head[1]==0 || head[1]==26)
        return 0;
    else
        return 1;
}

//移动光标位置
void placeCursor(int a, int b)
{
    
    HANDLE hort;
    COORD coord;
    coord.X=a;
    coord.Y=b;
    hort=GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleCursorPosition(hort,coord);
}

//设计用户界面
void basic(void)
{
    for (int k=0;k<line+2;k+=2){
        placeCursor(k,0);
        cout<<'*';
        placeCursor(k,col-1);
        cout<<'*';
    }
    for (int o=1;o<col-1;o++){
        placeCursor(0,o);
        cout<<'*';
        placeCursor(line,o);
        cout<<'*';
    }
}

//模式选择
int level(void)
{
    int le;
    placeCursor(60,10);
    cout<<"选择难度 : "<<"\t1.困难"<<"\t2.一般"<<"\t3.简单";
    while (1){
        cin>>le;
        if (le == 1)
            return 2;
        else if (le == 2)
            return 5;
        else if (le == 3)
            return 7;
        else 
            cout<<"Please input right num";
    }
}

//更新snake头坐标

//1.用户 NONE 操作
void direction(void)
{
    if (flag == left)
        head[0]--;
    else if (flag == right)
        head[0]++;
    else if (flag == up)
        head[1]--;
    else 
        head[1]++;
}

//2.用户操作
bool cP(char input)
{
    if (input == 'a' && flag!=right){
        head[0]--;flag=left;return 1;}
    else if ( input == 'd' && flag!=left){
        head[0]++;flag=right;return 1;}
    else if (input == 'w' && flag!=down){
        head[1]--;flag=up;return 1;}
    else if ( input == 's' && flag!=up){
        head[1]++;flag=down;return 1;}
    return 0;
}

//snake移动一次
void move(void)
{
    placeCursor(snack[num-1][0]*2,snack[num-1][1]);
    cout<<"  ";
    placeCursor(head[0]*2,head[1]);
    cout<<"▇";
}
 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值