首页 嵌入式系统课程设计——贪吃蛇

嵌入式系统课程设计——贪吃蛇

举报
开通vip

嵌入式系统课程设计——贪吃蛇/***********************************************************************************************************文件作者:ARM开发小组*创建日期:2004/06/25*版本声明:v1.0.0・*J・******************************************************************************J*****************************...

嵌入式系统课程设计——贪吃蛇
/***********************************************************************************************************文件作者:ARM开发小组*创建日期:2004/06/25*版本声明:v1.0.0・*J・******************************************************************************J******************************;*/#include"..\inc\config.h"#include#include#include#defineSTACKSIZE256OS_STK_DATAstk;externGUI_FONTCHINESE_FONT12;externGUI_FONTCHINESE_FONT16;externGUI_FONTGUI_Font8x16;OS_EVENT*Key_Mbox;/**************************************************************************************************************分配各任务的堆栈容量****************************************************************************************************************/OS_STKStack_Task_1[STACKSIZE];OS_STKStack_Task_2[STACKSIZE];OS_STKStack_Task_3[STACKSIZE];OS_STKStack_Task_4[STACKSIZE*3];/******************************************************************************//蛇的最大长度//蛇的方向******************************/#defineMAX_X200#defineMAX_Y200#defineUP1#defineDOWN2#defineLEFT3#defineRIGHT4#defineROW22// 表格 关于规范使用各类表格的通知入职表格免费下载关于主播时间做一个表格详细英语字母大小写表格下载简历表格模板下载 行数#defineCOLUMN22//表格列数//定义蛇的各项信息structSnake{S32x[MAX_X];S32y[MAX_Y];S32length;S32direction;S32life;}snake;structFood{intx;/*食物的横坐标*/inty;/*食物的纵坐标*/intyes;/*判断是否要出现食物的变量*/}food;/*食物的结构体*/0,0},//0{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},//1{0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0},//2{0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0},//3{0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0},//4{0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0},//5{0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0},//6{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},//7{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},//8{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},//9{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},//10{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},//11{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},//12{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},//13{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0},//15{0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0},//16{0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0},//17{0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0},//18{0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0},//19{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},//20{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}//21};S16map_2[22][22]{//{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21}{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},//0{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},//1{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},//2{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},//3{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},//4{1,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,{1,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,1},//6{1,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,1},//7{1,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,1},//8{1,0,0,0,0,1,1,1,1,1,0,0,1,1,1,1,1,0,0,0,0,1},//9{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},//10{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},//11{1,0,0,0,0,1,1,1,1,1,0,0,1,1,1,1,1,0,0,0,0,1},//12{1,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,1},//13{1,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,1},//14{1,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,1},//15{1,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,1},//16{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},//17{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},//18{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},//19{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1}//21};intoldDire=4;//记录前一个方向intscore=0;//分数intgametime=99;//时间intmapSelect=0;//关卡intgamespeed=0;//难度,速度1表示难度intkey_F=0;//标记F键intsetUnit=0;//设置游戏项,0表示关卡,intfoodIndex=0;//第几个食物intmySrand=0;voidDraw_GUI();//绘制游戏界面voidRandom_Food();//产生食物voidGameOver();//结束游戏voidNewGame();//新游戏voidPrScore();//输出新得分voidDspTime(INT32U);//显示倒计时voidDrawMap();//画障碍物voidCheckMap();//判断蛇是否撞到障碍物voidSet_SelectFace();//游戏设置voidDrawSetForm();//游戏设置键voidTask_2();/**************************************************************************************************************函数名称:Task_4(void*pdata)函数说明:GUI任务,优先级为56输入参数:pdata输出参数:无**************************************************************************************************************/voidTask_4(void*pdata){I32k=0;inti=0;intj=0;intx=0;inty=0;snake.life=0;//活着snake.x[0]=100;snake.y[0]=40;//蛇头snake.x[1]=80;snake.y[1]=40;//第一节蛇snake.x[2]=60;snake.y[2]=40;snake.length=3;//节数snake.direction=RIGHT;food.yes=0;while(1){if(score>=100){score=0;mapSelect++;Set_Color(GUI_GREEN);Set_Font(&CHINESE_FONT16);Disp_String(CN_start"恭喜你,进入下一关!"CN_end,240,240);OSTimeDly(200);NewGame();if(key_F==1)//是否进入游戏设置{//OSTimeDly(100);OSTimeDly(50000);}if(snake.x[0]==(food.x*20)+20&&snake.y[0]==(food.y*20)+20)/*吃到食物以后*/{Set_Color(GUI_WHITE);〃用白色去除蛇的的最后一节Fill_Rect((food.x*20)+20,(food.y*20)+20,(food.x*20)+40,(food.y*20)+40);snake.length++;//蛇的身体长一节food.yes=0;//画面上需要出现新的食物score+=10;PrScore();〃输出新得分}x=snake.x[snake.length-1];y=snake.y[snake.length-1];!!!for(i=snake.length-1;i>0;i--)//蛇的每个环节往前{snake.x[i]=snake.x[i-1];snake.y[i]=snake.y[i-1];}Set_Color(GUI_GREEN);〃画出蛇for(j=0;j440){snake.x[0]=20;}snake.y[0]=20;elseif(snake.y[0]<20){snake.y[0]=440;}if(gametime<=0)//时间到了{snake.life=1;//蛇死}Uart_Printf(">>>>>>>>>>>>>>>>>>>>>>snake.life=%d\n",snake.life);Uart_Printf(">>>>>>>>>>>>>>>>>>>>>>snake.direction=%d\n",snake.direction);if(snake.life==1)//蛇是否死了{GameOver();//本次游戏结束OSTimeDly(50000);}if(gamespeed==0)//易{for(k=0;k<10000000;k++);elseif(gamespeed==1)//中{for(k=0;k<1000000;k++);}elseif(gamespeed==2)//难{for(k=0;k<100000;k++);}else{for(k=0;k<10000000;k++);}Set_Color(GUI_WHITE);〃用灰色去除蛇的的最后一节Fill_Rect(x,y,x+20,y+20);OSTimeDly(10);}}/**************************************************************************************************************-函数名称:Task_3-函数说明:任务3,向串口发送数据-输入参数:pdata-输出参数:无**************************************************************************************************************/voidTask_3(void*pdata){for(;;){if(key_number!=0xff){Uart_Printf("key_number=%x\n",key_number);//任务的干得活儿就是向超级终端发送内容key_number=0xff;OSTimeDly(30);//延时100个节拍}//OSTimeDly(100);}}voidTask_1(void*pdata)INT8Uerr;INT8U*Key_P;INT8UKey_Val;intys=0;charcmapSelect[2];Timer1_Init();//打开时钟节拍,让操作系统跑起来//OSTaskCreate(Task_2,(void*)0,(OS_STK*)&Stack_Task_2[(STACKSIZ-E1)],9);//在任务里创建另一个任务//OSTaskCreate(Task_3,(void*)0,(OS_STK*)&Stack_Task_3[(STACKSIZE-)1],8);//在任务里创建另一个任务//在任务里创建另一个任务for(;;){//等待任务间的通信邮Key_P=OSMboxPend(Key_Mbox,0,&err);箱内的键值指针Key_Val=*Key_P;switch(Key_Val)//inttemp_mapSelect=0;//设置时,选择的关卡//inttemp_gamespeed=0;//设置时,选择的难度case0x05://GUI_StoreKey(GUI_KEY_UP);if(key_F==1){if(setUnit==0){mapSelect=1;//mapSelect++;//if(mapSelect==3)//{mapSelect=2;}}elseif(setUnit==1){gamespeed=1;//gamespeed++;//if(gamespeed==3)//{gamespeed=2;}}DrawSetForm();}break;//选择关卡//选择难易程度case0x06://GUI_StoreKey(GUI_KEY_UP);//上//下//右setUnit=0;DrawSetForm();}snake.direction=UP;break;case0x04://GUI_StoreKey(GUI_KEY_DOWN);if(key_F==1){setUnit=1;DrawSetForm();}snake.direction=DOWN;break;case0x01://GUI_StoreKey(GUI_KEY_RIGHT);if(key_F==1){if(setUnit==0){mapSelect=2;//mapSelect++;//{mapSelect=2;}}elseif(setUnit==1){gamespeed=2;//gamespeed++;//if(gamespeed==3)//{gamespeed=2;}}DrawSetForm();}snake.direction=RIGHT;//左break;case0x09://GUI_StoreKey(GUI_KEY_LEFT);if(key_F==1){if(setUnit==0){mapSelect=0;//mapSelect--;//if(mapSelect==-1)//{mapSelect=0;}elseif(setUnit==1){gamespeed=0;//gamespeed--;//if(gamespeed==-1)//{gamespeed=0;}}DrawSetForm();}snake.direction=LEFT;break;case0x0F://进入菜单if(key_F==0){key_F=1;Set_SelectFace();DrawSetForm();}Uart_Printf("key_F=%d\n",key_F);break;//进入游戏界面case0x0B:key_F=0;score=0;gametime=99;NewGame();OSTimeDlyResume(8);}else{Draw_GUI();//游戏界面初始化PrScore();//初始化分数DspTime(99);//初始化倒计时DrawMap();4);8);//创建任务4OSTaskCreate(Task_2,(void*)0,(OS_STK*)&Stack_Task_2[(STACKSIZE)-1],OSTaskCreate(Task_4,(void*)0,(OS_STK*)&Stack_Task_4[(STACKSIZE*-31)],}break;/*//重新开始游戏case0x0E:score=0;gametime=99;NewGame();break;*/case0x00:GUI_StoreKey(GUI_KEY_ENTER);break;default:break;}OSTimeDly(1);voidTask_2(void*pdata)//记时{INT8Uhours=0;INT8Uminutes=0;INT8Useconds=1;INT16Umilli=0;while(1){OSTimeDly(300);if(snake.life==0){gametime--;}DspTime(gametime);PrScore();w«=s寸9OCXIOOX。①#1=匚J9L-LN0ZI—山S山N_HO03)1UOZIJ①S间浜務注LU_L_HMI_no)」o_ooloso"c一O上茎一=05OIIOpo>S9OO9-PU①IN。--¥<=七县SINO)6UESIdsQ_LU-L_H/\AI_no)」o_oolos_LUn18l_no)」oo98los1*曰2/二08寸-0寸9OOCXI9X。①#丿_匚间
本文档为【嵌入式系统课程设计——贪吃蛇】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_270070
暂无简介~
格式:doc
大小:37KB
软件:Word
页数:44
分类:
上传时间:2020-05-18
浏览量:1