




已阅读5页,还剩38页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第 1 章 绪论 戏的历史 游戏是人类生活的重要组成部分,从第一个电子游戏开发至今已经有 30 多年 ,在这个短暂的时期里 ,随着硬件水平的提高 ,游戏开发新技术层出不穷 ,经典游戏比比皆是。 头谈起 真正的电子游戏 机产生于 20 世纪 70 年代。 1971 年,麻省理工学院的学生名街机),叫做电脑空间。这台游戏机用一台黑白电视机作为显示屏,用一个控制柄作为操纵器,不过由于市场因素这款游戏以失败告终。但是最后他在电子游戏的发展上 取得了非凡的成就。 上面介绍的是专用机游戏的历史,而最早的电脑游戏可以追溯到 1972 年,一个叫 工程师用当时最流行的主机 司的 10 编写一段简单的 序。在这个程序里, 计了一张地图,地图上不规则的分布着陷阱,游戏者必须寻找路径避开陷阱。这个程序被公认为是最早的电脑游戏程序。 1989年, 司的设计师乔丹 千零一夜在 台上制作了一部动作冒险相结合的电脑游戏波斯王子。这个游戏获得了 第一作,它代表了当时电脑技术的最高水平。 1986年,任天堂公司发售了一款真正的游戏巨作超级马里奥。 20世纪 80年代 到了 20世纪 90 年代,游戏业才真正成熟起来,成为了一种产业。 由于 价格非常低而且硬件速度越来越快,游戏逐渐成为人们生活中不可缺少的一部分。游戏产业也逐渐发展成熟。 形硬件的革命 图形硬件的飞速发展是近些年来的事情,部分原因是来自工业方面的压力,例如在军事和医疗方面对于实时图形的需求很强烈,而交互娱乐产业也极 大的推动了图形硬件的发展。技术上的因素同样也推动着图形硬件的发展,许多图形算法可以很容易地表达为并行方式,这样硬件执行的效率变得很高。摩乐定律也起了作用,越来越多的晶体管可以集成到一块单独的芯片上。 在所谓的 形处理器)概念出现以前,特殊的图形硬件只出现在诸如&些硬件价格太昂贵,不过这些公司提供了第一代基于硬件的顶点变换和纹理映射的解决方案。 戏的意义与内涵 游戏这个名称一直就存在于每个人的日常生活中 ,如猜拳游戏、猜谜游戏、大地游戏、球类游戏等 ,林林总总 ,不胜枚举 ,甚至于有些流行歌曲把人生也比喻为游戏 ,好比“一场游戏一场梦” 。因此 ,游戏对于现代人的成长历程 ,绝对是一个不可或缺的重要角色。 戏的组成要素 “ 游戏 ”, 最简单的定义 ,就是一种供人们娱乐休闲的快乐元素。从更专业的角度形容 , “ 游戏 ” 是具有特定行为模式、规则条件、身心娱乐及输赢的一种行为表现。这种行为表现具备以下 4个要素。 行为模式 :“ 游戏 ” 最简单的要素就是游戏有特定的流程模式 ,这种流程模式贯穿于整个游戏的行为 ,用户必须依照它的模式流程来执行。倘若一种游戏没有了特定的行为模式 ,那么就没有执行 的行为;在没有执行的行为之后 ,这个游戏也玩不下去了。举个例子来说 ,如果猜拳游戏没有了剪刀、石头、布等行为模式 ,那么这还能叫做“猜拳游戏” 吗 ?所以不管游戏的流程有多么复杂还是多么简单 ,一定要有特定的行为模式。 条件规则 :当游戏有了一定的行为模式后 ,接着就必须制定出一系列的条件规则。简单来说 ,这些游戏的条件规则就是大家必须去遵守的游戏行为守则 ,只要是大家一致以为的游戏行为 ,在游戏中 ,玩家就必须遵守它 ,如果不遵守这种游戏行为 ,那么就失去了公平性。如同一种简单的球赛 ,打球的英文解释可以用 加以说 明 ,按照英文字面上的解释 ,它就是执行游戏的行为 ,而球赛必须有一定的条件规则 ,并且参与者都要必须去遵守它 ,不能遵守它就叫作 “ 犯规 ” 。所以不管是什么游戏 ,它都会具备一组规则条件 ,在游戏进行的时候才会有足够的公平性。 娱乐身心 :一种游戏所带来的娱乐性 ,关键就在于为玩家所带来的刺激感 ,这也是游戏的精华所在。简单来说 ,不管是很多人玩的游戏 ,还是一个人玩的单机游戏 ,游戏本身就会存在它的娱乐和刺激性 ,使得玩家们想要去玩它。 输赢 :其实针对游戏而言 ,输赢是所有游戏的最终目的。一个没有输赢的游戏,也就没有了它存在的意义,如同 我们常常接触到的猜拳游戏,说穿了最终目的就是为了分出胜负而己。 一般而言,游戏又可以分为动态和静态两种形态。动态的游戏必须配合肢体动作,如猜拳游戏;而静态游戏则是较偏向思考的行为,如同纸上游戏。然而不管是动态或是静态游戏,只要具备上述 4项组成要素,都可以将它称为“游戏”。 罗斯方块游戏 俄罗斯方块是一款风靡全球的电视游戏机和掌上游戏机游戏,它曾经造成的轰动与造成的经济价值可以说是游戏史上的一件大事。这款游戏最初是由苏联的游戏制作人 作的,它看似简单但却变化无穷,令人上 瘾。 但是经过时代的变迁,当初简单却变化无穷的俄罗斯方块游戏如今却已失去了它的市场,究其原因,主要是因为游戏硬件以及技术的革新使得优秀的游戏接二连三地推出,而俄罗斯方块游戏作为一款形式、内容过于简单的游戏势必经受不住时间的冲击的。 现在作者将 改写这个固定的游戏模式,通过增加一系列的新功能,开发出一种全新的俄罗斯方块游戏,使游戏用户重新燃起对俄罗斯方块游戏的热爱。 第 2 章 可行性研究 计目的 综合运用在校期间所学理论知识和技能,设计开发俄罗斯 方块,使自己熟悉应用系统的开发过程,培养独立思考能力,检验学习效果和动手能力,提高工程实践能力,为将来实际工作打下坚实的基础。 行性研究前提 基本需求 :系统开发的总体任务是实现游戏的可操作性、美观性、及时性 ,及适当的功能扩展 。 主要开发目标 :采用结构化设计方法, 开发出一个可操作性、美观性、及时性的游戏,并通过此次软件开发过程全面提高自身的综合素质。 可行性研究所采用的方法和步骤 :通过研究分析俄罗斯方块所具备的能力及实现的方法、确定主体结构。利用现阶段我所能达到的能力,以最简洁、最容易的办法,边 开发边测试边修改,实现一个 有一定可玩性的 游戏软件。 评价尺度 :本游戏尽量追求游戏操作的合理性及正确性, 但是仍不排除会出现一些偶然性的错误;同时游戏也尽量追求界面的美观性及功能的丰富性,但是基于时间的关系,可能会有极少数的拓展功能不能实现。 行性分析 管理可行性 : 本游戏设计的目的只在于提高自身实践水平,并不对外发布,因此完全具有管理可行性。 经济可行性 :由于本游戏的主要背景是毕业课程设计,不注重直接的经济效益和其后的发展方向,只在注重自身水平和能力的提高,对自身的经济要求也不高,只要有一台电脑 便可,所以不用考虑到经济问题。 技术可行性 :可用与本游戏的编程语言有 虑到用于编写程序的困难度,和对语言的了解程度,选择 为编程语言。需要对 图形界面设计、事件处理、多媒体、网络编程等有一定了解 。 社会可行性 :本游戏的开发作为毕业课程设计以巩固先前所学的知识,以个人为单位,仅供个人平常娱乐所用,无须考虑有可能造成的社会影响,不用考虑到法律、版权等的社会因素,所以在这方面是完全可行的。 论 综上所述,本游戏软件的技术成熟、完备。各方面均无重大问题,因此 本游戏软件可开始着手编写 第 3 章 需求 分析 言 对软件需求完全理解对于软件开发工作的成功是至关重要的,需求说明的任务是发现、规范的过程,有益于提高软件开发过程中的能见度,便于对软件开发过程中的控制与管理,便于采用工程方法开发软件,提高软件的质量,便于开发人员、维护人员、管理人员之间的交流、协作,并作为工作成果的原始依据,并且在向潜在用户传递软件功能、性能需求,使其能够判断该软件是否与自己的需求相关。 戏功能需求 戏界面需求 良好的用户界面 设计。本游戏主要有三个界面 ,一是用于主游戏区的游戏画布,用来显示游戏时运动和落下去的方块 , 二是用于控制游戏的各种控件以及显现游戏信息的一些组件,这是一个面板,三是进行网络对战时用以显示对方游戏信息的面板。 戏控制需求 方块下落时,可通过键盘方向键(上、下、左、右键)对该方块进行向上 (变形 ),向下(加速)、向左、向右移动。 形显示需求 随机给出不同的形状(长条形、 字形、 7字形、反 7形、落填充给定的区域,若填满一条便消掉,记分,当达到一定的分数时,过关, 一共设置十 关,每关方 块下落的速度不同,游戏中 先结束的一方为本局输家,十关过后,胜出局数多的为赢家 。 乐播放需求 本游戏,应该具备播放背景音乐和发生相应操作时的音效的功能,比如,方块落下、满行消除时的音效。 具使用需求 本游戏,可以具备几种道具的使用功能,比如,这些道具可以是某些特殊的方块,比如,可以定义一种旋转的方块,也可以定义一种炸弹,能够炸毁一定数 量的方块,以增强游戏的趣味性。 络对战需求 本游戏,具备网络对战功能,所以要求玩家能够看到对方的游戏信息 。 行环 境及系统性能的需求 本游戏对运行环境及系统性能的需求如表 示 : 表 戏对运行环境及系统性能需求分析表 操作系统 000/003 内存容量 64卡要求 8M 声卡要求 支持 卡 交互工具 键盘 /鼠标 腾 133以上 光驱 8倍速以上 硬盘空间 400示器 开发 及运行 软件 口需求 本软件需求通过键盘进行操作,在 下,利用键盘的上、下、左、右键对方块进行移动变形,要使用键盘的接口事件。 案论证 可用于较好地实现俄罗斯方块的 语言 有 C+、 所以客观上说来,可用 +这三种语言 编写俄罗斯方块程序。 下面结合自身实际情况分别论述三种语言的优缺点并从中选择一种适合的编写语言。 点 句生成器和快速提示帮助使用户不必记忆成千上万的属性和方法,在较短的时间内就能开发出功能强大的应用程序。支持动态 类繁多,功能强大的多媒体控件,能帮助用户在较短的时间内用较少的语句编写出图文声像并茂的多媒体程序。能对多种数据库进行读写操作。它所提供的可 视化数据管理器能帮助用户构造多种类型的数据库。用户自定义类型可以作为参数或作为公共属性和方法的返回值,函数可以返回数组变量,动态数组可以赋值,文件系统对象,按名调用,增强创建对象函数和 用程序安装向导能帮助用户自动生成具有一定功能的应用程序,加快了程序的开发速度。 +的 特 点 C+是对 C 语言的扩充 ,扩充的绝大部分来自著名语言中的最佳特性:从7 中吸取了类,从 8 中吸取了运算符一名多用、引用和在分程序中任何地方说明变量,综合了 类属和 模块特点,从 吸取异常处理,从 。 C+保持了 C 的紧凑、灵活、高效和易移植强的优点,它对数据抽象的支持主要在于类概念和机制,对面向对象风范的支持主要通过虚拟函数。 C+既有数据抽象和面向对象能力,语言运行性能高多,加上 从 +的过渡较为平滑,以及 C+与 的 +环境中重用。 尽管 C+当初的设计本意是帮助管理大型程序,但其用途并不仅限于此。 C+的面向对象的特性可有效地用于实际的程序设计工作。 C+常常用于设计编辑器、数据库、个人文件系统以及通讯程序等。而且,由于 C+共享 以用 C+可以构成很多高性能的系统软件。 点 几乎所有的特点也是围绕着这一中心展开的并为之服务的,这些特点使得 外,作为一种面世较晚的语言, 面向对象、多线程等,这些也都在它的特点中有所反映。 平台无关性: 如前所述, 可移植性,利用 发人员可以编写出与具体平台无关、普遍适用的应用程序,大大降低了开发、维护和管理的开销。 面向对象 : 面向对象的编程语言。面向对象技术较好地适应了当今软件开发过程中新出现的种种传统面向过程语言所不能处理的问题,包括软件开发的规模扩大、升级加快、维护量增大经及开发分工日趋细化、专业化和标准化等,是一种迅速成 熟、推广的软件开发方法。面向对象技术的核心是以更接近人类思维的方式建立计算机逻辑模型,它利用类和对象的机制将数据与其上的操作封装在一起,并通过统一的接口与外界交互,使反映现实世界实体的各个类在程序中能够独立、自治、继承;这种方法非常有利于提高程序的可维护性和可重用性,大大提高了开发效率和程序的可管理性,使得面向过程语言难于操纵的大规模软件可以很方便的创建、使用和维护 。 多线程机制: 多线程是当今软件技术的又一重要成果,已成功应用在操作系统、应用开发等多个领域。多程序技术允许同一个程序有两个执行线索,即同时做两 件事情,满足了一些复杂软件的需求。 且提供语言级的多线程支持,即定义了一些用于建立、管理多线程的类和方法,使得开发具有多线程功能的程序变得简单、容易和有效。 简单易学: 如前所述,衍生自 C+的 于安全稳定性的考虑,去除了 C+中不容不得易理解和掌握的部分,如最典型的指针操作等,降低了学习的难度;同时 语言几乎一模一样。这样,无论是学过 ,还是已经掌握了 会感到易于入门。 面向对象是一种认识世界的方法,是一种程序设计方法。面向对象的观点认为,客观世界是由各种各样的实体,即对象组成的。每种对象都有自己的内部状态和运动规律,不同对象间的相互联系和相互作用就构成了各种不同的系统,并进而构成整个客观世界。按照这样的思想设计程序,就是面向对象的程序设计。 面向对象的程序设计吸取了结构化程序设计的先进思想,并把它们同几个支持用户用新方法进行程序设计的有力概念结合在一起。 所有面向对象的程序设计语言一般都包含三个概念:封装、多态性和继承性。 这种方法要求语言必须具备抽象、封装、继承和多 态性这几个关键要素。 面向对象的程序设计,是通过数据和代码建立分块的内存区域,以便提供对程序进行模块化的一种程序设计方法,这些模块可以被用作样板,在需要时再建立其副本。 C+和 以我排除了用 是 C+主观上在校期间学校并没有这方面的授课内容,虽然自学了一些内容,对C+也有一定了解,但是若用 C+实现,必定是基于 +设计,对于 还有待提高,而我对 对而言,比较熟悉,综合考虑, 决定 采用 第 4 章 概要设计 戏设计所要遵循的规范 一个良好的程序,在编写之前,必须要制定各种编写规范,以便组内各成员协调工作。当然,本游戏只是一个小程序,过多的规范制定显得没有必要,但是,也必须制定一个对于变量的命名规则,这有利于设计出一个可读性高的程序。 本程序变量的命名规则为: 所有变量一律使用相应的英文单词命名 如果同一类中需要创建多个同一类型,功能相似的变量,变量的前缀应使用统一的英文单词,后缀为下划线“ _”加数字。 比如,从 象创建开始按钮,可以命名为 :如,创建多个道具按钮,可以命名为 等。 方法命名尽量使用能够描述本方法功能的英文单词 比如,游戏初始化可以用 类名字命名也应当使用能够描述本类功能的英文单词。 如方块类,可以用 戏总体设计分析 纯面向对象( 程序语 言,它的诸多优点在此就不作论述了。从面向对象的观念出发,本程序主要可 分为以下几 个 模块 : 客户端 方块 及地图 数据 模块 音频文件播放模块 道具使用模块 网络传输模块 分析对象的技巧在于它的 功能的扩展性 及维护效率。试想, 如果因为外部环境或者用户需求的变化需要对程序进行功能扩展或者维护, 就要 对代码 作大幅度的更动甚至重写,这样就失去了面向对象 的优势 ,所以在本程序分析时将 独立性高的模块作为一个对象 , 以提高程序的可扩展性和可维护性。 模块的算法设计 户端接口 的设计 “客户端控制器”是指游戏界面上显示游戏相关信息及排布游戏控件的面板。游戏客户端控制器上集合 了游戏的各种事件处理,包括游戏定时控制,键盘 控制,道具控制,音乐播放,选择网络对战等各种控制命令。本模块是程序的主模块,其它四个模块都由本模块进行控制。 1 客户端接口的结构,如图 图 户端结构图 2 客户端接口的实现 一个程序,在追求程序性能的同时,应该同时注重 于此,本游戏应该采用 件是一组完全由 有本地代码,不依赖本机操作系统的支持,所以 起 件 ,件在美观度和控制性能方面具有如下几方面的优点: 可插入的外观感觉 在 豫控制组件外形恶对等类与具体平台相关,使得 &F。 L&F 的支持改变了单一图形界面的观感,即实现了在任意平台上运行同一个 序能有不同恶 L&F。变成人员可以在 得程序运行时可以根据喜好选择不同的 L&F,呈现不同个性化界面。 设置边框 可以使用相应的方法为 件设置 一个或多个边框。 提供了各种各样的边框供用户选用,也能够给通过变成人员的组合来设计个性边框。充分利用边框设计,可以协助布局管理器对组件进行合理的布局。 使用图标 此特性使得 多 签,不仅可以使用文字,还可以使用图标来加强外观效果。 支持键盘操作 在 用 法,能使用户通过键盘操作来替代鼠标驱动 件的相应动作 。 可存取性支持 所有 供对可存取性的支持,使得辅助关 客户端 控制器 程 序 运 行 网 络 对 战 背景音 乐 游戏暂 停 道具使 用 游戏开始 功能如屏幕阅读器、语音识别系统,能十分方便地从 件设置三个通讯对象:模型、视图和控件,并将模型与视图奋力开来,这样可以方便用户直接通过模型管理数据,实现基于一种模型的多种视图处理。 基于 件的优点,结合本程序的设计目标,程序的界面将使用 块及地图数据模块 的设计 这是俄罗斯方块游戏最基本的功能模块,本游戏的设计思想是只要 有客户端控制器及方块地图数据模块,就能实现游戏的基本功能。本模块其实可以分开为方块和地图两个模块,但考虑到二者联系紧密,需要共享数据结构,属于公共耦合,耦合性过高,将二者分开也有悖于作者设计的游戏算法,增加了程序的编写难度,故把它们并作了一个对象。 1方块数据 方 块 数据存储了七种不同形态的方块,以及每个方块的四种形态,可用一个7四维数组表示,例如,定义一个四维数组 444,数组第一维表示七种不同形态的方块,第二维代表方块的四种不同翻转状态。数组的第三维和 第四维代表某一种形态的方块的某一状态。 假定, 0ij的值如以下: 1,1,0,0 0,1,0,0 0,1,0,0 0,0,0,0 则, 0ij代表“ 7”字型的方块。当方块翻转时,只需改变第二维的下标即可,即, 0ij变为 1ij。而如果更改方块形态,就改变数组第一维坐标。 2地图数据 本游戏的游戏地图为 25应当用一个 25行 15列的二维数组存储游戏地图数据,但是考虑 到本游戏嵌入了方块越界自动纠正功能,而方块越界,实际上就是游戏地图数组越界。假定,方块数据有以下数据模式,代表长条形的一种方块: 0,0,0,1 0,0,0,1 0,0,0,1 0,0,0,1 当以上数据模式所代表的方块处在游戏的左边界区,并且发生翻转时,方块可能翻出游戏地图外,在这种情况下,就发生了游戏地图数组越界, 常处理系统会抛出 避免这种情况的发生,游戏地图数组应当适当增大,故本游戏将地图数组长度和宽度各扩大了三个单位,定义成为 28式的数组。 3建立游戏的坐标系统 俄罗斯方块,最终是要将方块绘到游戏地图中,如何确定方块在地图上的位 置,就需要一个方块数组与游戏地图数组的映射关系。建立一个合理的坐标系统,对于游戏的设计有莫大的方便。结合 合游戏设计上的考虑,本程序最终确定了将游戏地图的左上角坐标表示为 (0,0),同样,方块在游戏地图中表示为记录方块左上角在游戏地图中的坐标。 4对方块数据和游戏数据的操作 确定了方块数据与地图数据的映射关系,对方块和游戏数据的操作就变得简便了。对方块的操作包括方块的左移、右 移、下移等,当方块左移时,只需将方块数组左上角的坐标往左方向移动一个单位即可,同理,方块右移、下移时,只需将坐标往右、往下移动一个单位。 如果以 Y 代表纵坐标,方块左移,执行的操作是 块右移,执行的操作是 X+,方块下落,执行的操作是 Y+。 5游戏绘图 俄罗斯方块具有七种不同形态的方块,而方块又分别有正在下落和已经落下固定两种不同状态,如何在游戏地图中实现静态和动态地绘制出七种不同形态的方块,具有一定的挑战性。经过反复思考论证,本游戏决定采用不同的绘制模式来分别实现绘制 动态和静态方块。 遍历方块数组绘制动态方块 假定调用 中的 x,y,法绘制方块,再假定方块数组左上角在地图中的坐标为 x和 y,则绘制动态方块可采用如下方式实现。 i=0;i=3;i+) j=0;j=3;j+) ij=1) y+j)*x+i)* 这种绘制方式的原理是每一次绘制一个单位长度的正方形格子,在将这些格子组合成某一种的形态方块。这里面,某一种形态的方块是由方块数组中的参数i 和 j 决定的,具体是哪种形态的方块,方块的哪一种翻转状态,是由参数定的。而参数 y+x+i 表示的是小格子的纵坐标。 遍历游戏地图数组实现坠下方块的消行绘制 当坠下的方块有满行需要重新绘制时,需要进行消行绘制。首先,可 用一个数值代表游戏地图数组的某一个区域是否有方块填充,假定这个数值是 2,即如果地图数组中某一个元素的值为 2,则表示这个元素所代表的地图区域存在方块。进行消行绘制时需要判断地图数组的某一行是否全为 2,如果全为 2,则可以认为这行被方块填满,需要进行消行,然后再继续往下判断下一行,直到所有满行被消除为止。 图 行流程图 乐播放 模块的设计 音频文件的播放涉及到 管是何种系统,对于 是比较慢的,如果当程序运行 到需要播放音效时,再从文件中取得音频数据,然后播放,很可能会造成一种“卡”的感觉,影响用户体验。基于此,经过反复论证,本游戏决定采用以剪辑的方式来播放音频文件。 言中的剪辑 一种在播放之前就提前加载于内存中的特殊的音频数据流,当需要用时,只需直接从内存中调出即可,省去了 取所需的大量时间,而且剪辑播放完毕后,仍旧存储在内存中,对于游戏的背景音乐及音效这类需要反复多次播放的音频,这种方式是非常有用的。 单单采用剪辑还是不够的,音频文件的播放,应当另外开启线程来控制,这样既可以更方便地控 制音频的播放、暂停等操作,也不会程序执行其它的操作。 1音效播放 在游戏开始、暂停,方块落下及消行时添加相应的音效既可以提醒用户发生某种变化,又能增强程序的表现效果。音效,相对来说是比较小的音频文件,对于音效,可选取 式的音频文件,不但音频质量好,在系统支持、存储性方面也占有优势。 根据多线程及剪辑的思想,首先在程序初始化时应该把音效载入内存,游戏开始后开启一个线程,当满足音效播放的条件时,即播放音效,音效播放完毕后,应当将相应的音频文件的剪辑位置重新置为开始处。 2背景音乐播放 同音效的播放,背 景音乐的播放也应当采用剪辑的形式,以方便音乐的循环多次播放,同样,背景音乐播放可能是贯穿于整个游戏过程,背景音乐的播放必须采用单独的线程控制,以不影响程序执行其它操作。 因为背景音乐采用单独线程播放,这里面会出现一个问题,当用户选择暂停背景音乐播放时,背景音乐播放线程是进入 态还是以另一种方式实现暂停?如果背景音乐进入 态,则当用户取消暂停播放时,必须再创建一个线程去唤醒它,新建一个线程只是控制背景音乐播放,不免浪费资源,而且也增地图数组某一行是否全为 2 是 消去这一行 否 结束 开始 加程序编写难度。 考虑到背景音乐极可能在玩家的整个游戏过程中都 处在播放状态,当暂停时,玩家也随时会取消暂停,故而在游戏结束之前,本程序会将背景音乐播放线程一直处在执行状态,如果玩家暂停音乐播放,则让线程转去处理检测玩家是否取消暂停,当检测到暂停取消后,继续播放音乐。 具使用模块 目前已经存在的俄罗斯方块游戏鲜有能够使用道具的,开发一款能够使用道具功能的俄罗斯方块游戏具有一定挑战度,因为道具的开发不仅涉及到游戏策划等创意性的内容,也与图形图像处理等美工技术息息相关,而作者对美工却是不擅长的,基于此,本游戏最初版本的道具可能只有一个,但是为了将来版本提升的 方便,本程序另外预留了三种道具的使用接口。 本游戏一共设计了五种道具,旋转方块、炸弹、地雷、仙女、恶魔,这四种道具是程序现今或将来版本提升后要使用到的,暂时,本游戏将只实现旋转方块和炸弹两种道具。 1旋转方块 旋转方块是一种增加游戏难度的道具,它本身其实就是方块,和正常的方块的不同之处就在于,正常方块在下落时,如果没有接受到用户的控制命令是不会旋转的,而旋转方块则会不断地旋转下降。这样,用户便很难控制旋转方块下坠到指定的位置。 对于旋转方块的定时下落,可以借用方块控制线程,但是旋转方块的定时旋转,则只能依 靠另一个线程实现。 2炸弹 本游戏定义的炸弹能够像方块一样从地图的顶部坠落,当下坠到地图下部与堆积的方块碰撞时会发生“爆炸”,爆炸将炸毁一定数量的方块。 炸弹的视图模型以现成的方块模型为依据,即除了添加的“炸弹”标记,它和七种方块在外形上是没有任何区别的。炸弹,可以看成是一种特殊类型的方块。 对于炸弹的杀伤力,有一个规则,如果炸弹能够没入已经坠下的方块中,则可以将这个“炸弹”所占的行数全部炸毁,并增加相应的积分,如果本身已经能够消行,则额外再奖励一倍的积分。否则,炸弹将只炸毁它左右各两个格子范围内的方块。 络对战模块 目前的俄罗斯方块游戏中,也鲜有具备网络对战功能的,这是因为此类小游戏不具备在网络对战方面的可玩性,当然,如果能够利用道具进行网络对攻,那就另当别论了。就如 的火并俄罗斯方块一样,要实现利用道具进行网络对攻,其中一方玩家必须能够看到他的对手的游戏信息,但这并限于看到对手的道具数量,下一个方块预告。所以,本游戏要求将游戏地图中方块的实时信息远程传输到另一方玩家的显示平台。 图像的远程传输首先要求将游戏地图中的方块信息转化为图像资源,然后将图像资源转化成基于某种图片格式的数据流, 进行打包发送,在接收端上,再把图像数据从数据包上提取出来,进行解码,生成相应的图像,然后再把图像绘制 到游戏画布中。 进行网络传输,首先应当选定一种网络传输协议。 接字协议和 据报协议二者中前者传输速率慢,但是提供可靠性保证,准确率高,后者传输速率快,但是并提供可靠性保证。对于游戏的网络对战来说,对网络传输的实时性要求比较高,一方玩家必须能够看到另一方玩家游戏状况的实时信息,这就要求图像的传输速率必须要快,同样因为它的实时性,即使某一次传输错误,后面一帧图像也会马上覆盖前面的图像,人的肉眼基本上不 能辨别出这种错误,基于此,本游戏的网络对战传输方式应该采用基于 用户数据报协议。 靠性设计 游戏在设计时 应当尽量注意降低各个模块之间的耦合性 , 增强模块的独立性,以便将来需求时进行游戏版本的提升以及相关维护。 要设计评审 经过反复论证,上面提出的设计方案,尤其是游戏设计的各个功能模块间的算法确实可行,因此,本游戏可进入详细设计阶段。 第 5 章 详细设计 户端设计 客户端是游戏非常重要的一部分,它是所有游戏功能的开关,上面集合了许多的图像用户接 口,客户端的实现应该确定一种合理的组织架构。图 客户端的组织结构图: 图 户端的组织架构图 游戏客户端采用 且向其注册监听器,以实现各种控制功能,综合游戏前面的设计,客户端上至少要注册三个监听器,分别是窗口监听器(动作监听器 (键盘监听器 (选项监听器 ( 根据初步设计,可以确定客户端上所要用到的 件对象有 象、 象, 象、 象、 象、 象、象、 象、 网络对战开 关 背景音乐开 关 游戏控制器 游戏开 关 道具控制器 游戏定时控 制 键盘控 制 音效控制器 对象、 象,至少十二个 以创建窗体,考虑到本游戏具备单机和网络对战, 象的大小并不是不变的,在单机游戏和网络对战时, 象分别会呈现出不同大小,以适应不同的游戏环境需求。 在主界面上,可以确 定有四个 一个 二个 象是用来排列其它各种组件的容器组件,做游戏信息显示面板,可以放在游戏地图的左边,第三个 象是用来显示块的,应该画在第二个 象上,第三个 象是当网络对战时,用来绘制另一方玩家游戏地图的绘图面板,放在游戏信息显示面板的右边。 可以确定,主界面上,本游戏的按钮有五个,一个“开始游戏”按钮,四个道具按钮,排列在游戏信息显示面板上,可以将“开始游戏”按钮放在顶端,当按下“开始游戏 ”按钮后,应该改变“开始游戏”按钮的文本内容为“暂停游戏”,按下“暂停游戏”按钮后,再将其文本内容重新设置为“开始游戏”。至于四个道具按钮,可以放在信息显示面板的中部位置。 象用来显示游戏时的相关信息,比如网络对战时显示双方玩家的比分等信息。 该放在游戏信息面板的底部。 来显示双方玩家的分数信息,考虑到对战时的局时设置,还应该增加一个文本框用来计时,计时的文本框最好放在样,两个分数文本框则布置在道 具按钮和计时文本框之间。 本游戏主界面上的 先,应该为 块画布添加一个标签,然后在四个道具按钮上也应该添加一个道具标签,最后,在两个显示分数的文本框上方也应该添加一个标签最后,在游戏主界面的顶端要添加一个菜单栏,菜单栏上添加几个菜单对象。 综合以上信息,可以大概确定本游戏的主界面,如图 图 戏界面图 效播放控制模块设计 本游戏的音效播放采用剪辑及多线程的方式实现。音频播放需要用到 先,利用 方法从音频文件中取得一个音频输入流,其次,从这个音频输入流创建一个后打开这个 样,当需要时,就可以利用 的 方法播放这个剪辑,重复播放,可以用 )这个方法将剪辑的位置重新置为 0。 音效剪辑的播放控制流程图如图 图 效播放流程图 景音乐播放控制模块设计 同音效的播放,背景音乐的播 放也应当采用剪辑的形式,以方便音乐的循环多次播放,同样,背景音乐播放也要单独的线程进行控制。 前面概要设计提出了一个问题。因为背景音乐采用单独线程播放,当用户选择暂停背景音乐播放时,背景音乐播放线程如果以进入 态来暂停的话,则当用户取消暂停时必须还需要一个线程来唤醒它,额外增加一个线程的话,不免浪费系统资源,而且也会增加编写的难度。 从另一个角度来说,背景音乐极可能在玩家的整个游戏过程中都处在播放状态,当暂停时,玩家也随时会取消暂停,因此,可以让背景音乐线程从游戏开始效播放线程,游戏线程进入 态 播放音效 戏线程,音效播放线程进入 态 满足音效播放条件 开始 结束 后就一直处在执行状态,如果用户暂 停播放,可以让线程转去循环处理检测用户是否取消暂停,当检测到用户取消暂停时,继续播放音乐。 背景音乐播放控制的算法流程如图 图 景音乐播放控制流程图 络对战模块设计 如图 以在菜单栏中“游戏”菜单项中添加一个“网络对战”菜单选项,当用户单击“网络对战”菜单选项后,弹出一个对话框,提示用户输入要连接的主机的 址,用户输入 址后,程序会记录下这个 用户开启游戏后,数据传输线程会将数据发送到这个 对于实现网络传输的技术,可以用 先从 中的建一个实例,这个类的实例是有关本机屏幕资源的信息,它有一个方法,可以用它来创建屏幕上指定坐标位置,指定大小的一副图像。 当然,在此之前,我们还需要获得游戏地图所在屏幕的坐标。 中提供了一个获取组件屏幕坐标的方法 ,我们可以利用这个方法获取组件在屏幕上的坐标,然后把这个坐标赋给一个 从播放背景音乐 背景音乐播放控制线程 否 暂停播放 接受到暂停信息 是否处在 暂停状态 是 是否接受到 恢复信息 是 否 结束 开始 定宽和高的矩形,然后就可以用创建一副包含游戏地图区域的图像了。 创 建 图 像 信 息 以 后 , 可 以 利 用 中的法将图像文件写入到一个输出流中,然后可以用 从输出流中 取得数据,最后就是将数据打包发送了。 对于接收端接收到的数据包,可以先从数据包中将图像字节数据提出出来放到一个字节数组中,然后利用 法将图像字节数据转化成图像,最后将图像画到游戏画布中即可。 相应的算法流程如图 (a) 图像发送流程 (b) 图像接收流程 图 像 发送和接收流程图 具 模块设计 转方块的设计 旋转方块的出现是随机的,而随着游戏级别的提升,每一关出现的旋转方块确定游戏地图在屏幕上的坐标 构造一个指定坐标大小的 象 将 象指定的屏幕区域转化为图像资源 将此图像资源以某种格式写入输出流 从输出流获取字节数据 将字节数据打包发送 从指定的端口号接收数据包 从数据包中取得字节数据 以此字节数据创建一副图像 将图像绘制到游戏画布中 开始 结束 开始 结束 的数量也会不同,对于七种方块来说,它们在任何一段时间内出现的概率都是一致的,再者,旋转方块需要两个定时器,定时下落和定时旋转。旋转方块的这个性质要求它必须要两个线程才能控制,但是为了充分利用资源,我们可以利用方块控制线程去控制旋转方块定时下落,然后只需再创建一个线程控制它定时旋转即可。 确定了两个线程共同控制旋转方块,就会出现一个线程协调工作的问题。如果一个新方块出现的时机 正好也是旋转方块出现的时机,程序就会出现紊乱,所以必须保证,在同一时间,正常方块和旋转方块只能出现一个。 因为两个线程需要共同控制旋转方块,所以不能用 和 这两个方法去协调线程,而应当利用其它条件去协调两个线程。 首先,游戏开始后,旋转方块控制线程可以随机休眠一定时间(这个休眠时间应该是随着游戏级别的提升而缩短的)。休眠时间结束后,循环检测正常方块是否已经落下,当检测到方块落下后,马上得到一个新方块,然后开启一个循环,在方块没有落下之前让它按一定的时间频率旋转,成为一个旋转方块。 对 于方块控制线程,在方块落下时应该休眠一定数量的时间,以让旋转方块控制线程有得到旋转方块的机会,如果超出这个休眠时间,旋转方块控制线程还没有得到新方块,则可以认为旋转方块控制线程还处在休眠中,方块控制线程得到一个新方块。 相应的算法流程如图 图 转方块控制线程工作图 休眠时间结束 随机休眠一定时间 检测现有方块是否已经落下 是否能够消行 方块是否 已经落下 是否能够消行 休眠一定时间 否 是 得到新方块 休眠一定时间 旋转方块 否 是 游戏是否 结束 是否能够消行 是 否 开始 结束 图 块控制线程对旋转方块的控制示意图 弹的设计 道具的出现是随机的。 本游戏中要实现的道具“炸弹”和方块一样,从游戏地图顶部降落,每隔一个时间间隔,会自动降落一格。对于炸弹的控制,可以添加到道具(旋转方块)控制线程中。 炸弹控制的算法流程如图 休眠一定时间,让旋转方块控制线程有得到方块的机会 检测方块是 否已经落下 是否能够消行 是 休眠时间结束 旋转方块控制线程是否得到新方块 是否能够消行 是 否 否 得到新方块 方块下落 开始 结束 图 弹的算法流程图 休眠时间结束 随机休眠一定时间 检测现有方块是否已经落下 是否能够消行 是否能 够消行 是 否 能 够消行 休眠一定时间 否 是 产生一个炸弹 炸弹落下 否 否 是否完全没入了方块中 炸毁左右各两个格子范围内的方块格子 炸毁所占行数的方块,增加相应积分,再额外增加所能消行 的相应分数 炸毁所占行数的方块,增加相应积分 是 否 是 是 开始 结束 综合以上信息, 道具的详细设计如图 示: 图 具的详细设计图 随机休眠一定时间 检测现有方块是否已经落下 是否能够消行 是否能 够消行 是否能够消行 休眠一定时间 否 是 产生一个新道具 炸弹落下 否 否 是否完全没入了方块中 炸毁左右各两个格子范围内的方块格子 炸毁所占行数的方块,增加相应积分,再额外增加所能消行的相应分数 炸毁所占行数的方块,增加相应积分 是 否 是 是 新方块是否是炸弹 是否能够消行 休眠一定时间 方块是否 已经落下 是否能够消行
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年安全管理学A考试模拟题及答案
- 2025年农家乐面试题营销推广能力提升
- 2025年烹饪大师国家认证考试试题及答案解析
- 2025年美术设计试题及答案解析
- 2025年旅游景区策划师专业知识评估试卷及答案解析
- 2025年婚礼策划师技能水平认定考试试卷及答案解析
- 2025年安全员C考试高频题集解析
- 2025年安全员国证考试模拟试卷及答案bi备
- 2025年供热通风空调工程师资格考试试题及答案解析
- 2025年塑料模具制造工艺师高级试卷含答案
- T-CITSA 57-2025 高速公路基础设施主数据标准
- 住院病人防止走失课件
- 2025年临床助理医师考试试题及答案
- 2025年南康面试题目及答案
- 2025年全国学宪法讲宪法知识竞赛考试题库(含答案)
- 定增基金管理办法
- 汽车标定工程师培训课件
- 速叠杯教学课件
- GB/T 45767-2025氮化硅陶瓷基片
- 2025年第十届“学宪法、讲宪法”活动知识竞赛题库及答案
- 北京项目工程管理办法
评论
0/150
提交评论