基于μCOS与ARM9的贪吃蛇游戏Word文件下载.docx
- 文档编号:21187713
- 上传时间:2023-01-28
- 格式:DOCX
- 页数:10
- 大小:18.71KB
基于μCOS与ARM9的贪吃蛇游戏Word文件下载.docx
《基于μCOS与ARM9的贪吃蛇游戏Word文件下载.docx》由会员分享,可在线阅读,更多相关《基于μCOS与ARM9的贪吃蛇游戏Word文件下载.docx(10页珍藏版)》请在冰豆网上搜索。
string.h>
stdio.h>
stdlib.h>
#defineN
30
#defineUP
1
#defineDOWN
2
#defineLEFT
3
#defineRIGHT
4
#pragmaimport(__use_no_semihosting_swi)
//ensurenofunctionsthatusesemihosting
////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
//定义蛇的各项信息
structSnake
{
U32x[N];
U32y[N];
U32length;
U32direction;
}snake;
//定义食物的各项信息
structFood
{
U32x;
U32y;
U32yes;
}food;
U16score=0;
U16GameSpeed=400;
//游戏速度,数值越大速度越慢
U16timeuse=0;
//记录游戏所花时间
PDCpdc;
U16restart=0;
//判断是否重新开始
U16stage=0;
//判断关卡数
voidGameInit(void);
//游戏启动界面,显示游戏信息
voidGameGraph(void);
voidGameOver(void);
//游戏结束界面,显示游戏信息
voidStageClean(void);
//游戏过关界面,显示游戏信息
voidDspScore(U16score);
//在屏幕右上方显示分数的子程序
voidDspTime(U16timeuse);
//在屏幕的左上方显示游戏时间的子程序
voidDrawUnit(U32x,U32y);
//画出蛇的一节,蛇为红色,一节为20*20的矩形
voidClearUnit(U32x,U32y);
//清除蛇节的最后一节
voidRandFood(void);
//随机产生一个食物点
//初始化贪吃蛇界面,包括墙、分数初始化、两段蛇节
voidGamePlay(void);
//主游戏函数,负责主要的游戏进程及判断
OS_STKMain_Stack[STACKSIZE]={0,};
//Main_Test_Task堆栈
voidMain_Task(void*Id);
//Main_Test_Task
#defineMain_Task_Prio
12
OS_STKGame_Stack[STACKSIZE]={0,};
//Game_Task堆栈
voidGame_Task(void*Id);
//Game_Task
#defineGame_Task_Prio
15
//OS_STKTouch_Stack[STACKSIZE]={0,};
//touch_Task堆栈
//voidTouch_Task(void*Id);
//touch_Task
//#defineTouch_Task_Prio
13
intmain(void)
ARMTargetInit();
//dotarget(uHALbasedARMsystem)initialisation//
OSInit();
//neededbyuC/OS-II//
OSInitUart();
initOSFile();
initOSMessage();
initOSList();
initOSDC();
initOSCtrl();
LoadFont();
InitRtc();
loadsystemParam();
LCD_printf("
CreatetaskonuCOS-II...n"
);
OSTaskCreate(Main_Task,
(void*)0,
(OS_STK*)&
Main_Stack[STACKSIZE-1],
Main_Task_Prio);
OSTaskCreate(Game_Task,
Game_Stack[STACKSIZE-1],
Game_Task_Prio);
//OSTaskCreate(Touch_Task,
Touch_Stack[STACKSIZE-1],
Touch_Task_Prio);
OSAddTask_Init
(1);
StartinguCOS-II...n"
Enteringgraphmode...n"
LCD_ChangeMode(DspGraMode);
OSStart();
//开始任务调度//
//neverreached//
return0;
}
voidMain_Task(void*Id)
//主任务,负责键盘的扫描
POSMSGpMsg=0;
//创建消息结构
//ClearScreen();
//清屏
//消息循环
while
(1)
//OSTimeDly(10);
pMsg=WaitMessage(0);
//等待消息
switch(pMsg->
Message){
caseOSM_KEY:
//键盘消息
Uart_Printf(0,"
%dn"
pMsg->
WParam);
//调试键盘信息
WParam)
case'
r'
:
//OK
restart=1;
break;
4'
if(snake.direction!
=RIGHT)snake.direction=LEFT;
//防止蛇向反方向移动
6'
=LEFT)snake.direction=RIGHT;
2'
=UP)
snake.direction=DOWN;
8'
=DOWN)snake.direction=UP;
DeleteMessage(pMsg);
//删除消息,释放资源
//OSTimeDly(100);
voidGame_Task(void*Id)
//游戏任务,负责游戏的运行
GameGraph();
//输出游戏名称,作者信息
OSTimeDly(1000);
ClearScreen();
GamePlay();
OSTimeDly(3000);
//蛇死亡3秒后游戏重新开始
///////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////
//游戏启动界面,显示游戏信息
voidGameGraph(void)
U16text1[]={'
S'
'
n'
a'
k'
e'
'
b'
y'
I'
c'
s'
p'
i'
g'
'
};
pdc=CreateDC();
TextOut(pdc,200,177,text1,TRUE,FONTSIZE_MIDDLE);
DestoryDC(pdc);
voidGameOver(void){
U16text2[]={'
G'
A'
M'
E'
O'
V'
R'
//PDCpdc;
TextOut(pdc,200,177,text2,TRUE,FONTSIZE_MIDDLE);
//GameInit();
voidStageClean(void){
U16text3[]={'
T'
C'
L'
N'
stage++;
GameSpeed-=50;
timeuse=0;
TextOut(pdc,177,200,text3,TRUE,FONTSIZE_MIDDLE);
if(stage==5){while
(1);
voidDspScore(U16score)
U16fenshuge[2];
U16fenshushi[2];
U16shi,ge;
U16sorcetxt[]={'
ge=score%10;
shi=score/10;
//FillRect(pdc,400,20,500,35,GRAPH_MODE_NORMAL,0x00FFFFFF);
//覆盖分数区域,用来解决二次乱码问题。
TextOut(pdc,400,20,sorcetxt,TRUE,FONTSIZE_SMALL);
Int2Unicode(ge,fenshuge);
Int2Unicode(shi,fenshushi);
TextOut(pdc,460,20,fenshushi,TRUE,FONTSIZE_SMALL);
TextOut(pdc,470,20,fenshuge,TRUE,FONTSIZE_SMALL);
//重新绘制新的分数
//MoveTo(pdc,640,480);
voidDspTime(U16timeuse)
U16bai[2],shi[2],ge[2];
U16timebai,timeshi,timege;
U16timetxt[]={'
//PDCtimepdc;
timebai=timeuse/100;
timeshi=timeuse/10;
timege=timeuse%10;
//FillRect(pdc,20,20,100,35,GRAPH_MODE_NORMAL,0x00FFFFFF);
//覆盖时间区域,用来解决二次乱码问题。
TextOut(pdc,40,20,timetxt,TRUE,FONTSIZE_SMALL);
Int2Unicode(timebai,bai);
Int2Unicode(timeshi,shi);
Int2Unicode(timege,ge);
TextOut(pdc,70,20,bai,TRUE,FONTSIZE_SMALL);
TextOut(pdc,76,20,shi,TRUE,FONTSIZE_SMALL);
TextOut(pdc,82,20,ge,TRUE,FONTSIZE_SMALL);
//在屏幕右上方显示关卡的子程序
voidDspLevel(U16level)
U16level2[2];
U16leveltxt[]={'
TextOut(pdc,270,20,leveltxt,TRUE,FONTSIZE_SMALL);
Int2Unicode(level,level2);
TextOut(pdc,315,20,level2,TRUE,FONTSIZE_SMALL);
voidDrawUnit(U32x,U32y)
U32x0,y0,x1,y1;
x0=x*20+1;
//偏移一个1为偏移的边框线,乘10是一个蛇节象素的大小
y0=y*20+1;
x1=x*20+20;
y1=y*20+20;
FillRect(pdc,x0,y0,x1,y1,GRAPH_MODE_NORMAL,0x000000FF);
voidClearUnit(U32x,U32y)
x1=x*20+20;
FillRect(pdc,x0,y0,x1,y1,GRAPH_MODE_NORMAL,0x00FFFFFF);
voidRandFood(void)
U32foodx,foody;
U32i;
foodx=2+rand()%27;
//防止随机点超出方框范围
foody=2+rand()%19;
for(i=snake.length;
i>
0;
i--)
if(snake.x[i]==foodx&
&
snake.y[i]==foody)//防止食物画到蛇的身上
i=snake.length;
food.x=foodx;
food.y=foody;
x0=foodx*20+1;
y0=foody*20+1;
x1=foodx*20+20;
y1=foody*20+20;
FillRect(pdc,x0,y0,x1,y1,GRAPH_MODE_NORMAL,0x00FF0000);
food.yes=1;
voidGameInit(void)
U32x0=40,y0=40,x1=601,y1=441;
snake.length=3;
//初始化蛇节长度,并确定蛇节出示位置。
snake.direction=LEFT;
snake.x[0]=15,snake.y[0]=12;
snake.x[1]=16,snake.y[1]=12;
snake.x[2]=17,snake.y[2]=12;
DrawRectFrame(pdc,x0,y0,x1,y1);
DrawUnit(snake.x[0],snake.y[0]);
//蛇的初始化位置在最中间
DrawUnit(snake.x[1],snake.y[1]);
DrawUnit(snake.x[2],snake.y[2]);
RandFood();
voidGamePlay(void)//游戏的主要部分,负责判断、刷新显示等
U8
i;
GameInit();
if(restart==1)
restart=0;
score=0;
GameSpeed=400;
stage=0;
OSTimeDly(GameSpeed);
//根据游戏速度来确定执行速度,防止蛇速度过快。
if(score==(10*stage+10)){StageClean();
if(food.yes==0)RandFood();
//如果食物被吃掉,重新随机出一个食物
if(Rtc_IsTimeChange(RTC_SECOND_CHANGE))timeuse++;
///刷新时间,系统时间函数不能使用,暂时取消
ClearUnit(snake.x[snake.length-1],snake.y[snake.length-1]);
//清除蛇尾
for(i=snake.length-1;
snake.x[i]=snake.x[i-1];
sn
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 COS ARM9 贪吃 游戏
![提示](https://static.bdocx.com/images/bang_tan.gif)