欢迎光临散文网 会员登陆 & 注册

贪吃蛇

2022-05-07 20:02 作者:游侠翻滚  | 我要投稿

#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;

}


贪吃蛇的评论 (共 条)

分享到微博请遵守国家法律