俄罗斯方块
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
函数原型
short GetGridBoxCode(const Box *pBox,int lineNO,int columnNO)
函数原型
BOOL isObstacles(const Box *pBox,const Grid *pGrid)
功能详细设计-获取网格相应位置的方块编码
0001 0110 1110 1011
0001 0110 1110 1011
功能详细设计-获取网格相应位置的方块编码 实现步骤
– 获取相应4行的编码code1,code2,code3和code4 – code1左移columnNO位。和0xF000按位与运算保留高4位 – 如果(columnNO-4)≥0,则code2左移(columnNO-4) 位,否则右移(4-column)位。和0x0F00按位与 – 如果( column-8)≥0,则code3左移(columnNO-8) 位,否则右移( 8-columnNO)位。和0x00F0按位与 – 如果(columnNO-12)≥0,则code4左移(columnNO-12 )位,否则右移(12-column)位。和0x000F按位与 – code = code1 | code2 | code3 | code4
函数原型
void MoveBox(Box *pBox,const Grid *pGrid,Command direction)
功能详细设计-下落方块
实现步骤
– 生成下一个位置的方块 – 判断该方块受阻 – 若未受阻则正式生效,返回true;否则返回false。
函数原型
BOOL DescendBox(Box *pBox,const Grid *pGrid)
C 语 言 辅 导 教 程
综合实例
—俄罗斯方块
邵小兵
学习目标与课程安排
目标:
– 巩固和加强程序分析、设计和实现的能力
课程安排
– – – – 俄罗斯方块概述 数据结构设计 功能设计(绘制方块、旋转、移动控制和消行) 学生完善功能(计分、变速、英雄榜)
俄罗斯方块简介
旋转
移动
落下
数据结构设计-方块编码
详细功能设计-接纳方块
实现步骤
– 获取方块编码 – 分离出4行编码 – 将网格行编码和方块行编码进行与运算作为网格新的 行编码
函数原型
void Accept(Grid *pGrid,const Box *pBox)
功能详细设计-障碍判断(设计方案一)
实现步骤
– 获取方块编码 – 获取网格相应位置对应的编码(需要设计另一个函数,见下页) – 如果两个编码按位与运算,结果不为0,表示有方块和 网格有重叠,即遇到障碍。
函数原型
void InitBox(Box *pBox,const Grid *pGrid,COLORREF boxColor)
功能详细设计-绘制方块
实现步骤
– 根据行号、列号及网格大小确定方块左上角坐标x0,y0。 – 根据方块号和形态号从方块编码表中获取方块编码。 – 根据方块编码逐个绘制方块中的16个点。 lineNO
4460 0E80 C440 2E00
44C0 8E00 6440 0E20
0660 0660 0660 0660
行号:决定方块种类 列号:决定方块形态
数据结构设计-方块Box lineNO columnNO blockNO shapeNO color unitSize dotSize
功能详细设计-旋转方块
实现步骤
– 取方块的下一个形态号 – 判断方块是否遇到阻碍 – 若遇阻则放弃,否则生效
函数原型
BOOL RotateBox(Box *pBox,const Grid *pGrid)
功能详细设计-移动方块
实现步骤
– 定义一个临时方块根据方向获取该方向上下一个方块 的位置 – 判断该方块受阻 – 若未受阻则正式生效
BOOL isObstacles(const Box *pBox,const Grid *pGrid)
功能详细设计-格子占用判断
实现步骤
– 获取网格对应的行代码 – 判断代码对应位是否为1,即是否被占用 – 若位置不在合理范围内也认为被占用
BOOL isOccupied (const Grid *pGrid,int lineNO,int columnNO)
功能总体设计-方块Box 初始化 -InitBox 绘制 -DrawBox 擦除 -EraseBox 旋转 -RotateBox 遇障判断-isObstacles
功能总体设计-网格Grid 初始化 -InitGrid 绘制 -DrawGrid 擦除 -EraseGrid 接收方块-AcceptBox 消行 -Eliminate
0 1 0 0
1 1 0 0
0 1 0 0
0 0 0 0
4E00
1 1 0 0
0 1 1 0
0 0 0 0
0 0 0 0
8C40
数据结构设计-方块编码表BoxTable
0F00 4444 0F00 4444 4E00 4640 0E40 4C40
C600 4C80 C600 4C80 6C00 8C40 6C00 8C40
实现步骤
– 用网格的背景色绘制方块
函数原型
void EraseBox(Box *pBox,COLORREF eraseColor)
功能详细设计-障碍判断(设计方案二)
实现步骤
– 判断方块的4×4每个位置在网格中是否已被占用。 – 另外设计函数判断每个格子是否被占用(见下页)。
函数原型
• • • • 点坐标x,y赋初值为x0,y0 获取编码的最高位,若为1则绘制该点 编码左移一位,x增加1个格子单位 每4位则换行 columnNO blockNO shapeNO color size
函数原型
void DrawBox(const Box *pBox)
功能详细设计-擦除方块
数据结构设计-网格Grid lines columns(限定16) backColor foreColor unitSize dotSize bitDiagram[lines]
1111 1100 0000 0111(0xFC07) 1111 0111 1000 0111(0xF787)
功能详细设计-初始化方块
实现步骤
– 行号、列号赋初值,保证方块的初始位 置为顶部Leabharlann Baidu中 – 随机产生方块,在[0,6]之间产生方块 号;在[0,3]之间产生形态号。 – 初始化颜色和大小,保持方块的点大小 与网格的点大小一致
lineNO columnNO blockNO shapeNO color size