来个贪吃蛇
  • 板块灌水区
  • 楼主xizao_haoxuan
  • 当前回复3
  • 已保存回复3
  • 发布时间2024/10/20 21:47
  • 上次更新2024/10/21 09:29:57
查看原帖
来个贪吃蛇
1418678
xizao_haoxuan楼主2024/10/20 21:47

*是果子(加长度)

#是墙(输掉)

O是身体(输掉)

用 WASD操控

c++

#include<bits/stdc++.h>
#include<windows.h>
#include<conio.h>
#include<ctime>
using namespace std; 
char a[1005][1005];
int n=20,m=40;
struct node
{
	int x,y;
};
queue <node> snake; 
void add()
{
	int foodx=0,foody=0;
	while(a[foodx][foody]!='.')
	{
		srand(time(NULL));
		{
			foodx=rand()%(n-1)+1;
			foody=rand()%(n-1)+1;
		}
	}
	a[foodx][foody]='*';
}
int main()
{
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			if(i==1||i==n||j==1||j==m) a[i][j]='#';
			else a[i][j]='.';
		}
	}
	snake.push(node{10,20});a[10][20]='O';
	snake.push(node{11,20});a[11][20]='O';
	snake.push(node{11,21});a[11][21]='O';
	snake.push(node{10,21});a[10][21]='O';
	snake.push(node{9,21});a[9][21]='O';
	//初始
	add();
	add();
	add();
	add();
	add();
	add();//加果子
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			cout<<a[i][j];
		}
		cout<<endl;
	}//打印地图
	char dir='d',r;
	while(1)
	{
		if(kbhit())
		{
			r=getch();
			if((dir=='w'||dir=='s')&&(r=='a'||r=='d'))dir=r;
			else if((dir=='a'||dir=='d')&&(r=='w'||r=='s'))dir=r;
		}
		int tx=snake.back().x;
		int ty=snake.back().y;
		if(dir=='w')tx--;
		else if(dir=='s')tx++;
		else if(dir=='a')ty--;
		else if(dir=='d')ty++;
		if(a[tx][ty]=='#'||a[tx][ty]=='O')
		{
			cout<<"GAME OVER!";
			return 0;
		}
		else if(a[tx][ty]=='.')
		{
			snake.push(node{tx,ty});a[tx][ty]='O';
			a[snake.front().x][snake.front().y]='.';snake.pop();
		}
		else if(a[tx][ty]=='*')
		{
			snake.push(node{tx,ty});a[tx][ty]='O';
			add();//如果果子被吃了,加长度,再随机生成一个
		}
		system("cls");
		cout<<"长度:"<<snake.size()<<endl;
		//显示长度
		for(int i=1;i<=n;i++)
		{
			for(int j=1;j<=m;j++)
			{
				cout<<a[i][j];
			}
			cout<<endl;
		}
		Sleep(800);//等待800毫秒
	}
	return 0;
}
2024/10/20 21:47
加载中...