完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
#include "STM32f10x.h"
#include "gui.h" #include "delay.h" #include "snake.h" #include "lcd_ssd1289.h" #include "stdlib.h" #include "key.h" int score; struct Food { int x;/*食物的横坐标*/ int y;/*食物的纵坐标*/ int yes;/*判断是否要出现食物的变量*/ }food; /*食物的结构体*/ struct Snake { int x[M]; int y[M]; int node;/*蛇的节数*/ int direction;/*蛇移动方向*/ int life;/* 蛇的生命,0活着,1死亡*/ }snake; /*开始画面,左上角坐标为(10,40),右下角坐标为(310,230)的围墙*/ void DrawK(void) { GUI_FillRect(0,0,320,10); GUI_FillRect(0,0,10,240); GUI_FillRect(0,230,320,240); GUI_FillRect(310,0,320,240); } /*玩游戏具体过程*/ void GamePlay(void) { TYPEDEF_KEY key; unsigned char i; key = KEY_NULL; key = GetKey(); rand();/*随机数发生器*/ food.yes=1;/*1表示需要出现新食物,0表示已经存在食物*/ snake.life=0;/*活着*/ snake.direction=1;/*方向往右*/ snake.x[0]=100;snake.y[0]=100;/*蛇头*/ snake.x[1]=110;snake.y[1]=100; snake.node=2;/*节数*/ PrScore();/*输出得分*/ while(1) { while(key == KEY_NULL)/*在没有按键的情况下,蛇自己移动身体*/ { if(food.yes==1)/*需要出现新食物*/ { food.x=rand()%400+60; food.y=rand()%350+60; while(food.x%10!=0)/*食物随机出现后必须让食物能够在整格内,这样才可以让蛇吃到*/ food.x++; while(food.y%10!=0) food.y++; food.yes=0;/*画面上有食物了*/ } if(food.yes==0)/*画面上有食物了就要显示*/ { GUI_FillRect(food.x,food.y,food.x+10,food.y-10); } for(i=snake.node-1;i>0;i--)/*蛇的每个环节往前移动,也就是贪吃蛇的关键算法*/ { snake.x[i]=snake.x[i-1]; snake.y[i]=snake.y[i-1]; } /*1,2,3,4表示右,左,上,下四个方向,通过这个判断来移动蛇头*/ switch(snake.direction) { case 1:snake.x[0]+=10;break; case 2: snake.x[0]-=10;break; case 3: snake.y[0]-=10;break; case 4: snake.y[0]+=10;break; } for(i=3;i if(snake.x[i]==snake.x[0]&&snake.y[i]==snake.y[0]) { GameOver();/*显示失败*/ snake.life=1; break; } } if(snake.x[0]<10||snake.x[0]>310||snake.y[0]<10|| snake.y[0]>230)/*蛇是否撞到墙壁*/ { GameOver();/*本次游戏结束*/ snake.life=1; /*蛇死*/ } if(snake.life==1)/*以上两种判断以后,如果蛇死就跳出内循环,重新开始*/ break; if(snake.x[0]==food.x&&snake.y[0]==food.y)/*吃到食物以后*/ { /*把画面上的食物东西去掉*/ GUI_ClearRect(food.x,food.y,food.x+10,food.y-10); snake.x[snake.node]=-20;snake.y[snake.node]=-20; /*新的一节先放在看不见的位置,下次循环就取前一节的位置*/ snake.node++;/*蛇的身体长一节*/ food.yes=1;/*画面上需要出现新的食物*/ score+=10; PrScore();/*输出新得分*/ } /*画出蛇*/ for(i=0;i GUI_FillRect(snake.x[i],snake.y[i],snake.x[i]+10, snake.y[i]-10); } Delay_ms(1000);/*游戏速度自己调整*/ //去除去除蛇的的最后一节* GUI_ClearRect(snake.x[snake.node-1],snake.y[snake.node-1], snake.x[snake.node-1]+10,snake.y[snake.node-1]-10); /*判断是否往相反的方向移动*/ if(key==KEY_1&&snake.direction!=4) snake.direction=3; else if(key==KEY_2&&snake.direction!=2) snake.direction=1; else if(key==KEY_3&&snake.direction!=1) snake.direction=2; else if(key==KEY_4&&snake.direction!=3) snake.direction=4; } } } /*游戏结束*/ void GameOver(void) { // GUI_Clear(); GUI_DispStringAt("GAME OVER!",100,80); PrScore();/*输出得分*/ } /*输出成绩*/ void PrScore(void) { GUI_DispDecAt( score, 100,20,10); } |
|
相关推荐
3个回答
|
|
|
|
|
|
`````````
|
|
|
|
求大神编写宝马版的LPC1768的贪吃蛇游戏啊。。。。感激涕零。。。。
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
787 浏览 0 评论
飞凌嵌入式ElfBoard ELF 1板卡-mfgtools烧录流程介绍之烧写所需镜像
888 浏览 0 评论
飞凌嵌入式ElfBoard ELF 1板卡-mfgtools烧录流程之烧写方法
608 浏览 0 评论
飞凌嵌入式ElfBoard ELF 1板卡-内核编译之初次编译
905 浏览 0 评论
飞凌嵌入式ElfBoard ELF 1板卡-内核源代码的目录结构和文件说明
821 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 09:18 , Processed in 0.575465 second(s), Total 76, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号