贪吃蛇.docx

上传人:b****4 文档编号:4158431 上传时间:2022-11-28 格式:DOCX 页数:21 大小:20.82KB
下载 相关 举报
贪吃蛇.docx_第1页
第1页 / 共21页
贪吃蛇.docx_第2页
第2页 / 共21页
贪吃蛇.docx_第3页
第3页 / 共21页
贪吃蛇.docx_第4页
第4页 / 共21页
贪吃蛇.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

贪吃蛇.docx

《贪吃蛇.docx》由会员分享,可在线阅读,更多相关《贪吃蛇.docx(21页珍藏版)》请在冰豆网上搜索。

贪吃蛇.docx

贪吃蛇

/***************************************************************************\

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模板 > 商务科技

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1