您好,欢迎访问三七文档
嵌入式实验报告嵌入式实验报告题目名称贪吃蛇设计小组成员陈建能E08610308钟勋E08610128指导老师沈军民上交时间2011年6月16日一、实验目的1.了解和掌握嵌入式系统原理及程序编写2.用嵌入式系统设计简单的游戏二、实验内容及要求本实验利用嵌入式开发系统设计一个贪吃蛇的小游戏。采用32位ARM处理器。一开始出现2节的蛇,一个随机的食物,右边显示游戏名称,游戏的时间(60秒倒计时),游戏的等级,游戏的本次得分和最高分。通过按键上下左右来控制蛇,让他吃到相应的食物,吃到后得分加1,蛇身体变长一截。若吃到了3个食物,则等级升一级,蛇的运动速度加快,障碍物的数量也加多,时间重新60秒计时。若蛇碰到了它本身,或者碰到了墙壁则游戏结束,游戏结束后,按下按键或者点几下触摸屏则重新开始游戏。三、实验程序#includestdlib.h#includemath.h#includeGUI.h#includeoption.h#includedef.h#include44b.h#include44blib.h/************************************************************************//*宏*//************************************************************************/#defineGAME_WIDTH23#defineGAME_HEIGHT23#defineSNAKE_LENGTH100/************************************************************************//*类型定义*//************************************************************************/typedefstruct_SNAKE{intx;inty;}SNAKE;typedefstruct{intx;inty;intneed;}FOOD;typedefenum{LEFT=1,TOP,RIGHT,BOTTOM}DIRECT;structobstacle{intx;inty;}ob[10];intlen;/************************************************************************//*全局变量*//************************************************************************/SNAKEsnake[SNAKE_LENGTH];intlength;inta1,b1,c1,d1;FOODfood;DIRECTdirect=LEFT;intGameSpeed=500;intScore=0;inttime;intcount=0;intlevel=1;inthigh_score=0;intflag=0,flag1;intspeed;U8which_key;/************************************************************************//*函数申明*//************************************************************************/voidSnake_DrawK(void);voidSnake_DrawBody(SNAKE*p);voidSnake_DrawHead();voidSnake_DrawTail();voidSnake_Delete(SNAKE*p);voidSnake_Food();voidSnake_GameOver(void);voidSnake_Game(void);voidSnake_Score(void);voidSnake1();voidSnake_start();voidGet_obs();voidDelay1(inttime);/************************************************************************//*函数实现*//************************************************************************/voidSnake_Init(void){srand(1000);snake-x=rand()%(GAME_WIDTH-4)+2;snake-y=rand()%(GAME_HEIGHT-4)+2;switch(rand()%4){case0:snake[1].x=snake-x-1;snake[1].y=snake-y;direct=RIGHT;break;case1:snake[1].x=snake-x+1;snake[1].y=snake-y;direct=LEFT;break;case2:snake[1].x=snake-x;snake[1].y=snake-y-1;direct=BOTTOM;break;case3:snake[1].x=snake-x;snake[1].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();Snake_DrawTail();}//绘制蛇身体的一截voidSnake_DrawBody(SNAKE*p){intx0,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);}//绘制蛇头voidSnake_DrawHead(){intx0,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);}//绘制蛇尾voidSnake_DrawTail(){intx0,y0;x0=snake[length-1].x*10+5;y0=snake[length-1].y*10+5;GUI_SetColor(GUI_GREEN);//GUI_FillCircle(x0+5,y0+5,4);GUI_FillRect(x0,y0,x0+9,y0+9);}//隐藏蛇尾voidSnake_Delete(SNAKE*p){intx0,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);}//生成食物voidSnake_Food(){intx0,y0,i,j;//如果需要食物则产生一个食物if(food.need){do{//生成一个随机位置,但是这个位置不能是蛇身上的位置food.x=rand()%23;food.y=rand()%23;for(j=0;jlen;j++){if(ob[j].x==food.x&&ob[j].x==food.y)break;}for(i=0;ilength;i++){if(snake[i].x==food.x&&snake[i].y==food.y){break;}}//如果食物的位置没有在蛇身上,则退出while循环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)的围墙*/voidSnake_DrawK(void){constGUI_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_DrawLine(49,50,49,100);*/GUI_SetColor(GUI_GREEN);GUI_DispStringAt(Thegame:,240,20);GUI_DispStringAt(Snake,260,40);}voidGet_obs(intt){inti,a0,b0;srand(100+100*t);for(i=0;ilen;i++){ob[i].x=rand()%23;ob[i].y=rand()%23;}for(i=0;ilen;i++){a0=ob[i].x*10+5;b0=ob[i].y*10+5;GUI_SetColor(GUI_GREEN);GUI_FillRect(a0,b0,a0+10,b0+10);}}/*玩游戏具体过程*/voidSnake_Game(void){inti;loop:while(1){while(1){Snake1();//蛇身移动一下for(i=length;i0;i--){snake[i]=snake[i-1];}//根据蛇头的运动方向寻找下一个位置//如果下一个位置超出了边界则gameoverif(direct==LEFT){snake-x--;flag1=1;for(i=0;ilen&&flag1;i++){if(ob[i].x==snake-x&&ob[i].y==snake-y)flag1=0;}if(snake-x0||flag1==0){Snake_GameOver();Snake_start();Snake_Init();gotoloop;}}if(direct==TOP){snake-y--;flag1=1;for(i=0;ilen&&flag1;i++){if(ob[i].x==snake-x&&ob[i].y==snake-y)flag1=0;}if(snake-y0||flag1==0){Snake_GameOver();Snake_start();Snake_Init();gotoloop;}}if(direct==RIGHT){snake-x++;flag1=1;for(i=0;ilen&&flag1;i++){if(ob[i].x==snake-x&&ob[i].y==snake-y)flag1=0;}if(snake-x=GAME_WIDTH||flag1==0){Snake_GameOver();Snake_start();S
本文标题:嵌入式之贪吃蛇
链接地址:https://www.777doc.com/doc-3760608 .html