美文网首页
贪吃蛇三代代码

贪吃蛇三代代码

作者: 禅绕此心 | 来源:发表于2018-01-15 22:14 被阅读0次

#include

#include

#include

#include

#include

int x[50]={1,1,1,1};//初始蛇坐标 x

int y[50]={1,1,1,1};//初始蛇坐标 y

int n=3;

int t=0;

int score=0;

unsigned  int x1=0;//初始食物坐标 x

unsigned  int y1=0;//初始食物坐标 y

void action_y();

void action_x();

void gotoxy();

void paint();

void no_text_cursor();

void snake_birth();

void snake_action();

void array_w();

void array_s();

void array_a();

void array_d();

void game_report();

void (*pfun)(void)=array_d;//移动函数指针控制移动

int main(void)

{

no_text_cursor();//隐藏光标

snake_birth();//诞生

for(int i=0;i<1;)//不断绘制界面

{

paint();

game_report();

pfun();

snake_action();

gotoxy(0,0);//将光标移动至(0,0)。

}

return 0;

}

void paint()//绘制界面函数

{

if(t%100==0)//让食物定时存在

{

srand(time(NULL));

x1=1+rand()%18;//随机产生食物的坐标 x

y1=1+rand()%18;//随机产生食物的坐标 y

}

    system("color 12");//修改颜色为蓝底绿字

for(unsigned int i=0;i<20;i++)//绘制游戏界面,i为纵向 ,k为横向

{

for(unsigned int k=0;k<20;k++)

{

if(i==0||i==19)

{

printf("█");

}

else

{

if(k==0||k==19)

{

printf("█");

}else

{

if(i==y1&&k==x1)

{

printf("○");

}

else

{

  char o=0;

  char time=0;

      for(int j=0;j<=n;j++)

  {

  if(x[j]==k&&y[j]==i)

  {

  if(j==0)

  {

  if(time==0)

  {

  printf("★");

  time++;

  o=1;

  }

  }

  else

  {

  if(time==0)

  {

  printf("●");

  time++;

  o=1;

    }

  }

        }

}

if(o==0){

printf("  ");

}

}

}

}

}

printf("\n");

}

printf("贪吃蛇三代 控制键:WASD\n");

printf("蛇头坐标%2d,%2d 食物坐标%2d,%2d 节数%2d\n",x[0],y[0],x1,y1,n+1);

t++;

}

void snake_birth()//初始化函数

{

x[0]=4;x[1]=3;x[2]=2;x[3]=1;

y[0]=1;y[1]=1;y[2]=1;y[3]=1;

}

void snake_action()//键盘检测函数

{

char ch=0;

if(kbhit())

{

ch=getch();

switch(ch)

{

case 'd':

if(x[0]!=18)

{

pfun=array_d;

        }

break;

case 'a':

if(x[0]!=1)

    {

pfun=array_a;

        }

    break;

case 'w':

if(y[0]!=1)

{

pfun=array_w;

    }

break;

case 's':

if(y[0]!=18)

{

pfun=array_s;

    }

break;

}

}

}

void array_w()//上移函数

{

if(y[0]!=1)

{

action_y();

y[0]--;

action_x();

}

}

void array_s()//下移函数

{

if(y[0]!=18)

{

action_y();

y[0]++;

action_x();

}

}

void array_a()

{

if(x[0]!=1)

{

action_x();

x[0]--;

action_y();

}

}

void array_d()

{

if(x[0]!=18)

{

action_x();

x[0]++;

action_y();

}

}

void action_y()

{

for(int i=n;i>=1;i--)

{

y[i]=y[i-1];

}

}

void action_x()

{

for(int i=n;i>=1;i--){

x[i]=x[i-1];

}

}

void game_report()//游戏报告函数用于计算得分处理游戏结果。

{

if((x[0]==x1&&y[0]==y1)||(x[1]==x1&&y[1]==y1)||(x[2]==x1&&y[2]==y1)||(x[3]==x1&&y[3]==y1))

{

if(n<49)

{

x[++n]=x[n-1];y[n]=y[n-1];

}

score+=10;

x1=0;y1=0;

}

printf("YOUR SCORE:%d ",score);

}

void no_text_cursor(void) //隐藏光标函数

{

  CONSOLE_CURSOR_INFO cursor_info = {1, 0};

SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);

}

void gotoxy(int x, int y)//移动光标函数

{

    COORD coord = {x, y}; 

    /*COORD是Windows API中定义的一种结构,表示一个字符在控制台屏幕上的坐标。其定义为:

    typedef struct _COORD {

    SHORT X; // horizontal coordinate

    SHORT Y; // vertical coordinate

    } COORD;*/

    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);

}

相关文章

网友评论

      本文标题:贪吃蛇三代代码

      本文链接:https://www.haomeiwen.com/subject/ubcjoxtx.html