当前位置:首页 > 代码 > 正文

贪吃蛇源代码(贪吃蛇源代码java)[20240424更新]

admin 发布:2024-04-24 06:05 92


今天给各位分享贪吃蛇源代码的知识,其中也会对贪吃蛇源代码java进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

寻找贪吃蛇c++的代码

贪吃蛇游戏C语言源代码学习

源代码下载地址为:

阅读学习了源代码,并做了简单的注释和修改,里面只用了链表数据结构,非常适合C语言入门者学习阅读。

程序可在VS2013下编译运行。

1 #includestdio.h  2 #includetime.h  3 #includewindows.h  4 #includestdlib.h  5   6 #define U 1  7 #define D 2  8 #define L 3

9 #define R 4       //蛇的状态,U:上 ;D:下;L:左 R:右 10  11 typedef struct SNAKE //蛇身的一个节点 12 { 13     int x; 14     int y; 15     struct SNAKE *next; 16 }snake; 17  18 //全局变量// 19 int score = 0, add = 10;//总得分与每次吃食物得分。 20 int status, sleeptime = 200;//每次运行的时间间隔 21 snake *head, *food;//蛇头指针,食物指针 22 snake *q;//遍历蛇的时候用到的指针 23 int endGamestatus = 0; //游戏结束的情况,1:撞到墙;2:咬到自己;3:主动退出游戏。 24  25 //声明全部函数// 26 void Pos(); 27 void creatMap(); 28 void initSnake(); 29 int biteSelf(); 30 void createFood(); 31 void cantCrossWall(); 32 void snakeMove(); 33 void pause(); 34 void runGame(); 35 void initGame(); 36 void endGame(); 37 void gameStart(); 38  39 void Pos(int x, int y)//设置光标位置 40 { 41     COORD pos; 42     HANDLE hOutput; 43     pos.X = x; 44     pos.Y = y; 45     hOutput = GetStdHandle(STD_OUTPUT_HANDLE);//返回标准的输入、输出或错误的设备的句柄,也就是获得输入、输出/错误的屏幕缓冲区的句柄 46     SetConsoleCursorPosition(hOutput, pos); 47 } 48  49 void creatMap()//创建地图 50 { 51     int i; 52     for (i = 0; i58; i += 2)//打印上下边框 53     { 54         Pos(i, 0); 55         printf("■");//一个方块占两个位置 56         Pos(i, 26); 57         printf("■"); 58     } 59     for (i = 1; i26; i++)//打印左右边框 60     { 61         Pos(0, i); 62         printf("■"); 63         Pos(56, i); 64         printf("■"); 65     } 66 } 67  68 void initSnake()//初始化蛇身 69 { 70     snake *tail; 71     int i; 72     tail = (snake*)malloc(sizeof(snake));//从蛇尾开始,头插法,以x,y设定开始的位置// 73     tail-x = 24; 74     tail-y = 5; 75     tail-next = NULL; 76     for (i = 1; i = 4; i++)//初始长度为4 77     { 78         head = (snake*)malloc(sizeof(snake)); 79         head-next = tail; 80         head-x = 24 + 2 * i; 81         head-y = 5; 82         tail = head; 83     } 84     while (tail != NULL)//从头到为,输出蛇身 85     { 86         Pos(tail-x, tail-y); 87         printf("■"); 88         tail = tail-next; 89     } 90 } 91 //?? 92 int biteSelf()//判断是否咬到了自己 93 { 94     snake *self; 95     self = head-next; 96     while (self != NULL) 97     { 98         if (self-x == head-x self-y == head-y) 99         {100             return 1;101         }

102         self = self-next;103     }104     return 0;105 }106 107 void createFood()//随机出现食物108 {109     snake *food_1;110     srand((unsigned)time(NULL));//为了防止每次产生的随机数相同,种子设置为time111     food_1 = (snake*)malloc(sizeof(snake));112     while ((food_1-x % 2) != 0)    //保证其为偶数,使得食物能与蛇头对其113     {114         food_1-x = rand() % 52 + 2;115     }116     food_1-y = rand() % 24 + 1;117     q = head;118     while (q-next == NULL)119     {120         if (q-x == food_1-x q-y == food_1-y) //判断蛇身是否与食物重合121         {122             free(food_1);123             createFood();124         }125         q = q-next;126     }127     Pos(food_1-x, food_1-y);128     food = food_1;129     printf("■");130 }131 132 void cantCrossWall()//不能穿墙133 {134     if (head-x == 0 || head-x == 56 || head-y == 0 || head-y == 26)135     {136         endGamestatus = 1;137         endGame();138     }139 }140 141 void snakeMove()//蛇前进,上U,下D,左L,右R142 {143     snake * nexthead;144     cantCrossWall();145 146     nexthead = (snake*)malloc(sizeof(snake));147     if (status == U)148     {149         nexthead-x = head-x;150         nexthead-y = head-y - 1;151         if (nexthead-x == food-x nexthead-y == food-y)//如果下一个有食物//152         {153             nexthead-next = head;154             head = nexthead;155             q = head;156             while (q != NULL)157             {158                 Pos(q-x, q-y);159                 printf("■");160                 q = q-next;161             }162             score = score + add;163             createFood();164         }165         else                                               //如果没有食物//166         {167             nexthead-next = head;168             head = nexthead;169             q = head;170             while (q-next-next != NULL)171             {172                 Pos(q-x, q-y);173                 printf("■");174                 q = q-next;175             }176             Pos(q-next-x, q-next-y);177             printf("  ");178             free(q-next);179             q-next = NULL;180         }181     }182     if (status == D)183     {184         nexthead-x = head-x;185         nexthead-y = head-y + 1;186         if (nexthead-x == food-x nexthead-y == food-y)  //有食物187         {188             nexthead-next = head;189             head = nexthead;190             q = head;191             while (q != NULL)192             {193                 Pos(q-x, q-y);194                 printf("■");195                 q = q-next;196             }197             score = score + add;198             createFood();199         }200         else                               //没有食物201         {202             nexthead-next = head;203             head = nexthead;204             q = head;205             while (q-next-next != NULL)206             {207                 Pos(q-x, q-y);208                 printf("■");209                 q = q-next;210             }211             Pos(q-next-x, q-next-y);212             printf("  ");213             free(q-next);214             q-next = NULL;215         }216     }217     if (status == L)218     {219         nexthead-x = head-x - 2;220         nexthead-y = head-y;221         if (nexthead-x == food-x nexthead-y == food-y)//有食物222         {223             nexthead-next = head;224             head = nexthead;225             q = head;226             while (q != NULL)227             {228                 Pos(q-x, q-y);229                 printf("■");230                 q = q-next;231             }232             score = score + add;233             createFood();234         }235         else                                //没有食物236         {237             nexthead-next = head;238             head = nexthead;239             q = head;240             while (q-next-next != NULL)241             {242                 Pos(q-x, q-y);243                 printf("■");244                 q = q-next;245             }246             Pos(q-next-x, q-next-y);247             printf("  ");248             free(q-next);249             q-next = NULL;250         }251     }252     if (status == R)253     {254         nexthead-x = head-x + 2;255         nexthead-y = head-y;256         if (nexthead-x == food-x nexthead-y == food-y)//有食物257         {258             nexthead-next = head;259             head = nexthead;260             q = head;261             while (q != NULL)262             {263                 Pos(q-x, q-y);264                 printf("■");265                 q = q-next;266             }267             score = score + add;268             createFood();269         }270         else                                         //没有食物271         {272             nexthead-next = head;273             head = nexthead;274             q = head;275             while (q-next-next != NULL)276             {277                 Pos(q-x, q-y);278                 printf("■");279                 q = q-next;280             }281             Pos(q-next-x, q-next-y);282             printf("  ");283             free(q-next);284             q-next = NULL;285         }286     }287     if (biteSelf() == 1)       //判断是否会咬到自己288     {289         endGamestatus = 2;290         endGame();291     }292 }293 294 void pause()//暂停295 {296     while (1)297     {298         Sleep(300);299         if (GetAsyncKeyState(VK_SPACE))300         {301             break;302         }303 304     }305 }306 307 void runGame()//控制游戏        308 {309 310     Pos(64, 15);311     printf("不能穿墙,不能咬到自己\n");312     Pos(64, 16);313     printf("用↑.↓.←.→分别控制蛇的移动.");314     Pos(64, 17);315     printf("F1 为加速,F2 为减速\n");316     Pos(64, 18);317     printf("ESC :退出游戏.space:暂停游戏.");318     Pos(64, 20);319     printf("C语言研究中心 ");320     status = R;321     while (1)322     {323         Pos(64, 10);324         printf("得分:%d  ", score);325         Pos(64, 11);326         printf("每个食物得分:%d分", add);327         if (GetAsyncKeyState(VK_UP) status != D)328         {329             status = U;330         }331         else if (GetAsyncKeyState(VK_DOWN) status != U)332         {333             status = D;334         }335         else if (GetAsyncKeyState(VK_LEFT) status != R)336         {337             status = L;338         }339         else if (GetAsyncKeyState(VK_RIGHT) status != L)340         {341             status = R;342         }343         else if (GetAsyncKeyState(VK_SPACE))344         {345             pause();346         }347         else if (GetAsyncKeyState(VK_ESCAPE))348         {349             endGamestatus = 3;350             break;351         }352         else if (GetAsyncKeyState(VK_F1))353         {354             if (sleeptime = 50)355             {356                 sleeptime = sleeptime - 30;357                 add = add + 2;358                 if (sleeptime == 320)359                 {360                     add = 2;//防止减到1之后再加回来有错361                 }362             }363         }364         else if (GetAsyncKeyState(VK_F2))365         {366             if (sleeptime350)367             {368                 sleeptime = sleeptime + 30;369                 add = add - 2;370                 if (sleeptime == 350)371                 {372                     add = 1;  //保证最低分为1373                 }374             }375         }376         Sleep(sleeptime);377         snakeMove();378     }379 }380 381 void initGame()//开始界面382 {383     Pos(40, 12);384 385     system("title C语言研究中心   ");386     printf("欢迎来到贪食蛇游戏!");387     Pos(40, 25);388     printf("              C语言研究中心  .\n");389     system("pause");390     system("cls");391     Pos(25, 12);392     printf("用↑.↓.←.→分别控制蛇的移动, F1 为加速,2 为减速\n");393     Pos(25, 13);394     printf("加速将能得到更高的分数。\n");395     system("pause");396     system("cls");397 }398 399 void endGame()//结束游戏400 {401 402     system("cls");403     Pos(24, 12);404     if (endGamestatus == 1)405     {406         printf("对不起,您撞到墙了。游戏结束.");407     }408     else if (endGamestatus == 2)409     {410         printf("对不起,您咬到自己了。游戏结束.");411     }412     else if (endGamestatus == 3)413     {414         printf("您的已经结束了游戏。");415     }416     Pos(24, 13);417     printf("您的得分是%d\n", score);418     while (getchar() != 'y')419     {    

420         printf("close?[y]");421     }422     exit(0);423 }424 425 void gameStart()//游戏初始化426 {427     system("mode con cols=100 lines=30");428     initGame();429     creatMap();430     initSnake();431     createFood();432 }433 434 int main()435 {436     gameStart();437     runGame();438     endGame();439     return 0;440 }

求在VC++6.0中运行的贪吃蛇代码

#包括 stdio, h

#包括 process。H

#包括 Windows。H

#包括 conio。H

#包括时间。H

#包括 stdlib。H

#defineWIDTH40

#defineHEIGH12

枚举方向{//方向

离开了,

对的,

向上

};

StructFood{//食品

Intx;

Inty;

};

{//绘制蛇体

intx;

inty;

structNode*next;

};

structSnake{//蛇属性du

intlenth;//长度

enumdirectiondir;//方向

};

structFood*food;//食物

structSnake*snake;//蛇属性

structNode*snode,*tail;//蛇身

intSPEECH=200;

intscore=0;//分数

intsmark=0;//吃食物标zhi记

inttimes=0;

intSTOP=0;

voidInitfood();//产生食物

voidInitsnake();//构造snake

voidEatfood();//头部前进

voidAddnode(intx,inty);//增加蛇身

voiddisplay(structNode*shead);//显示蛇身坐dao标

voidmove();//蛇移动

voiddraw();//画蛇

voidHomepage();//主页

voidkeybordhit();//监控键盘按键

voidAddtail();//吃到食物

voidgotoxy(intx,inty)//定位光标

COORDpos;

pos.X=x-1;

pos.Y=y-1;

SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);

voidInitsnake()//构造snake

inti;

snake=(structSnake*)malloc(sizeof(structSnake));

tail=(structNode*)malloc(sizeof(structNode));

food=(structFood*)malloc(sizeof(structFood));

snake-lenth=5;//初始长度 5

snake-dir=RIGHT;//初始蛇头方向 右

for(i=2;i=snake-lenth+2;i++)//增加 5 个结点

Addnode(i,2);

voidInitfood()//产生食物

structNode*p=snode;

intmark=1;

srand((unsigned)time(NULL));//以时间为种子产生随机数

while(1)

food-x=rand()%(WIDTH-2)+2;//食物X坐标

food-y=rand()%(HEIGH-2)+2;//食物Y坐标

while(p!=NULL)

if((food-x==p-x)(food-y==p-y))//如果食物产生在蛇身上

{//则重新生成食物

mark=0;//食物生成无效

break;

p=p-next;

if(mark==1)//如果食物不在蛇身上,生成食物,否则重新生成食物

gotoxy(food-x,food-y);

printf("%c",3);

break;

mark=1;

p=snode;

voidmove()//移动

structNode*q,*p=snode;

if(snake-dir==RIGHT)

Addnode(p-x+1,p-y);

if(smark==0)

while(p-next!=NULL)

q=p;

p=p-next;

q-next=NULL;

free(p);

if(snake-dir==LEFT)

Addnode(p-x-1,p-y);

if(smark==0)

while(p-next!=NULL)

q=p;

p=p-next;

q-next=NULL;

free(p);

if(snake-dir==UP)

Addnode(p-x,p-y-1);

if(smark==0)

while(p-next!=NULL)

q=p;

p=p-next;

q-next=NULL;

free(p);

if(snake-dir==DOWN)

Addnode(p-x,p-y+1);

if(smark==0)

while(p-next!=NULL)

q=p;

p=p-next;

q-next=NULL;

free(p);

voidAddnode(intx,inty)//增加蛇身

structNode*newnode=(structNode*)malloc(sizeof(structNode));

structNode*p=snode;

newnode-next=snode;

newnode-x=x;

newnode-y=y;

snode=newnode;//结点加到蛇头

if(x2||x=WIDTH||y2||y=HEIGH)//碰到边界

STOP=1;

gotoxy(10,19);

printf("撞墙,游戏结束,任意键退出!\n");//失败

_getch();

free(snode);//释放内存

free(snake);

exit(0);

while(p!=NULL)//碰到自身

if(p-next!=NULL)

if((p-x==x)(p-y==y))

STOP=1;

gotoxy(10,19);

printf("撞到自身,游戏结束,任意键退出!\n");//失败

_getch();

free(snode);//释放内存

free(snake);

exit(0);

p=p-next;

voidEatfood()//吃到食物

Addtail();

score++;

voidAddtail()//增加蛇尾

structNode*newnode=(structNode*)malloc(sizeof(structNode));

structNode*p=snode;

tail-next=newnode;

newnode-x=50;

newnode-y=20;

newnode-next=NULL;//结点加到蛇头

tail=newnode;//新的蛇尾

voiddraw()//画蛇

structNode*p=snode;

inti,j;

while(p!=NULL)

gotoxy(p-x,p-y);

printf("%c",2);

tail=p;

p=p-next;

if(snode-x==food-xsnode-y==food-y)//蛇头坐标等于食物坐标

smark=1;

Eatfood();//增加结点

Initfood();//产生食物

if(smark==0)

gotoxy(tail-x,tail-y);//没吃到食物清除之前的尾结点

printf("%c",'');//如果吃到食物,不清楚尾结点

else

times=1;

if((smark==1)(times==1))

gotoxy(tail-x,tail-y);//没吃到食物清除之前的尾结点

printf("%c",'');//如果吃到食物,不清楚尾结点

smark=0;

gotoxy(50,12);

printf("食物: %d,%d",food-x,food-y);

gotoxy(50,5);

printf("分数:%d",score);

gotoxy(50,7);

printf("速度:%d",SPEECH);

gotoxy(15,14);

printf("按o键加速");

gotoxy(15,15);

printf("按p键减速");

gotoxy(15,16);

printf("按空格键暂停");

voidHideCursor()//隐藏光标

CONSOLE_CURSOR_INFOcursor_info={1,0};

SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), cursor_info);

voidHomepage()//绘主页

intx,y;

HideCursor();//隐藏光标

printf("----------------------------------------\n");

printf("|\t\t\t\t|\n");

printf("|\t\t\t\t|\n");

printf("|\t\t\t\t|\n");

printf("|\t\t\t\t|\n");

printf("|\t\t\t\t|\n");

printf("|\t\t\t\t|\n");

printf("|\t\t\t\t|\n");

printf("|\t\t\t\t|\n");

printf("|\t\t\t\t|\n");

printf("|\t\t\t\t|\n");

printf("----------------------------------------\n");

gotoxy(5,13);

printf("任意键开始游戏!按W.A.S.D控制方向");

_getch();

Initsnake();

Initfood();

gotoxy(5,13);

printf("");

voidkeybordhit()//监控键盘

charch;

if(_kbhit())

ch=getch();

switch(ch)

case'W':

case 'w':if(snake-dir==DOWN)//如果本来方向是下,而按相反方向无效

break;

else

snake-dir=UP;break;

case'A':

case 'a':if(snake-dir==RIGHT)//如果本来方向是右,而按相反方向无效

break;

else

snake-dir=LEFT;break;

case'S':

case 's':if(snake-dir==UP)//如果本来方向是上,而按相反方向无效

break;

else

snake-dir=DOWN;break;

case'D':

case 'd':if(snake-dir==LEFT)//如果本来方向是左,而按相反方向无效

break;

else

snake-dir=RIGHT;break;

case'O':

case'o':

if(SPEECH=150)//速度加快

SPEECH=SPEECH-50;

break;

case'P':

case'p':

if(SPEECH=400)//速度减慢

SPEECH=SPEECH+50;

break;

case''://暂停

gotoxy(15,18);

printf("游戏已暂停,按任意键恢复游戏");

system("pausenul");

gotoxy(15,18);

printf("");

break;

default:break;

intmain(void)//程序入口

Homepage();

while(!STOP)

keybordhit();//监控键盘按键

move();//蛇的坐标变化

draw();//蛇的重绘

Sleep(SPEECH);//暂时挂起线程

return0;

扩展资料:

注意事项:

1.代码将源信息转换为易于通信或存储的符号。译码(译码)是还原和译码的过程,它将代码符号转换为接受者能够理解的形式。

2.编码的原因之一是为了在普通语言(口头或书面)难以实现的情况下进行交流。例如,一面旗帜可以用一个特定的标记来表达一个特定的信息,而站在远处的另一个人可以解释标记来重现该信息。

C语言的贪吃蛇源代码

 

//******友情提示:如想速度快点,请改小_sleep(500)函数中参数*****  

#include stdio.h  

#include stdlib.h  

#include conio.h  

#include string.h  

#include time.h  

const int H = 8;   //地图的高  

const int L = 16;  //地图的长  

char GameMap[H][L];   //游戏地图  

int  key;  //按键保存  

int  sum = 1, over = 0;  //蛇的长度, 游戏结束(自吃或碰墙)  

int  dx[4] = {0, 0, -1, 1};  //左、右、上、下的方向  

int  dy[4] = {-1, 1, 0, 0};  

struct Snake   //蛇的每个节点的数据类型  

{  

 int x, y;  //左边位置  

 int now;   //保存当前节点的方向, 0,1,2,3分别为左右上下  

}Snake[H*L];  

const char Shead = '@';  //蛇头  

const char Sbody = '#';  //蛇身  

const char Sfood = '*';  //食物  

const char Snode = '.';  //'.'在地图上标示为空  

void Initial();  //地图的初始化  

void Create_Food(); //在地图上随机产生食物  

void Show();   //刷新显示地图  

void Button();  //取出按键,并判断方向  

void Move();   //蛇的移动  

void Check_Border();  //检查蛇头是否越界  

void Check_Head(int x, int y);   //检查蛇头移动后的位置情况  

int main()   

{  

 Initial();  

 Show();  

 return 0;  

}  

void Initial()  //地图的初始化  

{  

 int i, j;  

 int hx, hy;  

 system("title 贪吃蛇");  //控制台的标题  

 memset(GameMap, '.', sizeof(GameMap));  //初始化地图全部为空'.'  

 system("cls");  

 srand(time(0));   //随机种子  

 hx = rand()%H;    //产生蛇头  

 hy = rand()%L;  

 GameMap[hx][hy] = Shead;  

 Snake[0].x = hx;  Snake[0].y = hy;  

 Snake[0].now = -1;  

 Create_Food();   //随机产生食物  

 for(i = 0; i  H; i++)   //地图显示  

 {   

  for(j = 0; j  L; j++)  

   printf("%c", GameMap[i][j]);  

  printf("\n");  

 }  

     

 printf("\n小小C语言贪吃蛇\n");  

 printf("按任意方向键开始游戏\n");  

    

 getch();   //先接受一个按键,使蛇开始往该方向走  

 Button();  //取出按键,并判断方向  

}  

void Create_Food()  //在地图上随机产生食物  

{  

 int fx, fy;  

 while(1)  

 {  

  fx = rand()%H;  

     fy = rand()%L;  

     

  if(GameMap[fx][fy] == '.')  //不能出现在蛇所占有的位置  

  {   

   GameMap[fx][fy] = Sfood;  

      break;  

  }  

 }  

}  

void Show()  //刷新显示地图  

{  

 int i, j;  

 while(1)  

 {    

  _sleep(500); //延迟半秒(1000为1s),即每半秒刷新一次地图  

  Button();   //先判断按键在移动  

  Move();  

  if(over)  //自吃或碰墙即游戏结束  

  {   

   printf("\n**游戏结束**\n");  

   printf("     _\n");  

   getchar();  

      break;  

  }  

  system("cls");   //清空地图再显示刷新吼的地图  

  for(i = 0; i  H; i++)   

  {   

   for(j = 0; j  L; j++)  

    printf("%c", GameMap[i][j]);  

   printf("\n");  

  }  

     

  printf("\n小小C语言贪吃蛇\n");  

  printf("按任意方向键开始游戏\n");  

 }  

}  

void Button()  //取出按键,并判断方向  

{  

 if(kbhit() != 0) //检查当前是否有键盘输入,若有则返回一个非0值,否则返回0  

 {   

  while(kbhit() != 0)  //可能存在多个按键,要全部取完,以最后一个为主  

      key = getch(); //将按键从控制台中取出并保存到key中  

  switch(key)  

  {   //左  

   case 75:  Snake[0].now = 0;  

          break;  

            //右  

            case 77:  Snake[0].now = 1;       

          break;  

            //上  

   case 72:  Snake[0].now = 2;  

          break;  

            //下  

   case 80:  Snake[0].now = 3;  

          break;  

  }  

 }  

}  

void Move()   //蛇的移动  

{  

 int i, x, y;  

    int t = sum;  //保存当前蛇的长度  

 //记录当前蛇头的位置,并设置为空,蛇头先移动  

 x = Snake[0].x;  y = Snake[0].y;  GameMap[x][y] = '.';  

 Snake[0].x = Snake[0].x + dx[ Snake[0].now ];  

 Snake[0].y = Snake[0].y + dy[ Snake[0].now ];  

 Check_Border();   //蛇头是否越界  

 Check_Head(x, y);  //蛇头移动后的位置情况,参数为: 蛇头的开始位置  

 if(sum == t)  //未吃到食物即蛇身移动哦  

    for(i = 1; i  sum; i++)  //要从蛇尾节点向前移动哦,前一个节点作为参照  

 {  

  if(i == 1)   //尾节点设置为空再移动  

   GameMap[ Snake[i].x ][ Snake[i].y ] = '.';  

     

  if(i == sum-1)  //为蛇头后面的蛇身节点,特殊处理  

  {  

   Snake[i].x = x;  

         Snake[i].y = y;  

      Snake[i].now = Snake[0].now;  

  }  

  else   //其他蛇身即走到前一个蛇身位置  

  {  

   Snake[i].x = Snake[i+1].x;  

         Snake[i].y = Snake[i+1].y;  

      Snake[i].now = Snake[i+1].now;  

  }  

      

  GameMap[ Snake[i].x ][ Snake[i].y ] = '#'; //移动后要置为'#'蛇身   

 }  

}  

void Check_Border()  //检查蛇头是否越界  

{  

 if(Snake[0].x  0 || Snake[0].x = H  

 || Snake[0].y  0 || Snake[0].y = L)  

     over = 1;  

}  

void Check_Head(int x, int y)  //检查蛇头移动后的位置情况  

{  

    

 if(GameMap[ Snake[0].x ][ Snake[0].y ] == '.')  //为空  

  GameMap[ Snake[0].x ][ Snake[0].y ] = '@';  

 else 

  if(GameMap[ Snake[0].x ][ Snake[0].y ] == '*')  //为食物  

  {  

   GameMap[ Snake[0].x ][ Snake[0].y ] = '@';    

   Snake[sum].x = x;   //新增加的蛇身为蛇头后面的那个  

      Snake[sum].y = y;  

      Snake[sum].now = Snake[0].now;  

         GameMap[ Snake[sum].x ][ Snake[sum].y ] = '#';   

   sum++;  

   Create_Food();  //食物吃完了马上再产生一个食物  

  }  

  else 

   over = 1;  

}

Python游戏开发,Python实现贪吃蛇小游戏与吃豆豆 附带源码

Python版本: 3.6.4

相关模块:

pygame模块;

以及一些Python自带的模块。

安装Python并添加到环境变量,pip安装需要的相关模块即可。

贪吃蛇的 游戏 规则应该不需要我多做介绍了吧T_T。写个贪吃蛇 游戏 其实还是很简单的。首先,我们进行一下 游戏 初始化:

然后定义一个贪吃蛇类:

其中head_coord用来记录蛇头所在位置,而tail_coords是一个二维数组,用来记录所有蛇身的位置。一开始,贪吃蛇长为3,并且位置是随机生成的。用户通过 键来控制贪吃蛇的行动:

需要注意的是,贪吃蛇不能180 大拐弯,只能90 地拐弯。例如正在向左行动的贪吃蛇不能瞬间变成向右行动。具体而言,代码实现如下:

然后,我们需要随机生成一个食物,且需要保证该食物的位置不与贪吃蛇的位置相同:

在更新贪吃蛇的时候,如果它吃到了食物,则蛇身长加一,否则只是简单的按照给定的方向行动而不改变蛇身长度:

同时,当贪吃蛇吃到食物时,需要重新生成一个新的食物:

最后,当贪吃蛇碰到墙壁或者蛇头碰到蛇身时, 游戏 结束:

并显示一下 游戏 结束界面:

玩家通过 键控制 游戏 的主角吃豆人吃掉藏在迷宫内的所有豆子,并且不能被鬼魂抓到。

若能顺利吃完迷宫内的所有豆子并且不被鬼魂抓到,则 游戏 胜利,否则 游戏 失败。

逐步实现:

Step1:定义 游戏 精灵类

首先,让我们先来明确一下该 游戏 需要哪些 游戏 精灵类。

① 墙类

② 食物类(即豆豆)

③ 角色类

角色类包括吃豆人和鬼魂,鬼魂由电脑控制其运动轨迹,吃豆人由玩家控制其运动轨迹。

显然,其均需具备更新角色位置和改变角色运动方向的能力,其源代码如下:

Step2:设计 游戏 地图

利用Step1中定义的 游戏 精灵类,我们就可以开始设计 游戏 地图了。由于时间有限,我只写了一个关卡的 游戏 地图,有兴趣的小伙伴可以在此基础上进行扩展(在我的源代码基础上进行扩展是很方便滴~)。 游戏 地图的设计包括以下四方面内容:

① 创建墙

② 创建门(一开始关幽灵用的)

image.gif

③ 创建角色

④ 创建食物

因为食物不能和墙、门以及角色的位置重叠,所以为了方便设计 游戏 地图,要先创建完墙、门以及角色后再创建食物:

Step3:设计 游戏 主循环

接下来开始设计 游戏 主循环。首先是初始化:

然后定义主函数:

其中startLevelGame函数用于开始某一关 游戏 ,其源代码如下:

showText函数用于在 游戏 结束或关卡切换时在 游戏 界面中显示提示性文字,其源代码如下:

关于贪吃蛇源代码和贪吃蛇源代码java的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

版权说明:如非注明,本站文章均为 AH站长 原创,转载请注明出处和附带本文链接;

本文地址:http://ahzz.com.cn/post/416.html


取消回复欢迎 发表评论:

分享到

温馨提示

下载成功了么?或者链接失效了?

联系我们反馈

立即下载