基于visualc实现的单机版俄罗斯方块游戏的设计-----毕业论文内容摘要:

,需要通知所有 这些关联的视图进行更新重绘 , 而 Document 类对象就拥有通知所有视图重绘的这样的一个功能函数。 对于UpdateAIIViews() 函数实现对各个视图类对象对数据显示的更新是通过文档类内部CPtrlist 类型的成员变量 m_viewList 来维护和管理所有相关联的视图对象 , 如图 所示。 Document 本科生毕业论文 6 图 变量 m_viewList 视图对象 而对于该文档关联视图的增添 ,与将 DocumentTemplte 文档模板添加到模板类表一样 , 也是有相应的处理函数 ,对于文档模板在模板管理列表的添加是在 App 类的 Initlnstance()里面使用 AddDocTemplate() 函数去实现 ,而对于视图在视图列表的添加 , 可以使用 Document 类对象的成员函数 AddView() 去实现。 当与文档类关联的视图类收到文档类通过 UpdateAIIViews() 函数发出的更新重绘通知后 , 会触发视图类的 OnUpdate() 函数的实现。 3 俄罗斯游戏分析和总体设计 m_viewList pView_1 pView_2 pView_3 pView_4 View_4 View_3 View_2 View_1 本科生毕业论文 7 俄罗斯方块 游戏 功能描述 对于俄罗斯方块 游戏 ,其功能描述如下 : 游戏开始 ,游戏区域上方不断地出现预定义形状的下坠物件。 下坠物件可以通过旋转改变其显示形态 ,并且不断地往下坠 , 直到它接触到游戏区域底部或其他之前已经累叠起的下坠物件。 当一个下坠物件到达底部后 ,其 位置则确定下来并占有该空间的位置区域。 当游戏区域的某一行被下坠物件完全填充 ,则消除该行的所有下坠物 ,垒在其上的物件将掉下代替该行空间。 游戏的结束是以 下坠物件的顶部到达游戏区域顶部作为判断依据 ,表示装满溢出。 并且在某一瞬间 ,下一个下坠物件的形态在游戏区域的右上方有预先提示 ,同时每抵消一行空间积分自增 100。 游戏 规则 分析 首先 ,在 游戏 开始后 检查当前的下坠物是否已经到了底部 ,如果不是的话就将下坠物到了该定时器间隔的时间后整体往下移动一个单位 ,否则 ,进行到达底部后的操作。 对于到达底部后的操作 ,可以分成以下几个步骤来处理。 (1)先对进行到底部后的所有可以抵消的行进行销行处理。 (2)生成一个新的 “ 下一个下坠物 ”, 这个下坠物的形态需要随机地生成。 (3)在将旧的 “ 下一个下坠物 ” 置换成新的下一个下坠物 ,并在屏幕右上方显示。 (4)将当前的 “ 下坠物 ” 换成以前产生的旧的 “ 下一个下坠物 ”, 并且马上使用。 由于在这个过程中已经重新使用了一个新的下坠物件 ,在刚使用时并且还没有下降前 ,应该判断它是否已经不可以下降到底部 (也就是说 ,在方块己经堆砌到接近游戏区域顶部的时候 ,下坠物件一旦被使用 ,就已经到达了底部 ),如果是刚好到达底部则实行销行检测和操作 , 并且判断顶部 (第一行 )的某些区域是否已经被占用了 ,是则表示游戏已经触发结束的标志时间 ,应该进入游戏结束状态。 (5)在前 面判断为到达底部后 ,进行销行检测与操作。 (6)在下坠物到达底部的同时 ,判断是否已经到达了游戏的顶部 ,是则表示游戏结束 ,进行游戏结束的资源释放与数据环境清理工作 整个流程如图 所示。 本科生毕业论文 8 图 流程图 开始 到达低部 “下一个下坠物” “下 一个下坠物” “下一个下坠物”用作当前下坠物 到达顶部, 游戏结束 结束 到达低部 本科生毕业论文 9 4 俄罗斯方块游戏的实现 俄罗斯方块 游戏 设计 的实现 ,主要包括 游戏 核心数据的抽象与设计 、 操作方法的抽象与设计 、 及 流程的设计 与实现 等。 下面将对这几个部分作具体的设计。 游戏 核心数据的抽象与 设计 在抽象出方法和属性前 ,先来分析一下整个游戏的具体实现。 首先 , 游戏有开始、暂停、 结束等操作接口 ,而在游戏过程中 ,随着用户的按键交互 ,会出现方块的形态变化 、 方块 快 速下坠、安放该下坠物件、销毁填满的行、产生下一将要出现的方块等功能。 这里 ,先分析游戏的特点 ,把整个游戏的核心数据结构提取出来 ,再根据数据结构的特点提取出核心功能模块的关联 ,然后对这些功能一一进行细化 ,从而完成整个 游戏的设计。 下面就来分析整个游戏的整体状况 ,如图 所示。 图 游戏内部方块 从如图 所示可以看到 ,游戏区域可以看作是由许多个等面积的小方块构成的大面积区域。 而这些区域的状态只有 2 种 ,被下坠物占据和空闲 (没有被下坠物占据 ),因此 ,对于 整个游戏区域的数据 ,用一块空间来标识即可。 其状态只有两种 :被占据 1 和空闲 0。 这块空间的分配 ,可以采用动态分配的方式或者静态分配的方式去实现 ,至于数据结构的选择 ,可以是链表、队列或者数组等 ,我 这里选择静态分配并划分一个足够大的二维数组的方式来实现 ,如下所示。 //in file: define MAX_ROW 100 //地图的最大行数 define MAX_COL 100 //地图的最大列数 „„„ //in file: class:Cskyblue_RectView //内部存取数据结构 int m_stateMap[MAX_ROW][MAX_COL] 从上述代码可以看到 ,在视图类对象里面分配了一个存储游戏区域地图状态的二维数组 ID_stateMap成员变量 ,并定义其最大行数和列数都为 100(当然 ,实 际可能并不需要那么本科生毕业论文 10 大 ,只是先分配好足够的地图空间以供使用而已 )。 同时 ,还应该预先定义该区域的两种 状态值: define MAP_state_empty 0 //空(未被占据) define MAP_state_not_empty 1 //被占据 整个游戏区域的地图设计好后 ,再来看看具体的下坠物 ,通过分析它们的特性 ,还可以抽象出一些物件来。 在每个下坠物在下坠的过程中 ,总是占有地图中的某一块区域 ,那么怎样表达这些下坠物的形态和它们占有的位置关系呢 ?在此 ,先来看看它们的基 本类型 ,然后进行归纳分析 ,其基本类型如图 所示。 图 方块基本类型 从图 ,这些下坠物的 形状一共有 7种 ,对于这些形态各异的下坠物间存在一个最基本的共性 ,就是它们占有的位置空间是一样的 ,都是 4个小方块区域。 对于它们在某一瞬间的位置标识 ,我们可以采用一个 4x2 的小数组标识出来 ,如图。 图 方块位置标识 也就是说 ,用 4个存储单位空间存储当前下坠物的每一子块的位置来对整 个下坠物件的位置进行标识 ,而每个存储空间的大小就是一个点的坐标值 (x,y),于是就有如下定义。 //in file : //用于保存当前方块的动态位置, 4 个小方块分别在大数组中的存放位置为先左后右, //每一列又遵循先上后下的原则 Int ActiveStatus[4][2]。 //存入下一个要出现的方块形状的数组 Int NextStatus[4][2]。 在上述代码中 ,分配了一个整型的二维数组 ActiceStatus[][]来存储每个下坠物的 4 个子方块的坐标位置 ,其实在游戏过程中 ,变动的下坠物件除了当前用户正在操控的下坠物件外 ,项目程序的 右上方还需要显示出下一个下坠物件的形状。 也就是说 ,在游戏过程中 本科生毕业论文 11 的某一瞬间 ,除了需要记录当前用户正在控制的下坠物状态外 ,还需要记录预先随机生产出来的下坠物件状态 ,于是代码中多了一个 NextStatus[][]数组成员变量 ,用以存储下坠物的形态。 还有一个问题没有解决 ,这些形状各异的下坠物件 ,虽然都是由 4个小方块构成 ,但是对于它们的编号还没有一定的规律 ,因此需要人为地定下一些规则 ,而这个规则就是 :编号从下坠物的左边起往右编排 ,而在同一列的方块中 ,则从上往下的顺序开始编号它们的对应关系 如图。 图 方块类型对应位置标识 如图 所示的两个不同的下坠物 ,每个方块按照从左到右的方式进行编号 ,并且在编号过程中对于同一列的方块实行从上到下进行编号 ,而该方块所在游戏区域的位置坐标 则 存储在下标与编号所对应的 ActiceStatus[][]二维数组的每个单位里面 ,如 : ActiceStatus[0][0] 和 ActiceStatus[0][1]则是第 0 号方块的横坐标 X 和纵坐标 Y。 ActiceStatus[2][0] 和 ActiceStatus[2][1]则是第 2号方块的横坐标 X和纵坐标 Y。 至此 ,可以实现下坠物件的位置标识了 ,那么对于某一下坠物的形态特性又怎么标识呢 ?可以使用这样的方法 :用一个宏去标识 ,第 1 位的数值变化范围为 1~ 7, 用于标识下坠物的种类 (7 种 ),第 2位标识该种类下坠物的不同形态 ,不同的下坠物 ,如 “ 田 ” 字形的下坠物只有 1种形态 ,所以没有第 2位 ,其他的不同形态则从 1~ 4(最多有 4种形态 )按顺序标识即可 ,如第 2种下坠物的第 3 种形态 ,其宏标识为 23,如图 所示。 0 1 2 3 2 0 3 1 本科生毕业论文 12 下坠物编号: 4 状态编号: 1 2 3 4 形状宏标识 41 42 43 44 图 方块变形表示 操作方法的抽象与设计 当完成整个游戏的基本核心数据的表达并进行抽象与设计后 ,接下来 ,就可以根据游戏的特性对核心的基本操作方法进行抽象 ,进而实现这些功能。 下面将着重分析游戏过程中的实现细节 ,以便抽象出基本的操作功能。 首先是游戏开始 ,应该有个事件触发游戏的开始 ,譬如菜单栏选项等 ,相应地 ,也可以 类推出游戏暂停与游戏结束等操作功能。 游戏开始后 ,产生一个下坠物件 ,并且在右上角生成下坠物件的基本形态 ,因此有随机物件产生这个操作。 在游戏过程中 ,方块会自动随着时间的推移而向下移动 ,因此有向下移动的操作。 在游戏过程中 ,用户可以通过按键对下坠物的功能进行操作 ,如变形操作、加速下降操作、向左移动操作、向右移动操作等。 上面说到的几点大多是从与。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。