嵌入式之贪吃蛇_第1页
嵌入式之贪吃蛇_第2页
嵌入式之贪吃蛇_第3页
嵌入式之贪吃蛇_第4页
嵌入式之贪吃蛇_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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

2、的数量也加多,时间重新60 秒计时。若蛇碰到了它本身,或者碰到了墙壁则游戏结束,游戏结束后,按下按键或者点几下触摸屏则重新开始游戏。三、实验程序#include stdlib.h #include math.h #include gui.h #include option.h #include def.h #include 44b.h #include 44blib.h /*/ /* 宏*/ /*/ #define game_width 23 #define game_height 23 #define snake_length 100 /*/ /* 类型定义*/ /*/ typedef st

3、ruct _snake int x; int y; snake; typedef struct int x; int y; int need; food; typedef enum left=1,top,right,bottom direct; struct obstacle int 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

4、=0; int time ; int count = 0; int level = 1; int high_score = 0; int flag = 0, 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(voi

5、d); void snake_game(void); void snake_score(void); void snake1(); void snake_start(); void get_obs(); 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; sn

6、ake1.y = snake-y; direct = right; break; case 1: snake1.x = snake-x + 1; snake1.y = snake-y; direct = left; break; case 2: snake1.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; co

7、unt = 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(); 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);

8、/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); 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;

9、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 = 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

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 len; j+) if(obj.x = food.x & obj.x = food.y) break; for (i=0;ilength;i+) if(snakei.x=food.x & snakei.y=food.y) break; /如果食物的位置没有在蛇身上,则退出w

11、hile 循环if(i=length & j = len) break; while (food.need); /将食物显示到屏幕上x0 = food.x * 10 + 5; y0 = food.y * 10 + 5; gui_setcolor(gui_magenta); /gui_fillrect(x0,y0,x0+10,y0+10); gui_drawcircle(x0+5,y0+5, 4); /清除需要食物的标志food.need = 0; /*开始画面,左上角坐标为(5,5) ,右下角坐标为(235,235)的围墙 */ void snake_drawk(void) const

12、 gui_font *oldfont; oldfont = gui_setfont(&gui_font8x8); /*setbkcolor(lightgreen);*/ gui_setcolor(gui_red); gui_setlinestyle(gui_ls_solid); gui_drawrect(4,4,236,236); gui_drawrect(3,3,237,237); gui_drawrect(2,2,238,238); /*gui_drawline(50, 50, 50, 100 ); gui_drawline(51, 50, 51, 100 ); gui_drawl

13、ine(49, 50, 49, 100 ); */ gui_setcolor(gui_green); gui_dispstringat(the game:,240,20); gui_dispstringat(snake,260,40); void get_obs(int t) int i, a0, b0; srand(100+100*t); for(i = 0; i len; i+) obi.x = rand()% 23; obi.y = rand()% 23; for(i = 0; i 0;i-) snakei = snakei-1; /根据蛇头的运动方向寻找下一个位置/如果下一个位置超出了

14、边界则game over if (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();

15、 snake_start(); 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; /如果下一

16、个位置撞在蛇身上了,game over for (i=1;ix=snakei.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_drawhe

17、ad(); snake_drawtail(); snake_drawbody(&snake1); snake_delete(&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 sn

18、ake_score(void) const gui_font *oldfont; score = (length-2); if(score high_score) 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(); 四、程序结果游戏帮助简介如下:游戏初始画面如下:游戏结束后的画

19、面如下:五、函数入口void main(void) int i, a1, b1; rsyscfg=cachecfg; / using 8kb cache/ port_init(); isr_init(); changepllvalue( 56, 3, 1 ) ; uart_init(0,115200); delay(0); gui_init(); snake_init(); snake_game(); while(1); 六、实验展望:由于时间的原因, 此款游戏还有很多的不足之处, 也有些许预期的目标没有达到。因此提出以下几点展望, 希望能够在未来的加工过后能够更加完善。第一,蛇和食物的模型问题,此款游戏紧紧只是用矩形和圆形代替了蛇及食物的模型,没有能够做到视觉上的浅显美观。第二,实验所用嵌入式触摸屏不够灵敏,调出来的触屏不准确,后来就直接改为了按键了。第三,没有用三维的效果。七、实验心得:经过了这么多次的嵌入式实验我们学会了很多,不管是从最简单的流水灯开始到按键,终端,触摸屏。由于爱好嵌入式,我还买了一块arm11玩。此次的贪吃蛇游戏是基于arm7 的,效果没有arm11好。相信在暑假,我可以在arm11上也

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论