俄罗斯方块游戏设计报告 - 图文

2020-02-21 02:24

[2012年] [刘帅E09640219、 唐波Q09640131]

[嵌入式

课程设计]

--俄罗斯方块游戏

指导老师:

胡洁

俄罗斯方块游戏

一、 实验目的

基于博创UP-NETARM300试验台,开发一个简单的俄罗斯方块游戏,并达到以下要求: (1)按Numlock键重新开始游戏,随机产生方块并自动下落; (2)按“/”键可以暂停游戏,再次按键开始游戏;

(3)用“8”键变换方块角度,用“7”实现左移,用“9”实现右移,用“5”实现方

块加速下移;

(4)系统能够正确判断是否满行,并对已满的行实现消行并加分。

二、实验设备

计算机;博创UP-3000实验箱

三、功能模块

功能模块划分

3、1绘图API数据结构

在uC/OS-II系统环境下,绘图必须通过使用绘图设备上下文(DC)来实现。绘图设备上下文(DC)中包括了与绘图相关的信息,比如画笔宽度、绘图的原点等。这样在多任务的系统中,不同的任务通过不同的绘图设备上下文(DC)绘图才不会相互影响。绘图设备上下文(DC)的结构定义如下:

typedef struct{ int DrawPointx; int DrawPointy; //绘图所使用的坐标点 int PenWidth; //画笔宽度 U32 PenMode; //画笔模式

- 2 -

COLORREF PenColor; //画笔的颜色 int DrawOrgx; //绘图的坐标原点位置 int DrawOrgy; int WndOrgx; //绘图的窗口坐标位置 int WndOrgy; int DrawRangex; //绘图的区域范围 int DrawRangey; structRECT DrawRect;//绘图的有效范围 U8 bUpdataBuffer; //是否更新后台缓冲区及显示 U32 Fontcolor; //字符颜色 }DC,*PDC;

与绘图上下文(DC)有关的函数:initOSDClassic();用来初始化系统的DC,为DC开辟动态内存空间:Create()和DestoryDC()分别用来创建和删除DC。

和绘图有关的函数有TextOut()、LIneTo()、FillRect()等。

在uC/OS-II系统中,液晶显示屏的刷新时通过Lcd_Fresh_Task()任务完成的,该任务在系统附加任务初始化函数OSADDTask_Init()中定义的,该函数开辟了LCD刷新任务、触摸屏任务、键盘任务等。

3、2消息循环

通常在多任务操作系统中,人物之间的通讯是通过发送消息来实现的。消息队列是操作系统uC/OS-II中的一种通讯机制,uC/OS-II操作系统提供了若干对消息队列进行操作的函数,例如OSQCreate()、OSQPend()、OSQPost()等,他们都定义在OS_Q.c中。在本开发平台中程序可以使用OSCreateMessage()创建消息,用SendMessage()发送消息等。

消息的数据结构定义: typedef struct { POS_Ctrl pOSCtrl; //消息所发到的窗口(控件) U32 Message; U32 WParam; //键盘消息参数 U32 LParam; //触摸屏消息参数 }OSMSG, *POSMSG;

对于键盘消息来说其类型pMsg->Message=OSM_KEY,参数pMsg->WParam是按键的键码,键盘中断服务程序向键盘邮箱发送一个消息,通知键盘扫描任务发生了按键事件。当按键扫描任务等到邮箱消息后就会从键盘扫描芯片读取扫描吗,然后将扫描码对应的按键码发送到消息队列。

3、3方法处理

(1)规划屏幕,规划出一个20行10列的游戏区域,每个小方块用10X10的像素来构成。

int BoardArray[10][20]; //定义一个10x20的游戏区域

(2)标准的俄罗斯方块共有7种形状,每个形状划分为4种角度且有四个小方块组成,每个小方块的坐标由(x,y)确定,所以数组定义如下:

int BlockInfo[7][4][4][2]= { {

{{0,0},{1,0},{0,1},{1,1}},

- 3 -

{{0,0},{1,0},{0,1},{1,1}}, {{0,0},{1,0},{0,1},{1,1}}, {{0,0},{1,0},{0,1},{1,1}} },

{

{{0,0},{-1,0},{1,0},{2,0}}, {{0,0},{0,-1},{0,1},{0,2}}, {{0,0},{-1,0},{1,0},{2,0}}, {{0,0},{0,-1},{0,1},{0,2}} } };

这里只给出正方形的和长方形的,具体见附录。 其中形状图:

俄罗斯方块定位点设置,以黑色点为(0,0)坐标

3、4程序任务处理流程

1)主任务,它主要来完成一些初始化工作,要初始化游戏界面,必须创建一个绘图用的DC,主任务通过DC绘制游戏界面调用API函数显示相应的文字。初始化工作完成后,主任务进入消息循环机制来等待来自键盘或触摸屏的消息,获得消息后发送到消息处理机制中。主任务创建方式及流程图如下:

创建方式:

void Main_Task(void*Id);

#define Main_Task_Prio 12

OSTaskCreate(Main_Task,(void*)0,(OS_STK*)&Main_Stack[STACKSIZE*8-1], Main_Task_Prio);

- 4 -

流程图:

定义消息循环机制所需参数 创建绘图PDC 绘制游戏界面

进入消息循环机制 等待消息 键盘消息 判断消息 触摸屏消息 类型 判断键值 判断触摸 点位置 根据键值做相应的处理:开始、暂停、左移、右移、快速下落 根据触摸点位置做相应的处理:开始、暂停、左移、右移、快速下落 俄罗斯方块主任务流程图

2)方块自动下落任务,主要完成当前方块的动态显示,不停的更新方块的位置,另外还要判断系统的运行状态,方块是否发生碰撞等。自由下落任务的创建方式与流程图如下: 创建方式:

void AutoDrop_Task(void*Id);

#define AutoDrop_Task_Prio 20

OSTaskCreate(AutoDrop_Task,(void*)0,(OS_STK*)&AutoDrop_Task_Stack[STACKSIZE -1],AutoDrop_Task_Prio);

- 5 -


俄罗斯方块游戏设计报告 - 图文.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:网络媒体环境下的高校公寓文化建设策略

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: