#include<bits/stdc++.h>

using namespace std;

const int width=20;

const int height=20;

int x,y;

bool gameOver;

int fruitX,fruitY;

int score;

int tailX[100];

int tailY[100];

int tailLen;

enum Dir{STOP=0,LEFT,RIGHT,UP,DOWN};

Dir dir;

void SpawnFruit(){

fruitX =rand()%width;

fruitY =rand()%height; }

void Draw(){

COORD coord;

coord.X=0;

coord.Y=0;

SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),coord);

for(int i=0;i<width+2;i++)

cout<<"#";
	
cout<<endl;

for(int i=0;i<height;i++){

cout<<"#";
	
for(int j=0;j<width;j++){
	
  bool printTail = false;
		
  if(i==y&&j==x){
		
    cout<<"O";
			
    printTail=true;
		
  }
		
  else if(i==fruitY&&j==fruitX){
		
    cout<<"F";
			
    printTail=true;
		
  }
		
  else{
		
    for(int k=0;k<tailLen;k++){
			
      if(tailY[k]==i&&tailX[k]==j){
				
        cout<<"o";
					
        printTail = true;
					
        break; 
				
      }
			
    }
			
    if(!printTail)
			
    cout<<" ";
		
  }
	
}
	
cout<<"#"<<endl; 

}

for(int i=0;i<width+2;i++)

cout<<"#";

cout<<endl;

cout<<"苹果数量:"<<score<<endl;

}

void Input(){

if(_kbhit()){

switch(_getch()){
	
  case 'a':
		
    if(dir!=RIGHT)dir=LEFT;
			
    break;
		
  case 'd':
		
    if(dir!=LEFT)dir=RIGHT;
			
    break;
		
  case 'w':
		
    if(dir!=DOWN)dir=UP;
			
    break;
		
  case 's':
		
    if(dir!=UP)dir=DOWN;
			
    break;
		
  case 'x':
		
    gameOver=true;
			
    break;

}

}

}

void Logic(){

int prevX=tailX[0];

int prevY=tailY[0];

tailX[0]=x;

tailY[0]=y;

int tempX,tempY;

for(int k=1;k<tailLen;k++){

tempX=tailX[k];
	
tempY=tailY[k];
	
tailX[k]=prevX;
	
tailY[k]=prevY;
	
prevX=tempX;
	
prevY=tempY;

}

switch(dir){

case LEFT:x--;break;
	
case RIGHT:x++;break;
	
case UP:y--;break;
	
case DOWN:y++;break;
	
case STOP:break;

}

if(x<0||x>=width||y<0||y>=height){

gameOver=true;

}

for(int k=0;k<tailLen;k++){

if(x==tailX[k]&&y==tailY[k]){
	
  gameOver=true;
	
}

}

if(xfruitX&&yfruitY){

score++;
	
tailLen++;
	
SpawnFruit();

}

}

int main(){

srand((unsigned int)time(NULL));

CONSOLE_CURSOR_INFO cursorInfo;

cursorInfo.dwSize =1;

cursorInfo.bVisible = FALSE;

SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursorInfo);

x=10;

y=10;

dir=STOP;

gameOver=false;

score = 0;

SpawnFruit();

while(!gameOver){

Input();
	
Logic();
	
Draw();
	
Sleep(150);

}

cout<<"游戏结束!总共收集苹果:"<<score<<endl;

return 0;

}

2 comments

  • @ 2026-9-17 21:03:19

    大家快来看一看,有什么问题告诉我我看看我能不能改正

    • @ 2026-9-17 21:03:19

      大家快来看一看,有什么问题告诉我我看看我能不能改正

    • 1