坦克大战毕业论文

更新时间:2024-07-04 03:09:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

封面

中原工学院信息商务学院 毕业设计(论文)

题 目:

专 业: 班 级: 学 号: 学生姓名:

指导教师:

年 月

论文编号:

游戏(坦克大战)软件的开发

——游戏过程一

Games (Battle City) software development

——Game Process One

专 业:计算机科学与技术 班 级:软件064班 学 号:200680011412 学生姓名:康小武

指导教师:赵一丁

2010年 6月 3日

摘要

本论文第一章是介绍国内外游戏的发展状况,第二章介绍一些游戏编程的技术和原理,第三章开始是坦克大战的总体设计,对游戏有一个总体的设计,第四章介绍了详细设计,游戏具体实现都在这章,第五章是介绍了本程序的设计创新之处,最后总结。

坦克大战用VC实现起来不难,先准备各种图片,然后用计时器把这些图片在屏幕上一直重画。通过键盘的输入来改变控制坦克;子弹打中敌人,敌人爆炸,同样敌人也能移动,也能放子弹,敌人子弹打中我方坦克也会爆炸消失;敌人坦克数为0打完进入下一关,己方坦克数为0游戏结束,并有打分统计;最后加入了游戏声音。这个游戏主要是图片的显示问题,因为一直在刷新,必然会导致“闪屏”现象,用“双缓冲”可以解决这个问题。设置透明色可以让图形显示更美观。

关键词: 坦克大战; 游戏; 计时器; 双缓冲

I

Abstract

This thesis’ first chapter describes the development of domestic and international games, chapter II describes some game programming techniques and principles, Chapter 3 start is the overall design of the battle, the game has an overall design, Chapter 4 describes the detailed design, game specific implementations in this chapter, chapter v is describes the program's design innovations, concluded.

Battle with VC it, prepare a variety of pictures, and then use a timer to these pictures on the screen has been repainted. The input through the keyboard to change the control tanks; the bullet hit the enemy, the enemy of the explosion, the same enemies move or be placed bullet, enemy bullet our tank will disappear; the enemy tank explosion is the number 0 when enter the next level, self number 0 tank game over, and scoring statistics; and finally joined the game sound. This game is the display problem, as has been refreshed, the "splash screen" phenomenon, "with" double buffering can solve this problem. Set transparent color can make graphic display more beautiful.

Key words: Tank Battle; game; timer; double buffering

II

目 录

摘要 ................................................................................................................... I Abstract .......................................................................................................... II 目 录 ......................................................................................................... III 1章 游戏的发展状况 ...................................................................................... 1 1.1 背景 ........................................................................................................ 1 1.2 著名的游戏公司简介 ............................................................................ 3 1.3 国外游戏发展状况 ................................................................................ 5 1.3.1 欧美游戏制作现状 ......................................................................... 5 1.3.2 韩国游戏制作现状 ......................................................................... 5 1.3.3 日本游戏制作现状 ......................................................................... 6 1.3.4 台湾地区游戏制作现状 ................................................................. 6 1.4 国内的发展状况 .................................................................................... 6 1.4.1 萌芽期 ............................................................................................. 7 1.4.2 创业期 ............................................................................................. 7 1.4.3 发展期 ............................................................................................. 8 第2章 游戏设计原理及技术 ....................................................................... 11 2.1 游戏类型 .............................................................................................. 11 2.2 游戏开发的各个阶段 .......................................................................... 12 2.2.1 早期阶段 ....................................................................................... 13 2.2.2 生产阶段 ....................................................................................... 13 2.2.3 生成包装阶段 ............................................................................... 13 2.2.4 测试阶段 ....................................................................................... 13 2.2.5 发布阶段 ....................................................................................... 13 2.3 游戏一般循环过程 .............................................................................. 14 2.4 游戏一般架构 ...................................................................................... 15 2.4.1 平台独立性与平台相关性 ........................................................... 15 2.4.2 游戏独立性和游戏相关性 ........................................................... 15 2.4.3 对象组合与对象继承 ................................................................... 15 2.4.4 基于帧的和基于函数的设计 ....................................................... 16 2.4.5 动态和静态操作顺序 ................................................................... 16 2.4.6 动态和静态对象生命期(以及所有权) ................................... 17 2.4.7 任务的水平集成和垂直集成 ....................................................... 17 2.5 游戏设计中应该注意的问题 .............................................................. 18 2.5.1 深度vs宽度 ................................................................................. 18 2.5.2 立即存盘的取舍 ........................................................................... 19

III

2.5.3 立即存盘为何如此困难 ............................................................... 19 2.5.4 独立于文化的游戏设计 ............................................................... 20 2.5.5 游戏设计与文化和政治敏感问题 ............................................... 20 第3章 坦克大战总体设计 ........................................................................... 21 3.1 总体设计 .............................................................................................. 21 3.1.1 运行环境 ....................................................................................... 21 3.1.2 基本设计和处理流程 ................................................................... 21 3.1.3 结构 ............................................................................................... 21 3.1.4 功能总述 ....................................................................................... 22 3.2 接口设计 .............................................................................................. 23 3.2.1 游戏存取问题 ............................................................................... 23 3.2.2 声音控制问题 ............................................................................... 23 3.2.3 键盘设置问题 ............................................................................... 23 3.2.4 坦克速度设置问题 ....................................................................... 23 3.2.5 总体游戏速度设置问题 ............................................................... 23 3.3 界面设计 .............................................................................................. 23 3.3.1 游戏界面 ....................................................................................... 23 第4章 详细设计 ........................................................................................... 25 4.1 程序系统结构 ...................................................................................... 25 4.1.1 主程序 ........................................................................................... 25 4.1.2 用户自定义控件 ........................................................................... 25 4.1.3 系统的总体流程图 ....................................................................... 25 4.2 功能实现 .............................................................................................. 26 4.2.1 启动画面 ....................................................................................... 26 4.2.2 计时器 ........................................................................................... 27 4.2.3 键盘消息 ....................................................................................... 28 4.2.4 鼠标消息 ....................................................................................... 29 4.2.5 游戏开始暂停 ............................................................................... 29 4.2.6 图形按钮 ....................................................................................... 31 4.2.7 坦克控制 ....................................................................................... 31 4.2.8 坦克发子弹 ................................................................................... 33 4.2.9 障碍物设计 ................................................................................... 34 4.2.10 敌人坦克显示 ............................................................................. 34 4.2.11 敌人坦克AI ................................................................................ 35 4.2.12 敌人坦克移动判断 ..................................................................... 36 4.2.13 敌人发子弹、子弹移动 ............................................................. 36 4.2.14 子弹越界判断 ............................................................................. 37 4.2.15 己方子弹打中敌人、敌人爆炸 ................................................. 37

IV

4.2.16 敌人坦克子弹打中我方坦克、我方坦克爆炸 ......................... 38 4.2.17 我方坦克的重生 ......................................................................... 38 4.2.18 敌人坦克的重生 ......................................................................... 39 4.2.19 打分系统以及坦克数显示 ......................................................... 39 4.2.20 为游戏添加声音 ......................................................................... 40 4.2.21 其他非游戏功能 ......................................................................... 41 第5章 程序创新点 ....................................................................................... 43 5.1 双缓冲技术 .......................................................................................... 43 5.2 图形按钮实现 ...................................................................................... 43 5.3 计时器的使用 ...................................................................................... 43 5.4 设置透明色 .......................................................................................... 44 第6章 总结 ................................................................................................... 45 致 谢 ............................................................................................................... 46 参考文献 ......................................................................................................... 47 附 录 ............................................................................................................... 48 附录A: 主要源程序 .................................................................................. 48 附录B: 软件使用说明书 .......................................................................... 69

V

中原工学院信息商务学院毕业设计(论文)

1章 游戏的发展状况

相信喜欢玩游戏的朋友都是从玩最初的“小霸王”,超级玛丽,坦克大战,等等一系列经典的小游戏开始,然后就是三国志之类的大型一点的,到现在的电脑游戏,单机游戏,到网络游戏,这么一个过程,游戏其实已经不知不觉的进入了我们的生活。

电脑游戏在当今,已经十分普遍了,游戏玩家也比较多。特别是网络游戏,因为其剧情的有趣性,游戏画面的美观,招式的华丽,等一系列原因,吸引了不少游戏玩家,特别是3D网游的推出,使得网络游戏发展进入了一个新时期。游戏是怎么发展起来的?国内外游戏的发展情况是什么样的呢?下面将会给你答案。

1.1 背景

真正的电子游戏机产生于20世纪70年代。1971年麻省理工学院的学生Nolan Bushnell设计了世界上第一个业务用游戏机(俗名街机),叫做《电脑空间》(Computer Space)。《电脑空间》的主题是两个玩家各自控制一艘太空战舰围绕这具有强大引力的星球向对方发射导弹进行攻击。两艘战舰在战斗的同时还必须注意克服引力,无论是被对方的导弹击中还是没有成功摆脱引力,飞船都会坠毁。这台游戏机用一台黑白电视作为显示屏,用一个控制柄作为操作器,不过由于市场因素这款游戏以失败告终。

虽然初次尝试失败,但Nolan Bushnell仍然坚信电子游戏发展前景。他在《电脑空间》推出的次年,和朋友Ted用500美金注册成立了自己的公司Atari(雅达利)。他们获得了成功,世界上第一台被接受在业务用机就是Atari推出的乒乓球为题材的游戏。

1976年10月,Atari发行了名为《夜晚驾驶者》的模拟业务机游戏,这个游戏为黑白屏幕,自带了相关操作器(方向盘、油门、刹车等)。在这个游戏里,玩家需要扮演一个黑夜里驾驶在告诉公路上狂奔的疯狂车手。这是游戏历史上第一个3D游戏,它用简单的透视效果,专业术语是LOD(Level of Detail,层次细节)来表现汽车的前进和道路景物的后退。这款游戏成为3D游戏的始祖。除此之外,它还是历史上第一个主视角(First personal view)的游戏。

雅达利公司在开发街机市场之后又把目光转向了家用机市场。1977年,雅达利公司推出了Atari2600型游戏主机,这是世界上第一台家用专业游戏机。同年Bushnell把自己的公司以2800万美元的价格卖给了时代华纳。不久,任天堂和世嘉迅速崛起,

1

康小武:游戏(坦克大战)软件的开发

彻底击败了雅达利。

上面介绍的是专用机游戏的历史,而最早的电脑游戏可以追溯到1972年,一个叫Crowther的工程师用当时最流行的主机——DEC公司的PDP-10编写了一段简单的FORTRAN程序(FORTRAN是一种专用工程数学编程语言,当今流行的工程模拟软件MATLAB的早期版本就是由FORTRAN语言开发出来的)。在这个程序里,Crowther设计了一张地图,地图上不规则的分布着陷阱,游戏者必须寻找路径避开陷阱。这个程序被公认为是最早的电脑游戏程序。1976年,Don Woods编写了一个类似的程序,更为重要的就是他加入了幻想成分(Imagination)和谜题(Puzzle)。Woods的这个程序直接导致了电脑游戏的诞生。他的程序被传播到各处,让所有的计算机高手们都为之惊喜。这个作品同时也启发了其他人的思维,紧接着,各式各样的游戏程序就诞生了。比较著名的麻省理工学院的几个学生编写的Zork(直到现在还有续集在发售)和亚当斯1978年编写的Adventure Land

后来用电脑编制电子游戏就开始在程序员之间流行起来。当时的电子游戏大多数还都是编程高手们做出来自娱自乐的“玩具”,这是因为当时接触计算机的还只是科技精英,普通人是接触不到的。说到这就不得不提苹果电脑,这个中国人眼里普遍认同的奢侈品。

Apple II推出于1976年,设计者是斯蒂夫-乔布斯(Steve Jobs),Apple II是许多人的入门计算机,同时也是一台功能强大的真正的个人电脑。Apple II和它内置的Basic程序为电脑界培养了无数的人才。Apple II当时的内存只有64KB,资源的缺乏是的当年的电脑程序精密严谨的可怕。可以说,当年的程序员才是真正懂得狂想乐趣的人,他们能够在一个匣子里完成一个世界。更重要的是Apple II代表了一种自由开发的精神,当年的电脑用户和程序员之间的差别是如此之小,可以说每一个Apple II的用户都是一个不错的Basic程序员。可以毫不夸张的说,苹果电脑早就了一大批游戏程序设计高手。而现在的家用电脑变得更像一台家用电器。

1989年,BroderBund公司的设计师乔丹-麦克纳(Jordan Mcchner)根据阿拉伯民族的古老传说《一千零一夜》在Apple平台上制作了一部动作冒险相结合的电脑游戏——波斯王子。这个游戏获得了空前的成功,他在全球共卖出200万份。“波斯王子”绝对可以说是电脑游戏动作冒险类(ACT)的第一作,它代表了当时电脑技术的最高水平。当年的玩家看到栩栩如生上串下跳的王子都不禁惊叹不已,故事讲述的是王子为了拯救公主获得爱情而和罪恶的苏丹王斗争,在游戏中王子需要跑过各种奇怪诡秘的机关,小心地避过上下活动的柱子和深坑里的尖刺,用一把阿拉伯弯刀杀死各种敌人。

2

中原工学院信息商务学院毕业设计(论文)

1983年,如本的任天堂(Nintendo)和世嘉(Sega)分别推出了自己的家用游戏主机,世嘉推出的两台游戏主机名字叫做SG1000和SG3000。而Nintendo推出的主机名字是Family Computer(FC)。

当时的FC采用6502芯片作为主CPU,还有一块专门处理图像的PPU。FC可以显示52种颜色,同屏可以显示最多13种颜色,内存合计为64KB,矩形波2音,三角波1音,杂波1音。同时任天堂采用了“以软件为主导”的指导思想,不断推出有趣的软件吸引玩家。1983年底,FC售出44万台,第二年八岁了一些先锋游戏公司分别加入FC制作者阵线,FC销量大增。1984年底FC总销售量达到150万台。1985年9月任天堂公司法手了一款真正的游戏巨作——超级玛丽(Super Mario),这个游戏讲述了一个意大利管子工打败魔王拯救世界迎娶公主的故事。任天堂凭借这款游戏确立了自己在游戏界霸主的地位。到了1985年,任天堂在家用机市场上占有率高达98%。同年,任天堂向海外发售了FC的出口型NES(Nintendo Entertainment System),当年的销量就突破了500万台。

20世纪80年代IBM PC(Personal Computer)兼容机的出现打破了Apple公司的垄断地位。虽然在最初几年里,PC上的软件数目还无法和Apple II抗衡,不过PC有一个最大的优势,那就是它是完全自由和开放的,所以更多的“穷”程序员可以选择PC机作为自己的开发平台而不是价格按规的Apple机。这时代比较著名的电脑游戏有Origin Systems公司的RPG《创世纪》系列。光荣(Koei)公司推出了第一版《三国志》。当年的《三国志I》画面很简陋,不过到后来的《三国志 4》系列开始大受欢迎,知道现在的《三国志 9》。

到了20世纪90年代,游戏业才真正成熟起来,成为了一种产业。由于PC机价格非常低而且硬件速度越来越快,游戏逐渐成为人们生活中不可缺少的一部分。游戏产业也逐渐发展成熟。这个时代诞生了许多史诗般的巨作:雷神之锤、毁灭战士、星际争霸、最终幻想、魔兽争霸等。

1.2 著名的游戏公司简介

雅达利(Atari)

游戏制作、开发的开山鼻祖,现在只能在历史的档案中找到该公司的足迹。但是雅达利留下了许多程序的开发技术,这些开发技术至今还在应用,甚至影响了计算机图形学中的某些分支。

任天堂(Nintendo)

FC、超级玛丽、魂斗罗、最终幻想……这些响当当的名字足以震撼整个游戏界,

3

康小武:游戏(坦克大战)软件的开发

过多地介绍只会显得冗繁。

世嘉(Sega)

世嘉和任天堂是同时起步的公司,两家都专注于家庭机市场。很长一段时间内任天堂一直是市场的主宰,知道《真人快打》的出现。那一年,世嘉五代主机上《真人快打》的销量远远超出了任天堂的合家欢版。北斗神拳、战斧、太空哈里等都是世嘉的名作。

光荣(KOEI)

KOEI最擅长于历史游戏。Koei有四大金牌系列游戏:《信长的野望》系列、《三国志》系列、《太阁立志传》系列和《无双》系列。除此之外,《大航海时代》系列也是他的杰作。

西屋(WESTWOOD)

西屋是《沙丘》系列、《命令与征服》系列、《大地》(黑暗王座)系列等最具盛名的经典游戏的缔造者。现在已经被EA(电子艺界)收购。

暴雪(Blizard)

暴雪十亿个以精品和跳票而闻名,创造了《星际争霸》、《暗黑破坏神》、《魔兽争霸》等经典游戏的公司。

电子艺界(EA,Electronic Arts)

“EA Sports!Enter the game!”。EA在自己的每款体育游戏的宣传中都会有这个浑厚的男声。EA的擅长项目就是体育类游戏。《FIFA》系列、《NBA》系列都是EA的代表作。

KONAMI

KONAMI并不制作游戏,它只是一个著名的游戏厂商品牌、一个集团,而负责具体制作游戏的有3个大部门:专门制作家用游戏的KCE、专门制作商用游戏机的AM和GM。它的代表作有《心跳回忆》系列,《幻想水浒传》系列、《合金装备》系列以及《实况足球》系列等。

CAPCOM

它的代表作有:《洛克人》、《龙之战士》、《吞食天地》以及《深化危机》。 Id software

它是业界有名的小公司。成立几十年来,他的前任员工加上现任员工的数量还不到20人,就是这样一个小公司,创造了3D游戏的奇迹——《德军司令部3D》,《毁灭战士》系列、《雷神之锤》系列都是他们的经典作品。

4

中原工学院信息商务学院毕业设计(论文)

1.3 国外游戏发展状况

想要比较客观的认识中国的游戏教育现状首先就要对世界上游戏产品比较发达的地区进行一定的了解,在这些地区存在的游戏教育模式与形式都是我们非常好的教科书。为此,我特地收集整理了一些资料,罗列出来并与国内的情况加以对比,以便让大家能够更加深入的了解到目前游戏教育的发展情况。 1.3.1 欧美游戏制作现状

欧美游戏制作人才的培训,现在大多是采用学院制,不过由于欧美的一些情况,他们的学院制与我们略有区别,正如美国的老师在进行教师专业培训之前必须完成大学学业一样,欧美的制作人才培训更注重的是基础和能力。在欧美的职业教育训练,在游戏制作方面是极少的,很少看到针对游戏制作方面的职业培训机构。

因此欧美的游戏制作人才相对来说有更高的起点和基础能力,也正是因为这个原因,因此欧美专业的策划人才相对较少,欧美的策划人才基本是由程序员转型而成的,这也是欧美的游戏制作在背景创意方面极少具有突破的原因之一。 1.3.2 韩国游戏制作现状

韩国有为数众多的游戏制作爱好者,因为他们的产业也非常年轻,因此,韩国的游戏制作业在几年前也没有一个良好的游戏人才培养体系。

不过值得注意的是,现在这样一个学院人才培养体系已经形成了,虽然规模和成熟等方面远不如欧美和日本。

由于韩国面积有限,加上对游戏制作几乎是倾力支持,因此韩国的游戏开发也是一个飞跃的过程,而之所以在这个过程中没有出现中国现在出现的人才断层,是因为韩国游戏开发者之间的沟通交流及资源共享要比国内强很多倍。

以引擎为例,在从国外引入一个引擎之后,韩国会动用官方的力量来对引擎进行综合的学习和分解,并且在分解学习后将所有的心得向所有从业者公开。

这样可以从整体上提升所有游戏制作者的能力,而在中国,虽然也想要这么做,但可行性会相差很多。韩国同样有面向游戏制作的职业培训机构,不过由于功利问题和类似国内的浮躁心态,韩国也有很多人才方面的问题。相比两三年前,韩国游戏研发群体的整体心态已大不如前了,考虑到本文的着重点,在此略过不提。由于韩国经历了一个类似的发展过程,因此国内机构在引入外来师资力量和课程体系时,可以适当考虑韩国的一些情况,当然由于跨度较大,可能会付出相对高昂的代价。

5

康小武:游戏(坦克大战)软件的开发

1.3.3 日本游戏制作现状

日本是一个严谨的国家,同时由于日本的游戏制作业已经发展得非常成熟,因此他们的游戏制作人才,基本上都是由大学输送的,这个过程同样不包括策划人员。专门的策划者培训专业在日本同样极为少见,日本的游戏策划人员大多由美术人员转型而成,极少有纯粹的游戏策划者,这也是日本的游戏艺术性更为明显的主要原因之一。

日本几乎所有的游戏公司都与某所大学达成了人才培养的合作协议,不论是任天堂还是SEGA,也不论是早稻田大学还是东大等,游戏公司与大学之间有千丝万缕的联系,可以说日本很少有游戏制作爱好者,只有极为庞大的游戏爱好者。

不过与欧美相比,日本存在有不少面向游戏制作的职业培训机构,这应当与日本人就业压力大和整体民族压抑性有关,其中主要的培训方向也是程序和美术。 1.3.4 台湾地区游戏制作现状

台湾地区的情况和国内更为相似,不过由于台湾从单机时代开始就一直发展得较为稳定平缓,因此在游戏人才培养方面,台湾甚至出现了官僚的情况。

这也是台湾公司近年来一直在国内开设研发机构的原因之一,因为在台湾本土,真正的游戏开发人才,很难从游戏培训机构获取,反倒不如在大陆这样一个庞大的人才库中取其精华。

相比而言,台湾的游戏制作教育业发展相对成熟,许多游戏制作公司都有自己的人才培训中心,而政府也有相对应的扶持行为。

综合地来看,台湾的游戏制作教育业在体系、师资和SDK三大方面比国内的成熟,加上文化的同源互通性,是国内机构在引入外来师资力量和课程体系的主要方向之一,而且相比引入韩国的体系,在付出方面也会稍微好一些。

总的来说,与国内现状差异是从欧美到台湾逐渐递减的,因此如果机构要进行师资力量及课程体系的引入,选择性也要按顺序递增,即首先考虑台湾,其次考虑韩国,之后再考虑日本和欧美。

1.4 国内的发展状况

从我国游戏的起源发展来看,国内游戏的发展史可以分为萌芽期,创业期和发展期三个阶段。

6

中原工学院信息商务学院毕业设计(论文)

1.4.1 萌芽期

虽然游戏行业的发展已有多年的历史,但细分起来国内电脑游戏的起步却实在太晚,1989年~1991年时算是混沌初开,一些接触外来事物较早的北京大学生凑出了几个可以“游戏”起来的游戏,那时候国内还没有互联网,传播渠道有着很大的局限,因此没能引起注意。倒是国外的几个诸如《警察与小偷》类的游戏在一些有“苹果”的高等学府如“感冒”般流传。1993年以后,国内有了以宣传电子(电脑)游戏为主要内容的媒体,这个开端让很多电玩爱好者振奋不已。1994年,几个国内电脑游戏的先锋媒体相继创刊,金盘、前导等专司电脑游戏开发制作的公司也先后成立并投入运作,国产游戏也迎来了大发展的黄金时期。《赤壁》、《八一战鹰》等一系列先驱国产游戏的面市,使得一直在关注大陆游戏业的港台地区媒体和公司兴趣勃然。智冠科技、第3波、光谱资讯等一些台湾游戏厂商也在此前后驻足大陆。所有的人都敏感地意识到:新一轮的商业机遇已经来临。 1.4.2 创业期

电脑游戏在我国起步虽晚,发展却并不为慢。作为后来者,国内业界同行们的信心、勇气和紧迫感曾经着实令玩家们欣慰。让我们记住这些在国产游戏事业上曾经洒过汗水的年轻人,正是他们的创新精神和勇气,才使得国产游戏在并不宽松的环境下蓬勃发展至今:

金盘公司——依托于清华大学的一间多媒体制作公司,也是国内最早从事专业电脑游戏开展的先锋。因其领队杨南征先生的军人素质而颇善战略游戏。

前导公司——这家1995年3月开业的公司当时主要致力于开发中国传统题材的游戏软件、智能型学习软件和基于学习机平台的教育软件,后期也曾代理销售海外优秀的游戏软件。其1996年完成的《官渡》是国内第一部基于Windows 95的大型游戏软件,也是国内第一个大量出口海外的游戏软件。

金山公司——这是国内专门从事计算机软件开发的高新技术企业,以WPS闻名于世。去年8月联想集团正式投资金山软件公司,使金山的西山居也成为国内最具实力的游戏制作团体。其早期作品有《中关村启示录》、《中国民航》和著名的《抗日之地雷战》、《剑侠情缘》,目前正在积极开发《剑侠情缘Ⅱ》(“游戏广场”曾做过相关报道)。

尚洋公司——这家公司名头极大,一部《血狮》扫了全国玩家的兴,而经过了几个回合测试的《烈火文明》同样让人心有不甘。背靠“中青旅”的科技公司资金不

7

康小武:游戏(坦克大战)软件的开发

可谓不雄厚,开发力量也算得上较强,想来发展后劲会不错,但不知为什么做出来的游戏却总不如他的广告好。

腾图——跟前导一样属于老字号,《水浒传之火之魂》算是一部不可多得的佳作,可惜不久之后就退出了游戏制作行业。其手下的工作室倒是历经艰难地生存下来,这段时间八爪鱼工作室又推出了一款名为《杀气冲天》的角色扮演游戏。

创意鹰翔——一部《生死之间》便名声大振,工作态度精细是这家游戏工作室给我们的良好印象,正因为这样,其《生死之间Ⅱ》才会取得比较大的成功。

目标软件——国产游戏制作的新兴力量,作品不多,但凭借一部《铁甲风暴》给了国内玩家不错的印象,他们的制作实力在国内的制作组中是数一数二的。不过产品单一是这类公司的致命弱点。

洪恩软件——金洪恩是国内的知名教育软件制作者,今年借着一部《自由与荣耀》突然出现在国产游戏制作者的行列中,听说这个游戏在国内各地的游戏室中还为不少玩家所喜爱。虽然洪恩是制作教育软件的高手,但在游戏制作方面是否能这样春风得意还是一个未知数,必竟还没有哪个游戏制作公司能过得喜笑颜开的。

金智塔——深圳的新兴游戏开发公司,一部《江湖》引得国内玩家“哭”声一片;一部《江湖后传》引得网上一片争议。《人在江湖》到是开创了国内图形MUD的先河。 1.4.3 发展期

但不论怎么说,好也罢、坏也罢,在国产游戏刚刚起步阶段,我们已经看到了一个众鸟高飞的喜人景象。只不过国内的游戏玩家们多年来已经见惯了华美的欧美游戏,随着审美观念的变化和审美趣味的提高,他们对一部游戏的评价标准也越来越高。因此,很多玩家已经不能容忍电脑游戏创作方面的平淡无奇、波澜不兴,这对国产游戏本身也是一种无形的压力。综观国内电脑游戏创作近几年的积累过程,可以说每一个开发商和制作者都在以清醒的头脑冷静地分析着游戏中所蕴含的思想,分析着游戏中可表现的艺术,分析着游戏能够挖掘和开启的潜在市场,分析着电脑游戏可能为我们送来的文化气息。既分析着眼前的困难,也分析灿烂的前景。但尽管如此,作为期待国产游戏能够“站起来”的玩家看到的仍然是很多作品“说的比唱的好听”,“做的比说的难看”的窘境。还是那个老问题:精品意识才能出精品作品。电脑游戏制作能否出精品的关键首先是有一个好“本子”,这一方面需要游戏策划者具有非凡的才华,同时也汇聚了众多参与者的远见卓识。

资源的优化配置也是使游戏作品成为精品的重要环节。在制作公司条件许可的

8

中原工学院信息商务学院毕业设计(论文)

情况下,投入最理想的人力和物力,造就对极致追求的优势。从某种意义上讲,硬件环境是成就一部优秀作品的重要条件,而目前国产游戏在这方面差距还比较大,很多工作组起步时的“工作站”还只是PⅡ/PⅢ级的。只因美工、音乐等方面的刻意求新而形成了魅力,这在每一部电脑游戏作品中俯拾皆是。但这些也并非是绝对的,难道“俄罗斯方块”的制作技术含量会比我们现在动不动就3DMAX的D3D GAME还高吗?

有人说电脑游戏是一门新的艺术,也有人干脆把其纳入“第九艺术”。艺术与否,其实最关键的就是要找到自己正确的内容、题材和美学的定位,这是国内电脑游戏业界一项长期而艰巨的任务,我们既然已经承认电脑游戏是一种文化,那么它就应该遵循文化的规律进行主体的开发与思考。电脑游戏就是游戏,就像电影始终是电影,不论怎么变化,加入多少的技术含量也不会做成游戏一样,这是一个质的区别,也只有像这样各具其味的游戏和电影才不会引起玩家眼睛和心灵的反感。我们无法奢求国内的游戏公司、游戏制作人能在一两年中具备如EA、UBI等欧美超级游戏公司的实力,况且即使是这样实力规模的公司也保不准哪天就会被比它更大的家伙收购,但至少有一种精神还是要体现的。这种精神小弟以为就是“敬业”。电脑游戏的开发与制作其实也是一项比较复杂的系统工程,做游戏的过程也绝非玩游戏那样简单,游戏制作本身是一项充满灵性与艰涩的事,既然是一个艰苦的过程,就必须勤勉,容不得半点懈怠。如果年轻的游戏开发者不幸染上中国男足的传染病,恐怕中国的游戏业也只能自己在家门口吆喝吆喝了。商业游戏自然有其自身的游戏规则,盗版固然会毁去国内游戏一部分市场,但国外游戏在国内不也是面临同样的压力吗?特别是对于盗版问题,短期内可能我们无法依赖法律和政府在这方面予以全面保护的时候,自助与他助同样的重要。

电脑游戏是一种新兴的文化现象,也是一个新型的朝阳产业。作为这个文化类别的后来者,我们与发达国家、发达地区相比,无论是理论、开发、研究还是投入等方面都仍有一段不算小的距离,但当务之急需要解决的也许还不仅仅是上述问题,游戏开发者们对所从事的这项工作的敬业态度与自省、自重可能比玩家口袋里的银子还要可贵得多。

网络游戏:与单机游戏日渐衰落正相反的是,网络游戏方兴未艾,遍地开花.国内网络游戏开发,制作商也有非常成功的。比如:腾讯、九城、盛大、网易、金山、久游等。

但是,与此同时,,我们也看到了,在繁荣的背后潜在的危机。一是来自国内游戏制作者在游戏制作理念上的不足和困乏;另外就是资金问题.这两方面与欧美游戏

9

康小武:游戏(坦克大战)软件的开发

制作差距很大。

随着九城对网络游戏《魔兽世界》的成功代理,接踵而来的是更多高品质、高水准、高制作的国外网络游戏进入中国。像“九城”代理的《奇迹世界》、《卓越之剑》、《公会战争》三款大作都是目前在欧美的顶级作品,这无疑对国产网络游戏带来很大的竞争压力。还有腾讯代理的《地下城与勇士》简称DNF,是目前格斗类游戏最好的2D游戏,凭借其超爽的打斗画面,和华丽的连招,使得该款游戏拥有220万玩家同时在线的不菲成绩。如果国内游戏制作商还停留在纷纷推出所谓的“免费” 游戏而实际上是在变相收费的运营层面上,无疑是作茧自缚,自己在毁掉已取得的成绩。

10

中原工学院信息商务学院毕业设计(论文)

第2章 游戏设计原理及技术

随着游戏的火热,游戏已经逐渐形成了一个市场。当然,市场就会有竞争,有成功者,当然也有失败者,成功有他成功的原因,失败当然也有他的原因。如果我们在游戏设计阶段,能够很好的把握住各个细节,使得开发出来的游戏有吸引力,能够让游戏去吸引玩家,那么,我们开发出来的游戏就会占有市场,就能在竞争中获得胜利。如何去开发出一个成功的游戏呢?什么样的游戏能够成功呢?等等??接下来介绍下游戏设计的一些原理、技术以及一些注意事项。

2.1 游戏类型

现在,游戏类型多如政治许诺(有些已经销声匿迹了),但可以将它们归入以下几个类型:

类似DOOM的第一视角类——这些游戏大部分是全3D 游戏, 玩家以游戏角色的视角进行观察。

DOOM、Hexen、Quake、Unreal、Duke Nukem 3D 以及Dark Forces 都是此类游戏中的佼佼者。从技术上讲,它们或许是最难开发的游戏,而且需要用到极好的技术才能在此类游戏中出类拔萃。

运动类——运动类游戏可以是 2D 的,也可以是 3D 的,但是近来3D 的运动游戏越来越多了。

通常运动类游戏可以一个人玩,也可以多人组队一起玩。运动类游戏的图像质量比起早先已经有了很大的改进。虽然运动类游戏也许不像采用第一视角类游戏那样使人印象深刻,但是它们正在迎头赶上。运动类游戏中的人工智能水平位于所有游戏类型中最先进之列。

格斗类——格斗类游戏通常可以一人或两人玩,用侧视角度或通过一个不固定的3D 摄像机观看角色的动作。游戏人物的肖像一般为 2D、2.5D(3D模型渲染而成的系列 2D位图图像)或全3D 的。运行于索尼 PlayStation I(PSX)游戏机上的Tekken(铁拳)将格斗类游戏在家庭游戏机市场上发扬光大。格斗类游戏在PC机上不是十分流行,这或许要归咎于游戏控制器的界面问题以及需要两人玩才更有乐趣。

街机/枪战/横版过关类——此类游戏就是类似于Asteroids、Pac-Man(吃豆)和Jazz

Jackrabbit的游戏。它们基本上都是2D 的老式游戏,但正在逐渐地被重新制作

11

康小武:游戏(坦克大战)软件的开发

成3D 游戏。3D 版本的游戏规则和2D版本大致相同。

机械模拟类——此类游戏包含各种驾驶、飞行、赛艇、赛车、坦克战斗模拟以及读者能够想像到的任何其他种类。绝大多数此类游戏一直是3D 的(虽然直到最近游戏的画面表现才算差强人意)。

生态模拟类——这个游戏类型相当新,除了现实世界本身外,再没有其他类似物了。我说的正是Populous(上帝也疯狂)、SimCity(模拟城市)、SimAnt(模拟蚂蚁)等系列游戏。此类游戏允许玩家扮演主宰各个物种的神,或是控制某种人工系统,无论是一个城市、一群蚂蚁、或是像Gazzillonaire(一个很酷的游戏)那样模拟财政金融。

战略或战争类——此类游戏已经被分为许多子类。可是我并不盲目同意那些分类方法,所以我将具有战略元素(有时是回合制的)的划入此类,如Warcraft(魔兽争霸)、Diablo(暗黑破坏神)、Final Fantasy VII(最终幻想7)等皆属此类。这里我可能有点偏颇,可是因为Diablo虽是即时游戏,它仍然含有大量的策略因素和思考。与Diablo 相对照,Final Fantasy 是回合制的而不是即时的。

交互式故事类——这一类别包括类似Myst(神秘岛)的游戏。基本上,这些游戏的图像都是预先渲染的,或按照“路径”设计的,通过不断地解决谜题来进行游戏。通常,因为缺少更好的定义,这些游戏不允许玩家自由地闲逛,只能和玩互动图书一样。最后,它们并不像通常意义上的游戏程序,因为它们99%都是用Director 或类似Director的工具编写的。我想要是儒勒·凡尔纳一定会批评说这太没劲了。

怀旧经典类——这类游戏总是似乎在一夜之间又冒了出来。无论何时,总是有人又想玩一玩老游戏,但希望游戏中的情节和难度较早先复杂。例如,Atari 制作了大约1000 个Tempest 的版本。我得承认它们的销售情况并不是特别好,但你一定能明白其中的道理。我很幸运地对其中一些诸如 Dig Dug(淘金者)、Centipede(贪食蛇)、Frogger(青蛙人)等老游戏进行了重新制作。

纯智力谜题和棋牌类——不需要太多的介绍。此类游戏是2D、3D的或预先渲染的等等。俄罗斯方块(Tetris)、强手棋(又名大富翁,Monopoly)和麻将(Mahjong)是归于此类的众多游戏中的沧海一粟。

2.2 游戏开发的各个阶段

随着开发阶段的不同,对游戏架构的需求也会有所不同。

12

中原工学院信息商务学院毕业设计(论文)

2.2.1 早期阶段

在早期阶段(概念、原型、可玩性阶段),架构的主要焦点将集中在如何让程序先跑起来上面。在这些阶段,与创建概念性的示不对比,架构有可能看起来不那么至要。然而,如果架构的设讨没有为以后阶段的游戏开发发着想的话,以后你就会发现自己已经没有时间来做游戏的重构了。 2.2.2 生产阶段

在生产阶段,查看器和编辑器—类的工具将很有用。查看器可以用米让开发人员看到自己的内容在游戏小会是什么样子的。编辑器可以使得开发人员能对游戏的各个方面进行调整。虽然此类的工具可以和游戏应用本身分离开来,但是一般会要求把查看器和编辑器的功能集成到游戏中。要做到这一点,我们必须同时为顾客和开发人员编码。其目标是要创建如此的一个架构,它能增加共享组件的特性,也能把它们的开发相对独立出来。 2.2.3 生成包装阶段

在产品包装阶段,我们必须把所有的游戏模式和显示集成为一个无缝的产品。这个集成过程有时候会为日程延迟或者原设计方案的修改所累。如果有一个架构能管理这些游戏模式和显示,其至管理它们之间的转化的话,那它就会让这个过程进行得更加顺利。 2.2.4 测试阶段

在测试阶段,我们可能需要能在不同的模式或某些点进入游戏。如此就需要我们的架构拥有此类的灵活性,能把设置这些模式和进入点的工作变得容易起来。我们也有可能需要在游戏中能切换不同的驱动。如果我们的架构把游戏和某种固定的视频技术绑定了,那么切换视频驱动就不可能了。不管我们是否需要提供驱动切换的功能,我们至少要在架构中间加入日志功能以协助兼容性测试。 2.2.5 发布阶段

当我们到达发布阶段以后,游戏开发小组可能还要继续进行游戏的移植,或者会有其他的开发人员来做移植工作。不管如何,如果我们的架构移植到其他平台很困难的话,这就会造成延迟。我们希望移植小组的时间是花在为每个平台开发新特性和特性增强上面,而不是花在研究如何让它跑起来的问题上面。

13

康小武:游戏(坦克大战)软件的开发

2.3 游戏一般循环过程

游戏虽然有很多种类,但是游戏一般都遵循一个循环过程。接下来简要介绍下 第一步:初始化

在这一步中,游戏程序执行标准初始化操作,如内存分配、资源采集、从磁盘载入数据等等。

第二步:进入游戏循环

在这一步中,代码运行到游戏主循环体内部。此时各种操作开始运行,运行持续到用户退出主循环为止。

第三步:获得玩家的输入信息

在这一步里,游戏玩家的输入信息被处理和/或缓存,以备下一步人工智能和游戏逻辑使用。

第四步:执行人工智能和游戏逻辑

这一部分包括游戏代码的主体部分,诸如执行人工智能、物理系统和一般游戏逻辑,其结果用于渲染下一帧图像。

第五步:渲染下一帧图像

在这一步中,玩家的输入和第四步中游戏人工智能和游戏逻辑执行的结果,被用来产生游戏的下一帧动画。这个图像通常放在不可见的缓存区(offscreen buffer area)内,因此玩家不会看到它逐渐被渲染的过程。随后该图像被迅速拷贝到显示存储器中并显示出来。

第六步:同步显示

通常由于游戏复杂程度的不同,游戏在计算机上运行的速度会时快时慢。比如,如果屏幕上有1000 个物体在动作,CPU 的负载就比只有10 个对象时重得多。从而游戏的画面刷新率(帧速率,frame rate)也会时高时低,而这是难以接受的。因此必须把游戏按照某个最大帧速率进行同步,并使用定时功能和/或等待函数来维持同步。一般来讲能达到 30 帧/秒的帧速率就非常好了。

第七步:循环

这一步非常简单,只需返回到游戏循环的入口并重新执行上述全部步骤。 第八步:关闭

这一步是游戏的结束,表示将退出主程序或游戏循环,并回到操作系统。然而,在用户进行结束之前,用户必须释放所有的资源并清理系统,这些释放操作对任何其他软件也是同样要做的。

14

中原工学院信息商务学院毕业设计(论文)

2.4 游戏一般架构

我们将讨论平台相关性、游戏相关立性、对象组合、继承、基于帧的编码、基于函数的编码、操作顺序、对象生命期,还有任务的集成。 2.4.1 平台独立性与平台相关性

游戏经常会使用很多独立于操作系统和平台技术的概念。这些概念决定了玩家在游戏中和更深刻的愉悦感。从另一个方面来说,游戏一般也会他用特定购硬件特性来增强游戏的表现力。这种表现力会使游戏拥有—种令人沉浸于其中的感觉。

架构是不应该依赖于操作系统和其技术的。我们可以为架构设计一套独立于平台的系统接口,而不是依赖于平台丁的系统接口,虽然接口本身是平台独立的,但是找们可以使用系统来创建特定平台的具体实现。

我们游戏中概念性的工作和平台相关的东西距离越远,也就越容易在转化的时候把平台相关的代码给替换掉。因此,我们创建一个游戏架构的部分目标就是要在任何可能的时候把下面的事情变得更容易一点,那就是要把游戏的高层次概念在操作系统还有平台技术给独立开来。 2.4.2 游戏独立性和游戏相关性

我们如果想让架构在多个游戏里面都能使用,那就需要让架构拥有游戏独立性。然而,如果我们只是要在一个游戏的几个平台上面使用架构的话,那也可以让部分架构和游戏的一些相关性。

举个例子,如果游戏控制了一个特定类型的角色,根据角色状态的不同,它将表现出很多动态的视觉效果,我们渲染的代码可能需要访问游戏的相关状态,然后决定此角色是否需要渲染。这种做法可以减少系统接口的调用,从而简化代码并使速度提高。

2.4.3 对象组合与对象继承

要想使架构结构晾好,方法之一就是使用模板方法这个设计模式,然后只创建一个应用类来派生类实例。如果这样做,我们就是要把类的初始化和销毁代码设计成其派生类可以重载的算法。这种设计模式被成为居于类的,因此它使用了类继承的方法来得到不同的行为。

另外一个设计应用程序初始化和销毁步骤的方法是将其步骤分成一系列任务来处理。一个任务系统类可以用来调整任务的执行,一个资源系统类可以用来定位

15

康小武:游戏(坦克大战)软件的开发

和管理任务列表和任务对象。现在我们使用是基于对象的模式,因此我们使用了对象组合的方法,而其中我们的资源系统则成了这些对象的中介者。

使用这样的任务系统意味着我们可以使用对象组合而不是集成的方法来创建一个架构。我们的任务系统通过任务的接口控制任务对象,而我们的任务则通过调用对象接口来工作。这同时也以为着我们的架构不会有一个倒置的控制结构,而这往往是使用模板方法所固有的特性。取而代之的是我们的任务对象会来控制软件。或许这个架构可说成是一个对象架构,而不是一个类架构,但是毫无疑问他是一个架构。

《设计模式》这本书上讨论了很多对象组合的有点,也着重提出了面向对象设计的两个原则:

1. 对于接口编程,而不是对实现编程。 2. 尽量采用对象组合而不是集成。 2.4.4 基于帧的和基于函数的设计

有很多类型的软件对于帧定时不关心,在这些软件中函数可能要花费数秒,数分钟或者更长的时间才能完成。这种基于函数的操作比基于帧的操作更容易编程实现。

绝大多数游戏都必须有音频和视频方面的相应,还有在每帧里面计算许多动画和细节。没当一幅视频图像以及一段音频缓冲渲染的时候,我们也就创建了一帧。游戏可能以美妙50帧或者60帧的速度进行渲染。这种基于帧的操作要求游戏分在很小的时间片断上面执行。如果要进行一个耗时操作(超过了1/60S),它就必须被分成很小的片断或者是作为一个后台任务来运行。

对于我们的架构来说,基于帧的操作需要一个帧系统类,这个类可以通知我们的任务系统类什么时候应该调用与帧同步的任务。我们的任务系统也要能处理非帧同步的任务,这些任务我们称之为“异步任务”。

由于帧系统控制了什么时候应该调用帧同步的任务,我们也可以提供手动播放每帧和选择特定帧率的功能了。这既可以帮助检查动画播放效果的细节,也对其他的调试和测试有用。 2.4.5 动态和静态操作顺序

有很多类型的软件操作需要以一种特定的顺序执行。对于这些操作,我们必须以预定的顺序来调用函数,或者使用预定的顺序把任务提交到我们的任务系统里面

16

中原工学院信息商务学院毕业设计(论文)

去。这是一个静态顺序的例子。

游戏总是由于一组相互关联的显示和它们之间的转移组成的,它们之间一般没有预定的顺序,取而代之的是由玩家来决定下一步将会发生什么。这就是一个动态操作的例子。我们让任务对象能访问任务系统和提交新任务,这样我们的架构就提供了一个动态操作的顺序。

2.4.6 动态和静态对象生命期(以及所有权)

在一个层次化的系统里面,我们可能会发现父类会拥有一些为其派生类所使用的对象,而派生类也会创建一些其父类一无所知的对象。通常这些对象的生命周期是出层次化的结构内定的,而且继承的子类也无法动态地创建和删除它们。在这种意义上,这些对象的生命期就是静态的。

在一个基于对象组合的架构里面,想要知道什么时候一个对象拥有另一个对象就比较乱了。为了解决这个问题,我们可以将对象所有权的管理责任分给资源系统来做。如此一来,每个任务都可以随时按需连接系统资源而不必承担管理的责任了。我们把对象所有权的管理责任交给资源系统,把对象访问的责仟交给对象,这样就可以避免所有权方面的混淆。

我们可以在资源系统里面增加任务命令来使得这些对象的生命期动态化。我们可以要求资源系统以集合的万式取出和存入一批对象。例如,需要载入对象的任务开始之前,我们可以发出一个取出集合的命令?在这些任务结束了以后,我们可以再发出一个存入集合的命令。另外一个方法就是我们在应用程序的整个生命期都持有对象以时刻备用。

2.4.7 任务的水平集成和垂直集成

在一个层次化的系统中间,有可能看上去总有某些对象在控制着我们,而且我们与其他对象的关系是固定不变的,感觉任务就像是不直组织起来的,任何系统向高层的改变都会对系统底层的部分带来深远的影响。

在一个对象组合的系统里面,我们的程序结构看上去比较地扁平,而且我们与其他对象的关系也更加动态化,感觉任务更像足是水平式组织的,村于系统里某些对象的改变对于其他的系统里面的对象影响很小或者根本没有。

17

康小武:游戏(坦克大战)软件的开发

2.5 游戏设计中应该注意的问题

2.5.1 深度vs宽度

你一次提供给玩家的选项越多,你就会冒更大的风险,因为它可能会吓走害怕复杂界面的玩家。一个同时提供很多数目选项的用户界面称为一个宽阔的界面。如果你一次只提供几个选项,并且要求玩家依次做出多次选择来得到他想要的选项,这样的用户界面称为深长。

宽阔的界面允许玩家搜索整个界面来寻找他所需要的,但是在那样宽阔的排列中找到感兴趣的选项会花费一定的时间。一旦玩家知道了在哪里找到这些按钮或则调整盘,他就可以再次快速地找到它们。那些在培训上花费了一定时间(有时候相当长)的玩家会发现使用宽阔的界面非常有效;他们可以快速的定位他们需要的命令。一个商业客机的驾驶舱就可以看做是一个非常宽阔的界面;对这样大量的排列在一起的设备,飞行员几乎可以立即把他的手放在他需要使用的按钮上,这也使得飞行更加安全。另一方面,飞行员需要培训很长时间来记住所有的按钮。

深长的界面通常通过一个分层的目录或者对话框串来提供它们所有的选择。用户可以快速的明白每一个目录提供的内容。他不能提前知道他需要使用什么样的目录序列来得到他想要的选项,所以目录的命名和组织应该非常一致,这样才能正确地引导他们。即使他学会了怎样找到一个特定的选项,他每次也必须依次通过这些目录来得到这个选项。另一方面,使用一个设计的非常好的深长的界面几乎不需要什么培训。

同时提供一个宽阔的界面和一个深长的界面是一个不错的主意;深长的让新玩家使用,宽阔的让有经验的玩家使用。在PC上你可以通过为经常使用的功能设置快捷键来实现这个功能。PC键盘上的按键数目之多,可以让你很容易的构建一个宽阔的界面。控制台游戏机,由于可用的控制器按钮比较少而且没有鼠标来指示屏幕元素,所以它提供的创建宽阔的界面的机会就比较少。

如果你只能提供一种界面,我们推荐你在你的界面的广度和深度上应该大致平等;但是如果可以的话,一定要避免通过多于三或者四级目录才能得到某个选项。当确定怎样组织目录的时候,根据访问的频率对它们进行分类。最经常使用的元素最多应该使玩家通过一步或者两步就可以获得。最不经常使用的元素就可以放在目录层次中的最下层了。

18

中原工学院信息商务学院毕业设计(论文)

2.5.2 立即存盘的取舍

最近很多游戏发布的时候缺少了一个至关重要的特性,与其他游戏特性的缺少相比,这个产生的用户抱怨是最多的。是什么东西会产生这么严重的印象呢?不是别的,就是游戏的任何地方都能存盘的特性。在任何需要的时候都能保存游戏,这已经成为了游戏玩家的一个共识:而一旦游戏缺乏了这个特性,大家都会牢骚很大,抱怨个不停。

然而,某些游戏是可以不需要这个功能的。如果你要求在其中的任何地方都能保存游戏的话,有些游戏就根本没有意义了。你能想象在泡泡龙(Buble Bobble)中随心所欲在任何时候保存游戏么?不幸的是,现在大部人游戏不能怪不是可以逃避此特性的幸运儿。

可能有人会说如果允许在任何地方保存游戏的话,游戏的难度就会大大降低,这样将影响或是严重损失一个游戏耐玩度。这个理由由于不实现此功能来说倒是说的过去。大多数游戏采用的取代方法只能允许在某些特定的地方才能存盘,此时很容易向导一些信息,简化了存盘的实现。不幸的是,这个方法一般都会对整个游戏产生很坏的影响。玩家会感到被骗了,而且经常会觉得这个特性是故意被省略掉的以让他们不停的玩一个20分钟的片断来增加游戏的时间。有个更好的方法,那就是允许游戏在任何地方存盘,但是在游戏中某些关键的地方则要去掉这个功能,例如在和关底BOSS打的时候。 2.5.3 立即存盘为何如此困难

要在游戏中的任何地方都能存盘是一个让人头疼的任务——对于外行来说好像很简单,但是一档你深入进去着手来做的时候,你就会发现它会设计到一些难题。在一个游戏中,即使采用了很高明的对象重用策略,内存也会被分成碎片,而对象列表也会被搞的乱七八糟。因此,在任何时刻几乎都不可能搞清楚是否在内存中的某个地方某个对象正在被创建。解决此问题的一个方法是把游戏中的所有指针都换成句柄,而他们则可以利用一个查找表找出相应的对象来。不过,如果你没有使用句柄的话,还有另一个方法,那就是在存盘的时候把所有的指针转化都转化为句柄,然后在载入的时候在把句柄转化为指针。值得注意的是,这种方法要求在存盘之前与载入之后做一些额外工作。

还有一个大问题就是判断每个对象应该保存些什么信息。一旦决定了以后,就需要对每个对象类型都编写一些函数来进行数据的读写。由于大多数游戏里都有很

19

康小武:游戏(坦克大战)软件的开发

多类型的对象,因此这可能会是一个繁重的工作。此外,一旦有了任何数据结构的变化,所有的存盘记录就都没用了,而且还要编写信的代码。这就是为什么存盘功能往往被延期处理直到项目收尾才做的原因。在最坏的情况下,存盘的代码将没有被正常测试或是由于要按期结束游戏开发的压力而被完全忽略掉了。 2.5.4 独立于文化的游戏设计

除了要保证界面是为了日标语言进行设计的之外,还要保证你的游戏不要在与文化相关的方面作任何不成立的假设。举个例子,如果你的游戏中的角色沿路的左边驾驶的话,美国玩家就会惊异地发现车辆居然从他们的右边迎面驶来,除非你能在开始就告诉他们这一点。还有,如果你在用户界面亡有个“呼叫”按钮使用了一个图标表示它的功能,那最好能使用一个相对通用的图标,而不要使用一个老式的转盘电话的图标或者是传统的英国电话手作图标。 2.5.5 游戏设计与文化和政治敏感问题

最后一个问题是文化和政治敏感件的问题。虽然很多游戏的场景是设置在一个虚幻或者科学幻想环境中的,但是游戏本身可是在真实世界里发行的,一不小心它就会违背文化传统或舌是政府标准。举个例子,如果你至开发一个有暴力主题的游戏的话,那就可能需要考虑把调子降低一点,或名是提供一个过滤的方法去掉可能的侵犯性的内容,这要视你针对的市场而定。

20

中原工学院信息商务学院毕业设计(论文)

第3章 坦克大战总体设计

3.1 总体设计

3.1.1 运行环境

硬件:内存512M以上,硬盘80G。 软件: windows XP/2000。 3.1.2 基本设计和处理流程

坦克大战游戏需要实现坦克的游戏过程,快门存取,声音控制,游戏速度设置,坦克速度设置,键盘设置等功能。 3.1.3 结构

坦克游戏程序总体框架如图3-1所示

坦克游戏游戏过程键盘设置坦克速度设置游戏声音设置游戏速度设置存储游戏游戏启动画面游戏开始暂停游戏障碍物过关或者结束敌人坦克移动坦克控制坦克发子弹坦克爆炸打分其他显示游戏保存游戏恢复

图3-1 总体框架

21

康小武:游戏(坦克大战)软件的开发

3.1.4 功能总述

游戏开始:进入游戏后,需要在右方点击一个图形按钮,方能开始游戏。 坦克控制:接下来你可以按键盘的上、下、左、右键来控制自己的坦克上、下、左、右移动。(当然你也可以点击键盘设置,来设置自己喜欢的键位)

坦克发子弹:按空格键可以发射子弹。(当然你也可以点击键盘设置,来设置自己喜欢的键位)

坦克爆炸:自己的子弹打到了敌方坦克会爆炸,敌方坦克子弹打中自己坦克也会爆炸。

坦克移动规则:如果到了边缘,碰到障碍,碰到对方的坦克,都不能继续往前移动,你可以改变方向来移动自己的坦克。

游戏障碍物:当你移动到障碍物时,坦克便不能够再继续往前行,有的可以打烂,有的不能。

敌人坦克:敌人会随机的上、下、左、右移动,以及发射子弹,敌人坦克移动也遵循坦克移动规则。

游戏声音:坦克的每次移动,发射子弹,坦克爆炸都会有相应的声音,声音让游戏变得更有乐趣。

游戏暂停与继续:当你有事的时候,需要暂停游戏,点击右边的暂停按钮,游戏便暂停了,再点击游戏继续。

生命数的显示:在右上方,你可以看到敌人还有多少坦克生命,自己还有多少生命数。

游戏打分:每打死一个敌人坦克,都会给一定的游戏分值。 声音控制:点击右方的声音控制按钮来实现游戏声音的开关。

游戏存取:当你有事或者遇到什么情况不能继续玩游戏你可以点击菜单项目的游戏进度里的保存保存当时的游戏状况,当你回来的时候可以点击恢复游戏继续玩。

游戏速度设置:点击游戏速度,来实现游戏速度的设定。 键盘设置:点击键盘设置,来设置你喜欢的控制键位。

下一关:当把全部敌人都消灭则进入下一关,或者直接点击右下方的下一关图形按钮。

游戏结束:当自己的生命数为0,或者强行关闭。

22

中原工学院信息商务学院毕业设计(论文)

3.2 接口设计

这个游戏没用到外部接口,但是一些内部接口还是要作下介绍。该程序分为游戏过程,和游戏辅助两个大的功能模块,其中辅助模块与游戏过程的接口有: 3.2.1 游戏存取问题

存取主要的接口就是把己方坦克拥有的属性,如坐标位置,方向,显示情况,等属性,存游戏的时候把这些属性保存起来,游戏恢复的时候把这些属性重新赋值给游戏过程。 3.2.2 声音控制问题

通过一个BOOL变量来控制游戏的声音,如果为真,让游戏播放声音,如果为假不让游戏播放声音。 3.2.3 键盘设置问题

主要是把控制坦克的四个方向键和子弹键,游戏暂停键设置下。 3.2.4 坦克速度设置问题

坦克一次移动多少用一个int变量表示,修改这个变量即可 3.2.5 总体游戏速度设置问题

通过修改计时器的时间参数,可以让游戏整体变快或者变慢。

3.3 界面设计

3.3.1 游戏界面

界面设计要求如图3-2所示。

23

康小武:游戏(坦克大战)软件的开发

图3-2 主要界面

24

中原工学院信息商务学院毕业设计(论文)

第4章 详细设计

4.1 程序系统结构

系统采用Visual C++6.0的标准EXE工程来进行开发,实现标准包括: 4.1.1 主程序

工程类型:MFC AppWizard(EXE)基于单文档程序 工程名称:Tank

编译生成文件:Tank.EXE

引用的组件:winmm.lib,Msimg32.lib 4.1.2 用户自定义控件

图形按钮:点击按钮可以开始游戏、暂停游戏。 4.1.3 系统的总体流程图

系统的总体流程图如图4-1所示

25

康小武:游戏(坦克大战)软件的开发

游戏开始显示启动画面进入游戏界面用户操作系统响应否生命数是否为0是游戏结束 图4-1 游戏(坦克大战)软件开发的总体流程图

4.2 功能实现

4.2.1 启动画面

添加启动画面:游戏开始的时候有一个启动画面,主要给用户提供一个友好界面,一个好的启动界面,可以让用户对坦克游戏有一个比较好的印象;同时也给用户一个缓冲的时间,不会一下就进入游戏。画面如图4-2所以。

26

中原工学院信息商务学院毕业设计(论文)

图4-2 启动画面

主要设计思路如下: 1. 插入组件

先插入Splash screen:点工程-添加到工程-Components and Controls Gallery-选Visual C++ Components选Splash screen点Insert然后默认确定、确定??

2. 修改位图

插入自己的位图:在Resources Files中的Bitmap,引入,选择一个你准备好的位图,确定,把位图ID改成IDB_SPLASH1。

3. 修改ID 修改

ID:在

CSplashWnd

类里面的

Create()函数

m_bitmap.LoadBitmap(IDB_SPLASH)中的IDB_SPLASH换成IDB_SPLASH1。

4. 修改图片显示方式

修改图片显示大小:先在Create( )函数里改CreateEx()中的第7、8参数的数值,然后在onPaint( )函数里用StretchBlt()函数来修改显示图片大小。

为了显示出动画的效果在onpaint()用循环,加入个API函数Sleep( ),并且改StretchBlt()里参数的大小,这样就会有动画的效果啦。 4.2.2 计时器

添加计时器:这个游戏用计时器来实现坦克、子弹、爆炸显示等情况,计时器可以很精确的显示任何一点小小的改变,便于控制,使游戏变得更流畅,玩起来感觉更好。主要设计思路如下:

1. 计时器

当使用SetTimer函数的时候,就会生成一个计时器。函数中nIDEvent指的是

27

康小武:游戏(坦克大战)软件的开发

计时器的标识,也就是名字。nElapse指的是时间间隔,也就是每隔多长时间触发一次事件。第三个参数是一个回调函数,在这个函数里,放入你想要做的事情的代码,你可以将它设定为NULL。KillTimer函数是清除一个计时器。计时器属于系统资源,使用完应及时销毁。

比如:SetTimer(1,1000,NULL);//1秒触发一次定时器 KillTimer(1); //把上面定义的计时器销毁 2.计时器添加方法

在ClassWizard里,选择需要计时器的类,添加WM_TIMER消息映射,就自动生成onTime函数了。然后在函数里添加代码,让代码实现功能。每隔一段时间就会自动执行一次。

3.在程序里实现

为CTankView 类添加消息相应函数OnTimer()点击查看-建立类向导,选择Message Maps选项卡,在ClassName框里选CTankView,然后在Messages:里选WM_ONTIMER。点击“Add Function”,再点“Edit Code”。那么你就可以在OnTimer()函数里写代码了。 4.2.3 键盘消息

添加键盘响应函数:这个游戏的控制主要是通过键盘为主,鼠标点击为辅助。主要设计思路如下:

1. 键盘消息

当用户敲击键盘上的键时,会向应用程序发送消息,从而在键盘消息响应函数中完成用户要求的工作。Windows规定,键盘消息总是传送给带有输入焦点的窗口,因为这个窗口代表的是正在活动的应用程序。

WM_KEYDOWN是任意键(包括字符键)被按下时都产生该消息。如果被按下的是字符键,在产生WM_KEYDOWN消息的同时还产生字符消息

2. MFC中WM_KEYDOWN消息

MFC中定义了WM_KEYDOWN的消息响应函数是:

Void OnKeyDown(UINT nChar,UINT nPepCnt,UINT nFlags);参数nChar传递按键的字符。如果被按的是字符键,则该参数是字符对应的ASCII码,否则是键对应的虚拟键码;参数nRepCnt传递的是按键的重复次数;而参数nFlags传递的是按键的一些位信息,它是一个32位的数。

3. 添加消息响应函数

28

中原工学院信息商务学院毕业设计(论文)

在CTankView 类添加消息相应函数OnKeyDown()方法是点查看-建立类向导,选中Message Maps选项卡,在ClassName框里选CTankView,然后在Messages里选WM_ONKEYDOWN。点击“Add Function”,再点“Edit Code”。那么你就可以在OnKeyDown()函数里添加代码了。 4.2.4 鼠标消息

添加鼠标响应函数:通过鼠标对游戏进行一些辅助性的操作。 功能设计思路: 1. 鼠标消息

当用户移动鼠标或者按动鼠标的按钮时都会产生事件,并且系统都会在捕获这些时间后向应用程序发送相应的消息,如果应用程序中存在着这个消息的响应函数,程序则会调用这个函数完成相应的任务,否则就把这个消息交割系统进行默认处理。鼠标消息分为客户区和非客户区消息,本程序用到的是客户区鼠标消息WM_LBUTTONDOWN,按下鼠标左键。

2. MFC中的WM_ONLBUTTONDOWN消息 MFC中鼠标左键按下的消息响应函数的原型为:

Afx_msg void OnLButtonDown(UINT nFlags,CPoint point);其中point是产生鼠标消息时光标在窗口客户区的位置,nFlags参数可以使用的掩码有:MK_CONTROL,MK_SHIFT,MK_RBUTTON等,其中MK_CONTROL,表示鼠标按下的同时,Ctrl也可同时按下。

3. 添加鼠标响应消息

为程序添加鼠标响应消息:为CtankView类添加鼠标左键相应函数OnLButtonDown()方法是点查看-建立类向导,选中Message Maps选项卡,在ClassName框里选CTankView,然后在Messages里选WM_ONLBUTTONDOWN。点击“Add Function”,再点“Edit Code”接下来就可以添加代码。 4.2.5 游戏开始暂停

开始游戏:启动画面过后,进入了游戏的界面,此时游戏是停止的,需要用户点击开始图形按钮,或者按开始/暂停键(默认F1)让游戏开始运行。设置游戏开始/暂停开关是为了让用户更好的操作游戏,方便用户。开始界面如图4-3所示。

29

康小武:游戏(坦克大战)软件的开发

图4-3 开始界面

功能设计思路: 1. 定义变量

定义一个BOOL变量,来记录游戏的开始/暂停,另外定义一个UINT类型变量,来记录按键

2. 添加消息响应函数

在CTankView 类添加消息相应函数OnKeyDown()方法是点查看-建立类向导,选中Message Maps选项卡,在ClassName框里选CTankView,然后在Messages里选WM_ONKEYDOWN。点击“Add Function”,再点“Edit Code”。那么你就可以在OnKeyDown()函数里添加代码了。

3. 在OnKeyDown中加代码

30

本文来源:https://www.bwwdw.com/article/24n.html

Top