- C++
贪吃蛇
- @ 2026-9-10 18:20:20
#include #include<windows.h> #include<conio.h> #include #include 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(iy&&jx){ cout<<"O"; printTail=true; } else if(ifruitY&&jfruitX){ 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(xtailX[k]&&ytailY[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; }