}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->x)<=1||(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())//_kbhit()判断是否有键盘操作
{
x=_getch();//重缓冲区读出一个字符赋给x
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++;//蛇身+1
SetPos(54,5);
cout<<\"贪吃蛇长度:\"<if(Count%10==0)//每十个蛇身升一级{
Speed++;
SetPos(54,7);
cout<<\"LEVEL:\"<}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<<\"恭喜你,你已经通关了\"<system(\"pause\");}
else//失败
{
SetPos(25,10);
cout<<\"gameover,最终长度为 \"<system(\"pause\");}
}
int main()
{
system(\"color 6a\");
Sneak game;
system(\"cls\");
cout<<\"*****************************************************\"<cout<<\"* 极品贪吃蛇小游戏 *\"<cout<<\"*****************************************************\"<cout<<\"* 说明: *\"<cout<<\"* W,A,S,D控制移动 *\"<cout<<\"* 每10节蛇身升一级,并提高速度,10级通关 *\"<cout<<\"*****************************************************\"<cout<<\"* 制作人12计科01班 魏梦阳 *\"<cout<<\"********* 按任意键开始 **********************\"<_getch();game.Gaming();
return 0;
}