贪吃蛇Word文件下载.docx
《贪吃蛇Word文件下载.docx》由会员分享,可在线阅读,更多相关《贪吃蛇Word文件下载.docx(21页珍藏版)》请在冰豆网上搜索。
***************************************/////////
#defineK_UP56//"
8"
#defineK_DOWN50//"
2"
#defineK_LEFT52//"
4"
#defineK_RIGHT54//"
6"
#defineK_RESET46//"
."
#defineK_ADD43//"
+"
#defineK_SUB45//"
-"
///*****************事件定义*****************///
/////////////////////////////////////////////////////
//Mainfunction.//
////////////////////////////////////////////////////
intmain(void)
{
ARMTargetInit();
//dotarget(uHALbasedARMsystem)initialisation//
OSInit();
//neededbyuC/OS-II//
OSInitUart();
串口通信初始化
initOSFile();
文件系统初始化
#ifUSE_MINIGUI==0
initOSMessage();
initOSList();
初始化链表
initOSDC();
初始化绘图上下文P224
initOSCtrl();
初始化控件P234
LoadFont();
装载字库P248
#endif
loadsystemParam();
//createthetasksinuC/OSandassignincreasing//
//prioritiestothemsothatTask3attheendof//
//thepipelinehasthehighestpriority.//
LCD_printf("
CreatetaskonuCOS-II...\n"
);
OSTaskCreate(Main_Task,(void*)0,(OS_STK*)&
Main_Stack[STACKSIZE-1],Main_Task_Prio);
OSTaskCreate(test_Task,(void*)0,(OS_STK*)&
test_Stack[400-1],test_Task_Prio);
OSTaskCreate(new_Task,(void*)0,(OS_STK*)&
new_Stack[STACKSIZE-1],new_Task_Prio);
OSAddTask_Init
(1);
定义4个系统任务,触屏9,键盘扫描58,系统任务1,LCD刷新任务59.
StartinguCOS-II...\n"
Enteringgraphmode...\n"
LCD_ChangeMode(DspGraMode);
图形模式。
文本模式:
Dsptxtmode
OSStart();
//starttheOS//
//neverreached//
return0;
}//main
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
PTextCtrlpTextCtrl;
//文本框结构控件指针P237
#defineID_MainTextCtrl101//文本框控件ID
#defineRGB00x00000000//蛇的颜色
#defineRGB10x00ffffff//擦除蛇尾
enumfunnum{m_pause,m_up,m_down,m_left,m_right}funnum=m_left;
//功能指示键(停,上,下,左,右)
enumm_flag{up_down,left_right}m_flag=left_right;
//当前蛇的运动方向标志枚举类型
PDCpdc;
DC指针
POSMSGpMsg=0;
//定义消息结构消息结构指针
structRECTrect[1000];
绘图有效范围
structRECTrect1;
//蛇尾参量
constintX=10,Y=6;
//障碍物大小定义为值不可变的变量
structRECTblock[2];
//障碍物
intQ=0;
//生成的豆子是否有效
intN;
//记录蛇的节数
inti;
//for循环
intj=0;
//所吃豆子个数
intcount_lever=1;
//当前关卡----共5关
intTIME=250;
//延迟时间
intminutes;
//运行时间
intseconds;
constintD=10;
//定义蛇的大小;
BOOLEANK=FALSE;
//是否有豆子产生
BOOLEANStarting;
//开始/暂停状态标志
BOOLEANclc_screen;
//是否已清屏
BOOLEANT1_down;
BOOLEANT2_down;
BOOLEANT1_up;
BOOLEANT2_up;
BOOLEANT1_left;
BOOLEANT2_left;
BOOLEANT1_right;
BOOLEANT2_right;
BOOLEANif_restart;
//是否重启
BOOLEANme_self;
//是否撞到自己
intbean_top,bean_left;
//豆子坐标
intbean_right,bean_bottom;
inteara_top=50,eara_left=20;
//窗体大小
inteara_bottom=430,eara_right=620;
inttext_x=250,text_y=200;
//显示gameover
intx3=20,y3=35;
//文本坐标
intx2=20,y2=440;
//
intx2_off;
//偏移量
intx3_off;
intnumber=0;
U16ch[5];
//显示数据
U16ch_mins[5];
//分
U16ch_doc[2]={'
:
'
};
//"
"
U16ch_secs[5];
//秒
U16uscore[10];
U16utimer[10];
U16uspeed[10];
U16ulever[10];
U16ugameover[20];
charscore[10]="
SCORE:
;
chartimer[10]="
TIME:
charspeed[10]="
SPEED:
charlever[10]="
LEVER:
chargameover[20]="
GAMEOVER"
intsysnumber;
charsysfilename[]="
/sys/ucos/fj/sys.dat"
//打开的文件名
voidLoadSysNumber()
FILE*pfile;
//定义文件结构指针
pfile=fopen(sysfilename,"
r"
//打开文件
if(pfile==NULL){//打开文件失败
sysnumber=0;
return;
}
fread(&
sysnumber,sizeof(int),1,pfile);
//读文件
fclose(pfile);
//关闭文件
}
voidSaveSysNumber()
w"
返回文件地址打开文件的作用?
?
if(pfile==NULL){
fwrite(&
sysnumber,sizeof(int),1,pfile);
//写文件
/*///////////////////////////////////////////////////////////////////////////////////////
****************************************************************************************
rect[0]表示蛇头;
rect[1]表示蛇身;
.......;
rect[N]表示蛇尾;
****************************************************************************************///
U8onKey(intnkey,intfnkey);
voidstart_again(void);
//初始化为三节
voiddraw_snake(void);
//绘制蛇
voidpro_bean(void);
//产生豆子
voidsnake_mov(void);
//移动
voideating_bean(void);
//吃到豆子
voidto_to(void);
//扫描键盘
voidgame_over(void);
//游戏结束
voidget_score(void);
//得分
voidtime_show(void);
//显示运行时间
voidspeed_show(void);
//速度
voidtext_show(void);
//显示文本
voidH_block(void);
voidlever_show(void);
//关卡
voidif_dead(void);
voidMain_Task(void*Id)//Main_Test_Task
{
//POSMSGpMsg=0;
//定义消息结构
pdc=CreateDC();
start_again();
//消息循环
restart:
//if_restart=FALSE;
for(;
){
pro_bean();
if_dead();
//if(if_restart)
//gotorestart;
switch(funnum){
casem_down:
{
if(K==TRUE&
&
rect[0].bottom==bean_top&
rect[0].left==bean_left)//吃到豆子
eating_bean();
else
snake_mov();
if(rect[0].bottom==eara_bottom||T1_down||T2_down||me_self)
{
game_over();
start_again();
gotorestart;
}
else
{
rect[0].top+=D;
rect[0].bottom+=D;
draw_snake();
}
break;
}
casem_up:
rect[0].top==bean_bottom&
if(rect[0].top==eara_top||T1_up||T2_up||me_self)
rect[0].top-=D;
rect[0].bottom-=D;
break;
casem_left:
{
rect[0].left==bean_right&
rect[0].top==bean_top)//吃到豆子
if(rect[0].left==eara_left||T1_left||T2_left||me_self)
}
rect[0].left-=D;
rect[0].right-=D;
casem_right:
rect[0].right==bean_left&
rect[0].top==bean_top)//吃到豆子
snake_mov();
if(rect[0].right==eara_right||T1_right||T2_right||me_self)
rect[0].left+=D;
rect[0].right+=D;
casem_pause:
break;
}
U8onKey(intnkey,intfnkey)
//pdc=CreateDC();
switch(nkey){
case'
\r'
//OK
if(!
Starting){//处于开始模式
Starting=TRUE;
}
else{//处于暂停模式
funnum=m_pause;
Starting=FALSE;
break;
caseK_DOWN:
//下移
if(m_flag==left_right)
{
funnum=m_down;
m_flag=up_down;
break;
caseK_LEFT:
//左移
if(m_flag==up_down)
funnum=m_left;
m_flag=left_right;
caseK_RIGHT:
//右移
funnum=m_right;
caseK_UP:
//上移
funnum=m_up;
caseK_RESET:
//复位
start_again();
//if_restart=TRUE;
caseK_ADD:
TIME-=50;
if(TIME<
=0)
TIME=250;
speed_show();
caseK_SUB:
TIME+=50;
if(TIME>
=500)
speed_show();
DestoryDC(pdc);
//删除绘图设备上下文
returnTRUE;
voidstart_again()//初始化为三节
//OSTimeDly(500);
ClearScreen();
//清屏
clc_screen=TRUE;
me_self=FALSE;
funnum=m_left;
TIME=250;
minutes=0;
seconds=0;
count_lever=1;
lever_show();
time_show();
N=3;
//蛇的节数
j=0;
K=FALSE;
rect[0].left=100;
//绘制蛇头
rect[0].top=100;
for(i=0;
i<
N;
i++)
rect[i+1].left=rect[i].left+D;
rect[i+1].top=rect[i].top;
for(i=0;
=N;
{
rect[i].right=rect[i].left+D;
rect[i].bottom=rect[i].top+D;
draw_snake();
get_score();
Starting=TRUE;
voiddraw_snake()//绘制蛇
for(i=0;
FillRect2(pdc,&
rect[i],0x00,0x00000000);
该函数用指定的画刷填充矩形,此函数包括矩形的左上边界,但不包括矩形的右下边界。
voidpro_bean()//产生豆子
if(K==FALSE){
)
Q=0;
bean_top=rand()%38*D+eara_top;
bean_left=rand()%60*D+eara_left;
随机函数
bean_bottom=bean_top+D;
D为蛇节边长
bean_right=bean_left+D;
2;
if(bean_top<
=block[i].bottom||bean_bottom>
=block[i].top||bean_left>
=block[i].right||bean_right<
=blo