基于单线程C++贪吃蛇游戏代码

贪吃蛇c++代码:
//简单说明:英文输入法模式,进入后选择3种级别,速度不同,达到最高速自闭直接死亡,wasd操作,非多线程模式,单字母识别,即按照你的输入顺序识别,可供小白参考,大佬也可那做多线程模式修改。有bug欢迎讨论可以加qq:1649101712.多线程大佬有想法的的话可以交流,去年的自主大作业,之后c++学的就比较少了。初稿,格式可能不太对,欢迎来访拿.cpp文件。
————————————————
版权声明:本文为CSDN博主「weixin_43907381」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_43907381/article/details/105523166

#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 篇原创文章 · 获赞 0 · 访问量 2

猜你喜欢

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