贪吃蛇(部分AI功能)

Posted my——master

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了贪吃蛇(部分AI功能)相关的知识,希望对你有一定的参考价值。

  1 #include <dos.h>
  2 #include"iostream.h"
  3 #include"graphics.h"
  4 #include"conio.h"
  5 #include"string.h"
  6 #include"math.h" 
  7 #include"time.h"
  8 #include"stdlib.h"
  9 #include"stdio.h" 
 10 #include"conio.h"
 11 #define M_x 1300
 12 #define M_y 700
 13 #define M 10//kuai size
 14 #define N 10
 15 #define G_m 20//snack max numbers
 16 #define G_n 20 
 17 int snack_hx,snack_tx; //snack heard and tail (x,y)
 18 int snack_hy,snack_ty;
 19 int kuai_x,kuai_y;
 20 int F,flge,score,ku,norun,N1=3;
 21 int nu,kong_h,kong_t,can_to;
 22 int   T[G_m][G_n],snack_temp[G_m][G_n],snack_tempf[G_m][G_n];
 23 int t[G_m][G_n];
 24 /*typedef struct users
 25 {
 26     char name[10];
 27     char mm[10];
 28     int score;
 29     int rank;
 30 }user;
 31 user re(user i)
 32 {return i;}
 33 */
 34 typedef struct  kuai
 35 {
 36     int x;
 37     int y;
 38     int v; 
 39     int f;
 40     int n;
 41     float color;
 42     struct kuai *next;
 43 }*kuai_link,kuai_data;
 44 struct kuai snack[G_m][G_n];
 45 
 46 int jiemian()
 47 {
 48  char mm[20]="排名:";
 49 //int Y=700,X=600;   
 50 initgraph(M_x,M_y,1 ); //第三个对窗口格式有影响(- +)
 51 //setlinecolor(255);
 52 HWND hwnd=GetHWnd();
 53 SetWindowText(hwnd,"贪吃蛇1.0版@www.baidu.com/p/y123456789xx98 ");
 54 for(int i=0;i<M_x;i++)
 55 {
 56     setlinecolor(BLACK);
 57     line(i,0,M_x,M_y);
 58 }
 59  setlinecolor(BLUE);
 60 line(1,1,M_x-1,0);
 61 line(1,1,1,M_y-1);
 62 line(M_x-1,M_y-1,M_x-1,1);
 63 line(M_x-1,M_y-1,1,M_y-1);
 64 //setbkmode(TRANSPARENT);
 65 settextcolor(RED);
 66 outtextxy(M_x-180,40,mm);
 67 rectangle(M_x-200,10,M_x-10,M_y-10);
 68 outtextxy(M_x-180,200,"得分");
 69 outtextxy(M_x-180,230,"关卡"); 
 70 for(i=0;i<G_m;i++)
 71 for(int j=0;j<G_n;j++)
 72 {
 73     setlinecolor(BLUE);
 74     rectangle(i*M,j*N,M+i*M,N+N*j);
 75 }  
 76       
 77 return 0;
 78 }
 79 
 80 int build()//creact one kuai
 81  {     int i,j;
 82  for(i=0;i<G_m;i++)
 83      for(j=0;j<G_n;j++)
 84          T[i][j]=0;
 85      srand(time(0)); 
 86      do
 87      {
 88      i=rand()%G_m;j=rand()%G_n;
 89      }
 90     while(snack[i][j].f!=0);
 91     kuai_x=i;kuai_y=j;
 92     T[i][j]=G_m*G_n;flge=4;score++;
 93     if(1) 
 94     {//setlinecolor(BLUE);
 95         setfillcolor(GREEN );
 96     fillrectangle(i*M,N*j,M+i*M,N+N*j);    }//Sleep(1000);
 97      return flge;
 98  }
 99 
100  int initsnack()
101   {
102       int i,j;
103       //N1=3;
104       //memset(snack,0,sizeof(snack[G_m][G_n]));//
105 for(i=0;i<G_m;i++)
106 for(j=0;j<G_n;j++)
107 {snack[i][j].f=0;snack[i][j].n=0;}
108       snack_hx=G_m/2-3;snack_hy=G_n/2;
109       for(i=0;i<N1;i++)
110       {
111           snack[snack_hx+i][snack_hy].n=1;
112           snack[snack_hx+i][snack_hy].f=-1;      
113       }
114       snack_tx=snack_hx+N1-1;snack_ty=snack_hy;
115       return 0;
116   }
117  int getin()
118  {
119      int c;
120              while(kbhit())
121             {    
122             fflush(stdin);
123             c=getch();   
124                 switch(c)                                     
125                 {
126                     case 32:{c=getch();c=0;break;}
127                     case 72:{if(snack[snack_hx][snack_hy].f==2){;}else snack[snack_hx][snack_hy].f=-2;break;}
128                     case 77:{if(snack[snack_hx][snack_hy].f==-1){;}else snack[snack_hx][snack_hy].f=1;break;}
129                     case 75:{if(snack[snack_hx][snack_hy].f==1){;}else snack[snack_hx][snack_hy].f=-1;break;}
130                     case 80:{if(snack[snack_hx][snack_hy].f==-2){;}else snack[snack_hx][snack_hy].f=2;break;}
131                     //default:{snack[snack_hx][snack_hy].f=0;c=0;break;}
132                 }
133             }
134      return 0;
135  }
136 
137  int run1()//heard jin
138  {
139      int i,j,x,y;
140      x=snack[snack_hx][snack_hy].f%2;y=snack[snack_hx][snack_hy].f/2;
141      i=snack_hx+x;j=snack_hy+y;
142      F=snack[snack_hx][snack_hy].f;
143      if(snack[i][j].f==0)//can jin
144      {
145          snack[snack_hx][snack_hy].n=1;
146          snack[i][j].f=F; snack[i][j].n=0;
147          snack_hx=i;snack_hy=j;//heard
148      }
149      else
150      {
151          flge=11;
152      }
153      return flge;
154  }
155  int run2()//tail jin
156  {
157      int i=0,j=0,m=0,n=0,k=0,h=0;
158      m=snack[snack_tx][snack_ty].f%2;n=snack[snack_tx][snack_ty].f/2;
159      k=snack_tx+m;h=snack_ty+n;i=snack_tx;j=snack_ty;
160      snack_tx=k;snack_ty=h;
161      snack[i][j].n=0;
162      snack[i][j].f=0;//tail 
163      return flge;
164  }
165  int run3()//tail tui
166  {
167      int i=0,j=0,m=0,n=0,k=0,h=0;
168      m=snack[snack_tx][snack_ty].f%2;n=snack[snack_tx][snack_ty].f/2;
169      i=snack_tx;j=snack_ty;
170      k=snack_tx-m;h=snack_ty-n;
171      if(snack[k][h].f==0&&k>=0&&h>=0&k<G_m&&h<G_n)
172      {
173          snack_tx=k;snack_ty=h;
174           snack[k][h].n=1;
175          snack[k][h].f=snack[i][j].f;//tail 
176      }
177      else
178      {
179           flge=33;score--;
180      }
181      return flge;
182  }
183   
184 int bianjie()
185  {    int i,j;
186     if(snack_hx<0||snack_hy<0||snack_hx>=G_m||snack_hy>=G_n)
187         flge=55;
188     else
189         flge=5;
190     return flge;
191  }
192 int snack_to()
193 {
194     int i,j;
195     for(i=0;i<G_m;i++)
196         for(j=0;j<G_n;j++)
197         {snack_temp[i][j]=0;
198         snack_temp[i][j]=snack[i][j].n;
199         snack_tempf[i][j]=0;
200         snack_tempf[i][j]=snack[i][j].f;
201         }
202     return 0;
203 }
204 
205 int eat_own()
206 {
207     int i,j,m,n,k,h,number=0;
208     k=snack_tx;h=snack_ty;
209     do
210     {                                                    //从未到头倒推
211      m=snack[k][h].f%2;n=snack[k][h].f/2;
212      i=k+m;j=h+n;
213      k=i;h=j;number++;
214     }
215      while(snack[i][j].n==1);
216      if(snack[i][j].n==0&&i==snack_hx&&j==snack_hy&&number!=score+N1-3 )///当倒推数和本身长度不等时 flge=0
217           flge=66;
218      else
219          flge=6;
220      return flge;
221 }
222 
223 int eat_kuai()//success return flge=3
224 {
225     if(T[snack_hx][snack_hy]>10)
226         flge=7;
227     else
228         flge=77;
229         return flge;
230 }
231 
232 
233 int view()
234  {
235      int i,j,m,n;
236       BeginBatchDraw();
237      for(i=0;i<G_m;i++)
238          for(j=0;j<G_n;j++)
239          {
240              if(T[i][j]!=0)
241              {setfillcolor(YELLOW);
242              fillrectangle(i*M,N*j,M+i*M,N+N*j);continue;}
243              if(snack[i][j].f==0)
244              {setfillcolor(BLACK);
245              fillrectangle(i*M,N*j,M+i*M,N+N*j);}
246              else
247              {setfillcolor(RED);
248              fillrectangle(i*M,N*j,M+i*M,N+N*j);}
249          }
250 #if 1
251           IMAGE img;     //加载的图片
252     loadimage(&img,"D:\\link.jpg",M,N);
253     m=snack_hx;n=snack_hy;
254     putimage(m*M,n*N,&img);
255 #else
256     setfillcolor(0X255555);//heard
257      m=snack_hx;n=snack_hy;
258      fillrectangle(m*M,N*n,M+m*M,N+N*n);
259 #endif
260      setfillcolor(GREEN);
261      i=snack_tx;j=snack_ty;//-snack[snack_tx][snack_ty].f%2;j=snack_ty-snack[snack_tx][snack_ty].f/2;
262      fillrectangle(i*M,N*j,M+i*M,N+N*j);
263          EndBatchDraw(); 
264          return 0;
265  }
266 int scor()
267 {
268      clearrectangle(M_x-140,200,M_x-11,230);
269      char g_score31[10]={0};                                //调试查看
270                 sprintf(g_score31,"%d",score-2);settextstyle(0,0,g_score31);
271                 outtextxy(M_x-130,200,g_score31);
272      clearrectangle(M_x-140,229,M_x-11,300);
273      char g_score32[10]={0};                                //调试查看
274                 sprintf(g_score32,"%d",ku);settextstyle(0,0,g_score32);
275                 outtextxy(M_x-130,230,g_score32);
276     char g_score33[10]={0};                                //调试查看
277                 sprintf(g_score33,"%d",flge);settextstyle(0,0,g_score33);
278                 outtextxy(M_x-130,260,g_score33);
279     return 0;
280 }
281 
282  int law(int x1,int y1,int x2,int y2)         //heard x,y return kuai.n
283   {
284       int i,j,k,h,m,n,x,y;
285       nu=1;
286       for(i=0;i<G_m;i++)
287         for(j=0;j<G_n;j++)
288         {
289         snack_tempf[i][j]=0;
290         snack_tempf[i][j]=snack[i][j].f;
291         }
292        for(i=0;i<G_m;i++)
293           for(j=0;j<G_n;j++)
294               t[i][j]=0;
295       k=x1;h=y1;
296       if(snack[k][h].f!=0)
297       { 
298           int k1=k-1,k2=k+1,h1=h-1,h2=h+1;
299                   if(snack_tempf[k1][h]==0&&k1>=0){snack_tempf[k1][h]=-1;t[k1][h]=nu;}
300                   if(snack_tempf[k][h1]==0&&h1>=0){snack_tempf[k][h1]=-2;t[k][h1]=nu;}
301                   if(snack_tempf[k2][h]==0&&k2<G_m){snack_tempf[k2][h]=1;t[k2][h]=nu;}
302                   if(snack_tempf[k][h2]==0&&h2<G_n){snack_tempf[k][h2]=2;t[k][h2]=nu;} 
303          
304         }
305  srand(time(0));
306      int model=rand()%4;
307      if(model==0)
308      {
309          do
310       {
311           for(i=0;i<G_m;i++)
312           for(j=0;j<G_n;j++)
313           {
314                if(t[i][j]==nu)
315               {
316                   k=i;h=j;nu++;int k1=k-1,k2=k+1,h1=h-1,h2=h+1;
317                   if(snack_tempf[k1][h]==0&&k1>=0){snack_tempf[k1][h]=-1;t[k1][h]=nu;}
318                   if(snack_tempf[k][h1]==0&&h1>=0){snack_tempf[k][h1]=-2;t[k][h1]=nu;}
319                   if(snack_tempf[k2][h]==0&&k2<G_m){snack_tempf[k2][h]=1;t[k2][h]=nu;}
320                   if(snack_tempf[k][h2]==0&&h2<G_n){snack_tempf[k][h2]=2;t[k][h2]=nu;} 
321                   nu--;
322               }
323           }
324           nu++;
325       }
326      while(nu<=G_m*G_n);
327      }
328      if(model==1)
329          {
330          do
331       {
332           for(j=0;j<G_m;j++)
333           for(i=0;i<G_n;i++)
334           {
335                if(t[i][j]==nu)
336               {
337                   k=i;h=j;nu++;int k1=k-1,k2=k+1,h1=h-1,h2=h+1;
338                   if(snack_tempf[k1][h]==0&&k1>=0){snack_tempf[k1][h]=-1;t[k1][h]=nu;}
339                   if(snack_tempf[k][h1]==0&&h1>=0){snack_tempf[k][h1]=-2;t[k][h1]=nu;}
340                   if(snack_tempf[k2][h]==0&&k2<G_m){snack_tempf[k2][h]=1;t[k2][h]=nu;}
341                   if(snack_tempf[k][h2]==0&&h2<G_n){snack_tempf[k][h2]=2;t[k][h2]=nu;} 
342                   nu--;
343               }
344           }
345           nu++;
346       }
347      while(nu<=G_m*G_n);
348      }
349      if(model==2)
350          {
351          do
352       {
353           for(j=G_m-1;j>=0;j--)
354           for(i=G_n-1;i>=0;i--)
355           {
356                if(t[i][j]==nu)
357               {
358                   k=i;h=j;nu++;int k1=k-1,k2=k+1,h1=h-1,h2=h+1;
359                   if(snack_tempf[k1][h]==0&&k1>=0){snack_tempf[k1][h]=-1;t[k1][h]=nu;}
360                   if(snack_tempf[k][h1]==0&&h1>=0){snack_tempf[k][h1]=-2;t[k][h1]=nu;}
361                   if(snack_tempf[k2][h]==0&&k2<G_m){snack_tempf[k2][h]=1;t[k2][h]=nu;}
362                   if(snack_tempf[k][h2]==0&&h2<G_n){snack_tempf[k][h2]=2;t[k][h2]=nu;} 
363                   nu--;
364               }
365           }
366           nu++;
367       }
368      while(nu<=G_m*G_n);
369      }
370      if(model==3)
371          {
372          do
373       {
374           for(i=G_m-1;i>=0;i--)
375           for(j=G_n-1;j>=0;j--)
376           {
377                if(t[i][j]==nu)
378               {
379                   k=i;h=j;nu++;int k1=k-1,k2=k+1,h1=h-1,h2=h+1;
380                   if(snack_tempf[k1][h]==0&&k1>=0){snack_tempf[k1][h]=-1;t[k1][h]=nu;}
381                   if(snack_tempf[k][h1]==0&&h1>=0){snack_tempf[k][h1]=-2;t[k][h1]=nu;}
382                   if(snack_tempf[k2][h]==0&&k2<G_m){snack_tempf[k2][h]=1;t[k2][h]=nu;}
383                   if(snack_tempf[k][h2]==0&&h2<G_n){snack_tempf[k][h2]=2;t[k][h2]=nu;} 
384                   nu--;
385               }
386           }
387           nu++;
388       }
389      while(nu<=G_m*G_n);
390      }
391       m=x2;n=y2;
392      // f();
393       clearrectangle(M_x-290,200,M_x-250,240);//11调试用
394      char g_score53[10]={0};
395                 sprintf(g_score53,"%d",kong_h);settextstyle(0,0,g_score53);
396                 outtextxy(M_x-275,210,g_score53); 
397       clearrectangle(M_x-290,300,M_x-250,360);//11调试用
398      char g_score51[10]={0};
399                 sprintf(g_score51,"%d",kong_t);settextstyle(0,0,g_score51);
400                 outtextxy(M_x-275,320,g_score51);
401      char g_score52[10]={0};
402                 sprintf(g_score52,"%d",model);settextstyle(0,0,g_score52);
403                 outtextxy(M_x-275,340,g_score52); 
404             
405         {
406             while(m!=x1||n!=y1)        
407       //do
408             {
409                 k=m;h=n;                                                //从未到头倒推
410                 x=snack_tempf[m][n]%2;y=snack_tempf[m][n]/2;
411                 i=m-x;j=n-y;
412                 m=i;n=j;
413                 
414             }
415             if(nu!=G_m*G_n)
416             snack[x1][y1].f=snack_tempf[k][h];
417     //    f();
418         }
419       return snack[x1][y1].f;
420   }
421 
422   int heard(int x4,int y4)         //heard x,y return kuai.n
423   {
424       int i,j,k,h,m,n,x,y;
425       nu=1;
426       for(i=0;i<G_m;i++)
427         for(j=0;j<G_n;j++)
428         {
429         snack_tempf[i][j]=0;
430         snack_tempf[i][j]=snack[i][j].f;
431         }
432        for(i=0;i<G_m;i++)
433           for(j=0;j<G_n;j++)
434               t[i][j]=0;
435       k=x4;h=y4;
436       if(snack[k][h].f!=0)
437       { 
438           int k1=k-1,k2=k+1,h1=h-1,h2=h+1;
439                   if(snack_tempf[k1][h]==0&&k1>=0){snack_tempf[k1][h]=-1;t[k1][h]=nu;}
440                   if(snack_tempf[k][h1]==0&&h1>=0){snack_tempf[k][h1]=-2;t[k][h1]=nu;}
441                   if(snack_tempf[k2][h]==0&&k2<G_m){snack_tempf[k2][h]=1;t[k2][h]=nu;}
442                   if(snack_tempf[k][h2]==0&&h2<G_n){snack_tempf[k][h2]=2;t[k][h2]=nu;} 
443          
444         }
445       do
446       {
447           for(i=0;i<G_m;i++)
448           for(j=0;j<G_n;j++)
449           {
450                if(t[i][j]==nu)
451               {
452                   k=i;h=j;nu++;int k1=k-1,k2=k+1,h1=h-1,h2=h+1;
453                   if(snack_tempf[k1][h]==0&&k1>=0){snack_tempf[k1][h]=-1;t[k1][h]=nu;}
454                   if(snack_tempf[k][h1]==0&&h1>=0){snack_tempf[k][h1]=-2;t[k][h1]=nu;}
455                   if(snack_tempf[k2][h]==0&&k2<G_m){snack_tempf[k2][h]=1;t[k2][h]=nu;}
456                   if(snack_tempf[k][h2]==0&&h2<G_n){snack_tempf[k][h2]=2;t[k][h2]=nu;} 
457                   nu--;
458               }
459           }
460           nu++;
461           kong_h=0;
462           if(nu>=G_m*G_n)
463           for(i=0;i<G_m;i++)
464           for(j=0;j<G_n;j++)
465           {
466               if(t[i][j]!=0)
467                   kong_h++;
468           }
469       }
470      while(nu<=G_m*G_n);
471 return kong_h;
472   }
473 
474        int tail(int x3,int y3)         //heard x,y return kuai.n
475   {
476       int i,j,k,h,m,n,x,y;
477       nu=1;
478       for(i=0;i<G_m;i++)
479         for(j=0;j<G_n;j++)
480         {
481         snack_tempf[i][j]=0;
482         snack_tempf[i][j]=snack[i][j].f;
483         }
484        for(i=0;i<G_m;i++)
485           for(j=0;j<G_n;j++)
486               t[i][j]=0;
487       k=x3;h=y3;
488       if(snack[k][h].f!=0 )
489       { 
490           int k1=k-1,k2=k+1,h1=h-1,h2=h+1;
491                   if(snack_tempf[k1][h]==0&&k1>=0){snack_tempf[k1][h]=-1;t[k1][h]=nu;}
492                   if(snack_tempf[k][h1]==0&&h1>=0){snack_tempf[k][h1]=-2;t[k][h1]=nu;}
493                   if(snack_tempf[k2][h]==0&&k2<G_m){snack_tempf[k2][h]=1;t[k2][h]=nu;}
494                   if(snack_tempf[k][h2]==0&&h2<G_n){snack_tempf[k][h2]=2;t[k][h2]=nu;} 
495          
496         }
497       do
498       {
499           for(i=0;i<G_m;i++)
500           for(j=0;j<G_n;j++)
501           {
502                if(t[i][j]==nu)
503               {
504                   k=i;h=j;nu++;int k1=k-1,k2=k+1,h1=h-1,h2=h+1;
505                   if(snack_tempf[k1][h]==0&&k1>=0){snack_tempf[k1][h]=-1;t[k1][h]=nu;}
506                   if(snack_tempf[k][h1]==0&&h1>=0){snack_tempf[k][h1]=-2;t[k][h1]=nu;}
507                   if(snack_tempf[k2][h]==0&&k2<G_m){snack_tempf[k2][h]=1;t[k2][h]=nu;}
508                   if(snack_tempf[k][h2]==0&&h2<G_n){snack_tempf[k][h2]=2;t[k][h2]=nu;} 
509                   nu--;
510               }
511           }
512           nu++;
513 
514           kong_t=0;
515           if(nu>=G_m*G_n)
516           for(i=0;i<G_m;i++)
517           for(j=0;j<G_n;j++)
518           {
519               if(t[i][j]!=0)
520                   kong_t++;
521           }
522       }
523      while(nu<=G_m*G_n);
524     // f();
525 return kong_t;
526   }
527 
528 int can(int x7,int y7,int x8,int y8)         //heard x,y return kuai.n
529   {
530       int i,j,k,h,m,n,x,y;
531       nu=1;
532       snack[x8][y8].f=0;
533       for(i=0;i<G_m;i++)
534         for(j=0;j<G_n;j++)
535         {
536         snack_tempf[i][j]=0;
537         snack_tempf[i][j]=snack[i][j].f;
538         }
539        for(i=0;i<G_m;i++)
540           for(j=0;j<G_n;j++)
541               t[i][j]=0;
542       k=x7;h=y7;
543       if(snack[k][h].f!=0)
544       { 
545           int k1=k-1,k2=k+1,h1=h-1,h2=h+1;
546                   if(snack_tempf[k1][h]==0&&k1>=0){snack_tempf[k1][h]=-1;t[k1][h]=nu;}
547                   if(snack_tempf[k][h1]==0&&h1>=0){snack_tempf[k][h1]=-2;t[k][h1]=nu;}
548                   if(snack_tempf[k2][h]==0&&k2<G_m){snack_tempf[k2][h]=1;t[k2][h]=nu;}
549                   if(snack_tempf[k][h2]==0&&h2<G_n){snack_tempf[k][h2]=2;t[k][h2]=nu;} 
550          
551         }
552       do
553       {
554           for(i=0;i<G_m;i++)
555           for(j=0;j<G_n;j++)
556           {
557                if(t[i][j]==nu)
558               {
559                   k=i;h=j;nu++;int k1=k-1,k2=k+1,h1=h-1,h2=h+1;
560                   if(snack_tempf[k1][h]==0&&k1>=0){snack_tempf[k1][h]=-1;t[k1][h]=nu;}
561                   if(snack_tempf[k][h1]==0&&h1>=0){snack_tempf[k][h1]=-2;t[k][h1]=nu;}
562                   if(snack_tempf[k2][h]==0&&k2<G_m){snack_tempf[k2][h]=1;t[k2][h]=nu;}
563                   if(snack_tempf[k][h2]==0&&h2<G_n){snack_tempf[k][h2]=2;t[k][h2]=nu;} 
564                   nu--;
565               }
566           }
567           nu++;
568       }
569      while(t[x8][y8]==0&&nu<=G_m*G_n);
570      can_to=1;
571      if(nu>=G_m*G_n)
572         can_to=0;
573     return can_to;
574   }
575  int main(int argc,char *argv[])  
576  {
577      int next=1;
578      int a=0;
579      while(next)
580      { 
581      score=1;
582      jiemian();
583      initsnack();build();
584      int ai=1;
585      //scanf("%d",&ai);
586      Sleep(1000);
587      while(flge!=0)
588      {    
589         while(ai)
590         {
591             if(flge==100)
592         {build();norun=0;}
593          view();
594          scor();
595         bianjie();
596         //Sleep(1000); 
597         if(flge==55)break;
598         if(flge==5)
599             flge=10;
600         eat_own();
601         if(flge==66)break;
602         if(flge==6)
603             flge=10;
604         eat_kuai();
605         if(flge==7)
606         {
607             run3();
608             flge=100;
609         }
610         if(flge!=100)
611         {
612             int kuaif1,kuaif2;
613                 kuaif1=can(snack_hx,snack_hy,kuai_x,kuai_y);
614                 kuaif2=can(snack_tx,snack_ty,kuai_x,kuai_y);
615                 heard(snack_hx,snack_hy);
616                 tail(snack_tx,snack_ty);
617                 if(kuaif1==1&&kuaif2==1)
618                 {
619                     law(snack_hx,snack_hy,kuai_x,kuai_y);
620                     getin();
621                     run2();run1();
622                 }
623 
624                 if(kuaif2!=kuaif1||(kuaif1==0&&kuaif2==0))
625                 {
626                     int aa,bb;
627                     aa=abs((snack_hx+snack_hy));
628                     bb=abs((snack_tx+snack_ty));
629                     if(abs((aa-bb))==1);
630                     int t=snack[snack_tx][snack_ty].f;
631                         snack[snack_tx][snack_ty].f=0;
632                         law(snack_hx,snack_hy,snack_tx,snack_ty);
633                         snack[snack_tx][snack_ty].f=t;
634                         getin();
635                         run2();run1();
636                 }
637                 
638 
639         }
640         }
641 
642 
643         if(flge==100)
644         {build();norun=0;}
645         getin();
646         run1();
647         if(flge==11)break;
648         if(flge==1)
649             flge=10;
650         run2();
651         if(flge==2)
652             flge=10;
653          view();
654          scor();
655         bianjie();
656         if(flge==55)break;
657         if(flge==5)
658             flge=10;
659         eat_own();
660         if(flge==66)break;
661         if(flge==6)
662             flge=10;
663         eat_kuai();
664         if(flge==7)
665         {
666             run3();
667             flge=100;
668         }
669         //{law(snack_hx,snack_hy,snack_tx,snack_ty);
670         Sleep(500);
671         //Sleep(500-10*ku);
672      }
673     if(a<score)
674         a=score;
675 kbhit();
676 next=getch();
677 if(next==27)
678 next=0;
679      }
680      score=a;
681      score=score-2;
682  return score;
683  }

 

以上是关于贪吃蛇(部分AI功能)的主要内容,如果未能解决你的问题,请参考以下文章

让AI学会玩贪吃蛇

如何用Python写一个贪吃蛇AI

如何用Python写一个贪吃蛇AI

Python制作AI贪吃蛇

C# wpf 使用 polyline 做一个贪吃蛇游戏的小蛇移动吃食部分功能

贪吃蛇AI