*是果子(加长度)
#是墙(输掉)
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;
}