Linux嵌入式开发版贪吃蛇,嵌入式之贪吃蛇

《嵌入式之贪吃蛇》由会员分享,可在线阅读,更多相关《嵌入式之贪吃蛇(16页珍藏版)》请在人人文库网上搜索。

1、嵌入式实验报告嵌入式实验报告题目名称 贪吃蛇设计小组成员 陈建能 E钟勋 E指导老师 沈军民上交时间 2011年6月16日一、实验目的1. 了解和掌握嵌入式系统原理及程序编写2. 用嵌入式系统设计简单的游戏二、实验内容及要求本实验利用嵌入式开发系统设计一个贪吃蛇的小游戏。采用32位ARM处理器。一开始出现2节的蛇,一个随机的食物,右边显示游戏名称,游戏的时间(60秒倒计时),游戏的等级,游戏的本次得分和最高分。通过按键上下左右来控制蛇,让他吃到相应的食物,吃到后得分加1,蛇身体变长一截。若吃到了3个食物,则等级升一级,蛇的运动速度加快,障碍物的数量也加多,时间重新60秒计时。若蛇碰到了它本身,。

2、或者碰到了墙壁则游戏结束,游戏结束后,按下按键或者点几下触摸屏则重新开始游戏。三、实验程序#include stdlib.h#include math.h#include GUI.h#include option.h#include def.h#include 44b.h#include 44blib.h/*/* 宏 */*/#define GAME_WIDTH23#define GAME_HEIGHT23#define SNAKE_LENGTH100/*/* 类型定义 */*/typedef struct _SNAKEint x;int y;SNAKE;typedef structint x。

3、;int y;int need;FOOD; typedef enumLEFT=1,TOP,RIGHT,BOTTOMDIRECT;struct obstacleint x;int y;ob10;int len;/*/* 全局变量 */*/SNAKE snakeSNAKE_LENGTH;int length;int a1,b1,c1, d1;FOOD food;DIRECT direct=LEFT;int GameSpeed=500;int Score=0;int time ;int count = 0;int level = 1;int high_score = 0;int flag = 0, 。

4、flag1;int speed;U8 which_key;/*/* 函数申明 */*/void Snake_DrawK(void);void Snake_DrawBody(SNAKE *p);void Snake_DrawHead();void Snake_DrawTail();void Snake_Delete(SNAKE*p);void Snake_Food();void Snake_GameOver(void);void Snake_Game(void);void Snake_Score(void);void Snake1();void Snake_start();void Get_ob。

5、s();void Delay1(int time);/*/* 函数实现 */*/void Snake_Init(void)srand(1000);snake-x= rand()%(GAME_WIDTH-4)+2;snake-y= rand()%(GAME_HEIGHT-4)+2;switch(rand()%4)case 0:snake1.x= snake-x - 1;snake1.y= snake-y;direct = RIGHT;break;case 1:snake1.x= snake-x + 1;snake1.y= snake-y;direct = LEFT;break;case 2:sn。

6、ake1.x= snake-x;snake1.y= snake-y - 1;direct = BOTTOM;break;case 3:snake1.x= snake-x;snake1.y= snake-y + 1;direct = TOP;break;length = 2;Score = 0;time = 60;count = 0;flag = 0;level = 1;len = 2;speed = 800;GUI_Clear();food.need = 1;Snake_Food();Snake_DrawK();Get_obs(1);Snake_Score();Snake_DrawHead()。

7、;Snake_DrawTail();/绘制蛇身体的一截void Snake_DrawBody(SNAKE *p)int x0,y0;if(!p)return;x0 = p-x * 10 + 5;y0 = p-y * 10 + 5;GUI_SetColor(GUI_YELLOW);/GUI_FillCircle(x0+5,y0+5, 4);GUI_FillRect(x0,y0,x0+9,y0+9);/绘制蛇头void Snake_DrawHead()int x0,y0;x0 = snake-x * 10 + 5;y0 = snake-y * 10 + 5;GUI_SetColor(GUI_RED。

8、);GUI_FillCircle(x0+5,y0+5, 4);/GUI_FillRect(x0,y0,x0+9,y0+9);/绘制蛇尾void Snake_DrawTail()int x0,y0;x0 = snakelength-1.x * 10 + 5;y0 = snakelength-1.y * 10 + 5;GUI_SetColor(GUI_GREEN);/GUI_FillCircle(x0+5,y0+5, 4);GUI_FillRect(x0,y0,x0+9,y0+9);/隐藏蛇尾void Snake_Delete(SNAKE*p)int x0,y0;if(!p) return;x0 。

9、= p-x * 10 + 5;y0 = p-y * 10 + 5;GUI_SetColor(GUI_BLACK);/GUI_FillCircle(x0+5,y0+5, 4);GUI_FillRect(x0,y0,x0+10,y0+10);/生成食物void Snake_Food()int x0,y0,i,j;/如果需要食物则产生一个食物if (food.need)do /生成一个随机位置,但是这个位置不能是蛇身上的位置food.x = rand() % 23;food.y = rand() % 23;for(j = 0; j 0;i-)snakei = snakei-1;/根据蛇头的运动方向寻。

10、找下一个位置/如果下一个位置超出了边界则game overif (direct=LEFT)snake-x-;flag1 = 1;for(i = 0; i x & obi.y = snake-y)flag1 = 0;if(snake-xy-;flag1 = 1;for(i = 0; i x & obi.y = snake-y)flag1 = 0;if(snake-yx+;flag1 = 1;for(i = 0; i x & obi.y = snake-y)flag1 = 0;if(snake-x=GAME_WIDTH | flag1 = 0)Snake_GameOver();Snake_star。

11、t();Snake_Init();goto loop;if (direct=BOTTOM)snake-y+;flag1 = 1;for(i = 0; i x & obi.y = snake-y)flag1 = 0;if(snake-y=GAME_HEIGHT | flag1 = 0)Snake_GameOver();Snake_start();Snake_Init();goto loop;if(time = 0)Snake_GameOver();Snake_start();Snake_Init();goto loop;/如果下一个位置撞在蛇身上了,game overfor (i=1;ix=sn。

12、akei.x & snake-y=snakei.y)Snake_GameOver();Snake_start();Snake_Init();goto loop;/如果吃了东西,吃了身体长长一段if (snake-x=food.x & snake-y=food.y)length+;food.need = 1;Snake_Food();Snake_Score();/如果缓冲区用完,那么就只能退出了if (length=SNAKE_LENGTH)return;/更新界面Snake_DrawHead();Snake_DrawTail();Snake_DrawBody(&snake1);Snake_De。

13、lete(&snakelength);GUI_SetColor(GUI_BLACK);GUI_FillRect(260,180, 300, 300);GUI_FillRect(260,80,300,110);GUI_FillRect(260,140,300,170);GUI_FillRect(260,200,300,230);Snake_Score();Delay1(speed);Snake1();/*/* 计算得分 */*/void Snake_Score(void)const GUI_FONT *oldfont;Score = (length-2);if(Score high_score)。

14、 high_score = Score;if(Score % 3 = 0 & Score != 0 & flag != Score) level+;flag = Score;speed-=100;time = 60;Get_obs(len+);if(count 0;time-)for(i=0;idelayLoopCount;i+) Snake1();四、程序结果游戏帮助简介如下:游戏初始画面如下:游戏结束后的画面如下:五、函数入口void Main(void)int i, a1, b1;rSYSCFG=CACHECFG; / Using 8KB Cache/Port_Init();Isr_In。

15、it();ChangePllValue( 56, 3, 1 ) ;Uart_Init(0,);Delay(0); GUI_Init(); Snake_Init();Snake_Game();while(1);六、实验展望:由于时间的原因,此款游戏还有很多的不足之处,也有些许预期的目标没有达到。因此提出以下几点展望,希望能够在未来的加工过后能够更加完善。第一,蛇和食物的模型问题,此款游戏紧紧只是用矩形和圆形代替了蛇及食物的模型,没有能够做到视觉上的浅显美观。第二,实验所用嵌入式触摸屏不够灵敏,调出来的触屏不准确,后来就直接改为了按键了。第三,没有用三维的效果。七、实验心得:经过了这么多次的嵌入式。

16、实验我们学会了很多,不管是从最简单的流水灯开始到按键,终端,触摸屏。由于爱好嵌入式,我还买了一块arm11玩。此次的贪吃蛇游戏是基于arm7的,效果没有arm11好。相信在暑假,我可以在arm11上也跑起来。总的来说,一开始不知道头绪,但是事情总有解决的时候,通过学ucgui的基础,画线,画图,写字。慢慢的开始了解了,喜欢了。开始了贪吃蛇的整个过程。虽然每个晚上花费很多的时间去调程序,但是乐在其中。因为谁都知道,当一个个问题解决时,那种激动和成就感。第一个晚上,学习了基础,掌握了ucgui的基础。第二个晚上迫不及待地来到实验室,接着搞出了个贪吃蛇的画面,在没人去做游戏的时候,第一个弄出来图形,。

17、觉得很开心。第三个晚上,来到实验室,准备让小蛇动起来。但是无论我怎么调,他就是不动,最后用了按键,蛇动了,能吃食物了,那个激动啊!带着自信第四个晚上我们再次出现在实验室。这次实验室人多了起来。当我在玩我的贪吃蛇的时候,别人那个羡慕,让我更加有成就感和自信心。接着我们开始要完善我们的蛇。于是等级啊,倒计时啊。最高分啊。统统加了进去,完善的蛇出现了。心里舒了口气,终于可以好好复习其他的科目了。做事就要做得完美。第五个晚上,怎么也要加大游戏难度,于是就添加了障碍物的功能。很顺的就完成了程序。随着等级的不断提高,障碍物的个数不断加多。终于把平时手机里的功能差不多都移植进去了。由于大一的时候喜欢编程,所以很熟悉C语言。所以我们遇到困难都很快地就能解决它。对于嵌入式的学习路还很漫长,这个仅仅只是一个开始。遇到困难并不可怕,怕的就是遇到了只会抱怨而不回去解决。我们遇到了很多困难,但是我们没有放弃,最终以最快的速度解决了问题,完成了任务。其实,无论做什么事多是这样。成功永远站在不服输的人那边。

你可能感兴趣的:(Linux嵌入式开发版贪吃蛇)