
- UID
- 874076
- 来自
- 北京市海淀区中关村北二条乙五号 ...
|

学的再多也是为了实践,学习中勤于动手才是一种好习惯,下面我介绍个例子,无论是初学嵌入式的还是已经有基础的都可以自己动手实践一下。
实训一:华容道游戏。
如图:
游戏功能:屏幕中央为游戏界面,相当于一个棋盘。棋盘中的各个棋子咀历史人物命名,大小不一,都可以移动。棋盘边界的最下方有一缺口,通过移动各个棋子,最终将曹操棋子移到该缺口即获得胜利。可按“确定’’键进行移动。LED显示所移动的步数,当同一棋子连续移动时,步数不进行累加。
在界面的右方有人物头像显示,该图像随着选择的当前棋子的变化而做相应的变化。
本游戏提供“横刀立马”和“天罗地网”两种初始棋子布阵,在游戏的开始、结束或
游戏的过程中可以按“5”键选择“横刀立马”布阵;按“o”键选择“天罗地网”布阵。
代码实现:
任务的定义、实现以及主要模块
1.Main- Task任务
主任务程序:接收键盘消息
void Main_Task (void*idj )
//Main_res t_Task
{
POSMSG pMsg=0;
Is_worktime=TRUE;
for《;;){
pMsg=WaitMessage(o}j//等待消息
switch (pMsg->Message){
case OSM- KEY:
onKey{ pMsg- >WParam, pMsg->L Pa ram)j
break;
OSTimeDly (1000);
)
2.Dynamic_Display_Task任务
OS_STE
Dynarnic_Di splay_Stack[ STACKSIZE*8】={0,
);
void
Dynamic_Displ ay_Task{ void
*Id)i
≠} def ine
Dy namic _Di splay_Task_Pri0
61
该任务实现移动步数的实时LED显示。
3.Key_Scan Task任务
实现键盘扫描,判断键值,以调用不同的函数。
4.Tag_Glint_Task任务
OS_S'TK
Tag_Glinc_Scack[ STACKSIZE*8]=(口,);
void
Tag_Glint_Taok{void*id)j
#define Tag_Glint_Pri0
40
彦任务实现所选棋子的闪烁任务。
5.使用的函数
初始化界面函数:initdrawimagc0
重新开始辩戏:restartgame0
切换布局函数:restartgame20
刿断新对象坐标函数:tag_direction(int tagdirection_left int tagdirection_up)
移动对象函数:move0
绘图函数:
void MoveTo(PDC pdc* int x,int y);
void LineTo(PDC pdc, int x,int y);
void FiIIRect(PDC pdc, int lefXint top ,int right, rnt bottom,U32 DrawMode,
U32 color);
U8 SettPenWidth(PDC pdc);
U32 GetPenMode(PDC pdc);
U32 SetPenColor(PDC pdc, U32 color);
void ShowBmp(PDC pdc, char filename[l, int x,int y);
在这个程序写完后,调试肯定会出现许多问题,发现问题的大家可以自己动手再调试一下 |
|