贪吃蛇.docx
- 文档编号:4158431
- 上传时间:2022-11-28
- 格式:DOCX
- 页数:21
- 大小:20.82KB
贪吃蛇.docx
《贪吃蛇.docx》由会员分享,可在线阅读,更多相关《贪吃蛇.docx(21页珍藏版)》请在冰豆网上搜索。
贪吃蛇
/***************************************************************************\
Copyright(c)2004-2007threewater@up-,Allrightsreserved.
bythreewter2004.5.12
\***************************************************************************/
/***************************************************************************\
#说明:
Cmain函数,ucos-ii初始化等定义
----------------------------------Bug--------------------------------------
----------------------------------TODOlist--------------------------------------
----------------------------------修正--------------------------------------
2004-5-12创建
\***************************************************************************/
#include"../ucos-ii/includes.h"/*uC/OSinterface*/
#include"../ucos-ii/add/osaddition.h"
#include"../inc/drivers.h"
#include"../ucos-ii/Ustring.h"
#include"../inc/sys/lib.h"
#include"../src/gui/gui.h"
#include
#include
#pragmaimport(__use_no_semihosting_swi)//ensurenofunctionsthatusesemihosting
///******************任务定义***************///
OS_STKMain_Stack[STACKSIZE]={0,};//Main_Test_Task堆栈
voidMain_Task(void*Id);//Main_Test_Task
#defineMain_Task_Prio12
OS_STKtest_Stack[400]={0,};//test_Test_Task堆栈
voidtest_Task(void*Id);//test_Test_Task
#definetest_Task_Prio15
OS_STKnew_Stack[STACKSIZE]={0,};//test_Test_Task堆栈
voidnew_Task(void*Id);//test_Test_Task
#definenew_Task_Prio14
/**************已经定义的OS任务*************
#defineSYS_Task_Prio1
#defineTouch_Screen_Task_Prio9
#defineMain_Task_Prio12
#defineKey_Scan_Task_Prio58
#defineLcd_Fresh_prio59
#defineLed_Flash_Prio60
***************************************/////////
#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.
LCD_printf("StartinguCOS-II...\n");
LCD_printf("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()
{
FILE*pfile;
pfile=fopen(sysfilename,"w");返回文件地址打开文件的作用?
?
if(pfile==NULL){
return;
}
fwrite(&sysnumber,sizeof(int),1,pfile);//写文件
fclose(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:
{
if(K==TRUE&&rect[0].top==bean_bottom&&rect[0].left==bean_left)//吃到豆子
eating_bean();
else
snake_mov();
if(rect[0].top==eara_top||T1_up||T2_up||me_self)
{
game_over();
start_again();
gotorestart;
}
else
{
rect[0].top-=D;
rect[0].bottom-=D;
draw_snake();
}
break;
}
casem_left:
{
if(K==TRUE&&rect[0].left==bean_right&&rect[0].top==bean_top)//吃到豆子
eating_bean();
else
snake_mov();
if(rect[0].left==eara_left||T1_left||T2_left||me_self)
{
game_over();
start_again();
gotorestart;
}
else
{
rect[0].left-=D;
rect[0].right-=D;
draw_snake();
}
break;
}
casem_right:
{
if(K==TRUE&&rect[0].right==bean_left&&rect[0].top==bean_top)//吃到豆子
eating_bean();
else
snake_mov();
if(rect[0].right==eara_right||T1_right||T2_right||me_self)
{
game_over();
start_again();
gotorestart;
}
else
{
rect[0].left+=D;
rect[0].right+=D;
draw_snake();
}
break;
}
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;
}
break;
caseK_RIGHT:
//右移
if(m_flag==up_down)
{
funnum=m_right;
m_flag=left_right;
}
break;
caseK_UP:
//上移
if(m_flag==left_right)
{
funnum=m_up;
m_flag=up_down;
}
break;
caseK_RESET:
//复位
start_again();
//if_restart=TRUE;
break;
caseK_ADD:
TIME-=50;
if(TIME<=0)
{
TIME=250;
}
speed_show();
break;
caseK_SUB:
TIME+=50;
if(TIME>=500)
{
TIME=250;
}
speed_show();
break;
}
DestoryDC(pdc);//删除绘图设备上下文
returnTRUE;
}
voidstart_again()//初始化为三节
{
//OSTimeDly(500);
ClearScreen();//清屏
clc_screen=TRUE;
me_self=FALSE;
funnum=m_left;
TIME=250;
m_flag=left_right;
minutes=0;//运行时间
seconds=0;
speed_show();
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 { rect[i+1].left=rect[i].left+D; rect[i+1].top=rect[i].top; } for(i=0;i<=N;i++) { 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;i<=N;i++) { FillRect2(pdc,&rect[i],0x00,0x00000000);该函数用指定的画刷填充矩形,此函数包括矩形的左上边界,但不包括矩形的右下边界。 } } voidpro_bean()//产生豆子 { if(K==FALSE){ for(;;) { 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; for(i=0;i<2;i++) { if(bean_top<=block[i].bottom||bean_bottom>=block[i].top||bean_left>=block[i].right||bean_right<=blo
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 贪吃