不知哪里出了问题,这条蛇一往左走就死
#include<iostream>
#include<windows.h>
#include<conio.h>
#include<time.h>
#include<stdlib.h>
using namespace std;
int GameOver=0;
struct Body
{int x,y;
Body *next;
};
void SetPos(int i,int j)
{
COORD pos={i-1,j-1};
HANDLE Out=GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(Out,pos);
}
class Sneak
{
private:
Body *head;
int Direction;
int Count;
int Speed;
int FoodExist;
int Food_x;
int Food_y;
public:
Sneak(int a=3,int b=4,int c=1,int d=0)
{
FoodExist=d;
Body *temp1,*temp2;
head=new(Body);
head->x=4;
head->y=2;
temp1=new(Body);
temp1->x=3;
temp1->y=2;
temp2=new(Body);
temp2->x=2;
temp2->y=2;
head->next=temp1;
temp1->next=temp2;
temp2->next=NULL;
Direction=b;
Count=a;
Speed=c;
}
void Map();
void Paint();
void Food();
int Over();
void Gaming();
void Move();
};
void Sneak::Map()
{
int i=1;
for(i=1;i<=50;i++)
{
SetPos(i,1);
cout<<"-";
}
for(i=2;i<=25;i++)
{
SetPos(1,i);
cout<<"|";
SetPos(50,i);
cout<<"|";
}
for(i=1;i<=50;i++)
{
SetPos(i,25);
cout<<"-";
}
SetPos(54,3);
cout<<"贪吃蛇";
SetPos(54,5);
cout<<"长度"<<Count;
SetPos(54,7);
cout<<"LEVEL:"<<Speed;
}
void Sneak::Food()
{
Body *p;
int InBody=0;
srand((int)time(0));
while(1)
{
Food_x=rand()%48+2;
Food_y=rand()%23+2;
p=head;
while(p!=NULL)
{
if(p->x==Food_x&&p->y==Food_y)
{InBody=1;
break;
}
p=p->next;
}
if(InBody==0)break;
InBody=0;
}
}
int Sneak::Over()
{
Body *p;
p=head;
if((head->x)>=50||(head->y)<=1||(head->y)>=25)
return 1;
p=head->next;
while(p!=NULL)
{
if((head->x==p->x)&&head->y==p->y)return 1;
p=p->next;
}
return 0;
}
void Sneak::Paint()
{
Body *p;
p=head;
while(p!=NULL)
{
SetPos(p->x,p->y);
cout<<"*";
p=p->next;
}
SetPos(Food_x,Food_y);
cout<<"*";
}
void Sneak::Move()
{
Body *New;
New=new(Body);
if(Direction==1)
{
New->x=head->x;
New->y=head->y-1;
New->next=head;
head=New;
}
if(Direction==2)
{
New->x==head->x-1;
New->y=head->y;
New->next=head;
head=New;
}
if(Direction==3)
{
New->x=head->x;
New->y=head->y+1;
New->next=head;
head=New;
}
if(Direction==4)
{
New->x=head->x+1;
New->y=head->y;
New->next=head;
head=New;
}
}
void Sneak::Gaming()
{
system("cls");
char x;
Body *p;
Map();
Paint();
while(1)
{ if(_kbhit())
{
x=_getch();
if(x=='W'||x=='w'&&Direction==3)Direction=1;
if(x=='S'||x=='s'&&Direction==1)Direction=3;
if(x=='A'||x=='a'&&Direction==4)Direction=2;
if(x=='D'||x=='d'&&Direction==2)Direction=4;
while(_kbhit())_getch();
}
if(FoodExist==0)
{
Food();
FoodExist=1;
}
Move();
if(head->x==Food_x&&head->y==Food_y)
{FoodExist=0;
Count++;
SetPos(54,5);
cout<<"长度:"<<Count;
if(Count%10==0)
{Speed++;
SetPos(54,7);
cout<<"LEVEL:"<<Speed;
}
if(Speed==10)break;
}
Paint();
if(FoodExist==1)
{
p=head;
while((p->next)->next!=NULL)p=p->next;
SetPos(p->next->x,p->next->y);
cout<<" ";
delete(p->next);
p->next=NULL;
}
if(Over())break;
Sleep(500-Speed*50);
}
system("cls");
if(Speed==10)
{
SetPos(25,25);
cout<<"碉堡-_-||你通关了"<<endl;
system("pause");
}
else{SetPos(25,10);
cout<<"-0-沙雕,你挂了,你的小蛇才这么长:"<<cout<<endl;
system("pause");
}
}
int main()
{
Sneak game;
system("cls");
cout<<"*****************************************************"<<endl;
cout<<"* 贪吃蛇 *"<<endl;
cout<<"*****************************************************"<<endl;
cout<<"* 说明 *"<<endl;
cout<<"* W,A,S,D控制移动 *"<<endl;
cout<<"* 每10节蛇身升一级,并提高速度,10级通关 *"<<endl;
cout<<"*****************************************************"<<endl;
cout<<"********* 任意键开始 **********************"<<endl;
_getch();
game.Gaming();
return 0;
}