先上链接
https://www.youtube.com/watch?v=W1e5wO7XR2w&list=RDCMUCqXrJmvJAvFnGyLGSBnk45g
实现效果
项目代码
#include <iostream>
#include <conio.h>
#include<windows.h>
using namespace std;
bool gameOver;
const int width =40;
const int height=20;
int x,y, fruitX,fruitY,score;
int tailX[100],tailY[100];
int ntail;
enum eDirection {STOP = 0,LEFT,RIGHT,UP,DOWN};
eDirection dir;
void Setup(){
gameOver = false;
dir = STOP;
x = width / 2;
y = height / 2;
fruitX = rand() % width;
fruitY = rand() % height;
score = 0;
}
void Draw(){
system("cls");
for(int i=0 ;i<width+2;i++)
cout<<"#";
cout<<endl;
for(int i=0 ; i<height;i++){
for(int j=0;j<width;j++){
if(j==0)
cout<<"#";
if(i==y&&j==x)
cout<<"O";
else if(j==fruitX&&i==fruitY)
cout<<"F";
else
{
bool print =false;
for(int k =0 ; k<ntail ; k++)
{
if(tailX[k]==j&&tailY[k]==i)
{
cout<<"o";
print = true;
}
}
if(!print)
cout<<" ";
}
if(j==width-1)
cout<<"#";
}
cout<<endl;
}
for(int i=0;i<width+2;i++)
cout<<"#";
cout<<endl;
cout<<"Score:"<<score<<endl;
}
void Input(){
if(_kbhit()){
switch(_getch()){
case 'a':
dir= LEFT;
break;
case 'd':
dir=RIGHT;
break;
case 'w':
dir=UP;
break;
case 's':
dir=DOWN;
break;
case 'x':
gameOver= true;
break;
}
}
}
void Logic(){
int prevX = tailX[0];
int prevY = tailY[0];
int prev2X,prev2Y;
tailX[0] = x;
tailY[0] = y;
for(int i = 1 ; i<ntail; i++){
prev2X=tailX[i];
prev2Y=tailY[i];
tailX[i]=prevX;
tailY[i]=prevY;
prevX = prev2X;
prevY = prev2Y;
}
switch(dir){
case LEFT:
x--;
break;
case RIGHT:
x++;
break;
case UP:
y--;
Sleep(40);
break;
case DOWN:
y++;
Sleep(40);
break;
default:
break;
}
if(x > width || x<0 || y > height || y<0 )
gameOver=true;
for( int i=0 ;i<ntail ; i++)
if(tailX[i]==x&&tailY[i]==y)
gameOver=true;
if( x==fruitX && y==fruitY){
score+=10;
fruitX = rand() %width;
fruitY = rand() %height;
ntail++;
}
}
int main()
{
Setup();
while(!gameOver){
Draw();
Input();
Logic();
Sleep(30);
}
return 0;
}