贪吃蛇c++代码

贪吃蛇c++代码:
//简单说明:英文输入法模式,进入后选择3种级别,速度不同,达到最高速自闭直接死亡,wasd操作,非多线程模式,单字母识别,即按照你的输入顺序识别,可供小白参考,大佬也可那做多线程模式修改。有bug欢迎讨论可以加qq:1649101712.多线程大佬有想法的的话可以交流,去年的自主大作业,之后c++学的就比较少了。初稿,格式可能不太对,欢迎来访拿.cpp文件。
#include
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 (m0 || n0){
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 篇原创文章 · 获赞 0 · 访问量 2

猜你喜欢

转载自blog.csdn.net/weixin_43907381/article/details/105523166