贪吃蛇源代码(贪吃蛇源代码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站长 原创,转载请注明出处和附带本文链接;
相关推荐
- 05-043d校园源代码(3D虚拟校园)[20240504更新]
- 05-03php源代码大全(php的源代码)[20240503更新]
- 05-03bbs论坛源代码论文(个人论坛源码)[20240503更新]
- 05-03黄金矿工安桌源代码(黄金矿工编程代码)[20240503更新]
- 05-03关于txt各种源代码大全的信息[20240503更新]
- 05-03微信二维码源代码(微信二维码源代码怎么弄)[20240503更新]
- 05-03打印机监控源代码(打印机监控源代码怎么看)[20240503更新]
- 05-03新闻发布平台源代码(新闻app源码)[20240503更新]
- 05-03ios仿途牛app源代码(牛牛app源码)[20240503更新]
- 05-03报表源代码(web报表源代码)[20240503更新]
取消回复欢迎 你 发表评论:
- 标签列表
- 最近发表
- 友情链接