贪吃蛇
#include<iostream>
#include<windows.h>
#include<time.h>
#include<stdlib.h>
#include<conio.h>
using namespace std;
#define high 20
#define width 30
#define snake_maxlength 200
int snake_x[snake_maxlength],snake_y[snake_maxlength];
int snake_length;
int map[high][width]={0};
int food_x,food_y;
int score;
char input;
char primeinput='.';
int op;
void setdata()
{
snake_x[0]=high/2;snake_y[0]=width/3;
snake_x[1]=high/2;snake_y[1]=width/3+1;
snake_length=2;
food_x=high/3,food_y=width/3;
score=0;
int i,j;
map[snake_x[0]][snake_y[0]]=4;
map[snake_x[1]][snake_y[1]]=1;
map[food_x][food_y]=2;
for(i=0;i<high;i++)
for(j=0;j<width;j++)
if(i==0||j==0||i==high-1||j==width-1)
map[i][j]=3;
}
void gotoxy(int x,int y)
{
HANDLE handle=GetStdHandle(STD_OUTPUT_HANDLE);
COORD pos;
pos.X=x;
pos.Y=y;
SetConsoleCursorPosition(handle,pos);
}
void show()
{
gotoxy(0,0);
int i,j;
for(i=0;i<high;i++)
{
for(j=0;j<width;j++)
{
if(map[i][j]==0)
cout<<" ";
else if(map[i][j]==1)
cout<<"+";
else if(map[i][j]==2)
cout<<"@";
else if(map[i][j]==3)
cout<<"#";
else if(map[i][j]==4)
cout<<"O";
}
printf("\n");
}
cout<<"得分"<<score;
}
void updatewithoutinput()
{
int i;
if(snake_x[0]==food_x&&snake_y[0]==food_y)
{
score++;
srand((unsigned)time(NULL));
food_x=rand()%(high-3)+1;
food_y=rand()%(width-3)+1;
map[food_x][food_y]=2;
snake_length++;
}
if(snake_x[0]==0||snake_x[0]==high-1||snake_y[0]==0||snake_y[0]==width-1)
{
cout<<"游戏结束!"<<endl;
getch();
exit(1);
}
for(i=1;i<snake_length;i++)
if(snake_x[0]==snake_x[i]&&snake_y[0]==snake_y[i])
{
cout<<"游戏结束!"<<endl;
exit(1);
}
}
void updatewithinput()
{
int i=1;
if(kbhit())
input=getch();
if(input!='\0')
{
if(input=='w'||input=='a'||input=='s'||input=='d')
{
if(primeinput=='w'&&input=='s'||primeinput=='s'&&input=='w'||primeinput=='a'&&input=='d'||primeinput=='d'&&input=='a')
{
cout<<" 贪吃蛇教会你的,是世上没有回头路,回头等于自焚"<<endl;
exit(0);
}
else
primeinput=input;
}
else if(primeinput=='.')
primeinput='w';
else if(input=='p')
{
while(1)
{
char op;
op=getch();
if(op=='p')
{
input='.';
break;
}
}
}
else if(input=='+')
{
if(op>=50)
op=op/2;
}
else if(input=='-')
{
if(op<=1000)
op=op*2;
}
map[snake_x[snake_length-1]][snake_y[snake_length-1]]=0;
for(i=snake_length-1;i>0;i--)
{
snake_x[i]=snake_x[i-1];
snake_y[i]=snake_y[i-1];
map[snake_x[i]][snake_y[i]]=1;
}
}
if(primeinput=='w')
snake_x[0]--;
else if(primeinput=='s')
snake_x[0]++;
else if(primeinput=='a')
snake_y[0]--;
else if(primeinput=='d')
snake_y[0]++;
map[snake_x[0]][snake_y[0]]=4;
}
int main()
{
setdata();
cout<<"按W,S,A,D移动(注意不要回头!)" <<endl;
cout<<"请输入移动一格的毫秒数(推荐300)"<<endl;
cin>>op;
while(1)
{
show();
Sleep(op);
updatewithoutinput();
updatewithinput();
}
return 0;
}