第1章
引言
本章介绍开发Win32程序前的准备工作,包括了解游戏产业、Windows产品,知道如何直接从Microsoft获取帮助,如何写风格固定的、规范的代码等内容。
1.1 电子游戏产业
电子游戏产业(又称为互动娱乐产业)是涉及电子游戏的开发、市场营销和销售的经济领域。它包含几十种职业,目前雇用着世界各地成千上万的人。
在1970年代中期,有些人尚且对电子游戏产业由利基市场成长为主流感到好奇;而到了2007年,美国的电子游戏产业收入约为95亿美元。2009年,文化部发布的《2009年中国网络游戏市场白皮书》指出,中国网络游戏产业的市场规模已达258亿元,同比增长39.5%;其国产网络游戏市场份额达到157.8亿元,占市场规模的61.2%;拥有自主知识产权的产品份额显著扩大,有80款国产网游上线运营;海外出口收入达到1.06亿美元。网游(网络游戏)自主研发最直接的反应有4个方面:一是国内市场份额国产游戏比例逐年增加;二是国产游戏海外收入增长;三是国内拥有知识产权产品上线不断;四是国外游戏公司海外收购、投资等。这几个方面都体现出我国游戏研发的快速发展,同时也体现出中国游戏产品市场快速增长。
《2010年中国游戏产业调查报告》显示:2010年,中国网络游戏市场实际销售收入为323.7亿元,比2009年增长了26.3%,带动电信、IT、媒体广告等相关产业产值达631.2亿元。该报告显示:2010年,中国网络游戏用户数达到7598.3万人,比2009年增长了15.3%,其中付费网络游戏用户数达到4300.6万人,比2009年增加了15.8%;2010年,中国自主研发的民族网络游戏产品总数超过356款,相比2009年增长35款,市场实际销售收入为193亿元,占我国网络游戏市场实际销售收入的59.6%,网络游戏自主研发人员数量达到30533人,较2009年增长9.44%;2010年,中国手机网络游戏市场运营收入达9.1亿元人民币,比2009年增长了42%;2010年共有34家中国企业自主研发的82款网络游戏作品进入海外40多个国家和地区,实现销售收入2.3亿美元,比2009年增长了111%。
目前,我国网络游戏企业已经有12家在海内外成功上市,在我国互联网经济的上市企业中比例最高。按照最保守的每年增长10%的估算,到“十二五”末,我国网络游戏市场实际销售年收入毫无疑问突破500亿元大关,继续引领我国互联网出版产业的发展。
截至2008年10月,中国网络游戏研发从业人员达到24768人,比2007年增长了17.8%。2008年,网络游戏开发人员达到14599人,比2007年增长了22.6%;非开发人员达到10169人,比2007年增长了11.4%。大型网络游戏企业研发人员扩张迅速。2008年,中国大型网络游戏研发企业在人员规模上迅速扩张,甚至有多家公司人员的数量近乎倍增,这其中尤其以北京最为显著。从整体上说,整个行业仍然存在巨大的人才缺口,有数据显示,在未来3~5年内,我国游戏人才缺口高达60万名。
1.1.1 概述
现代个人电脑的许多进步和创新都归功于游戏产业,如声卡、显示卡(显卡)、CD-ROM和DVD-ROM驱动器等,CPU和操作系统也有一些较为显著的改善。
声卡起初是为游戏添加数字音频而开发的,后来才用于音乐和高保真。早期显卡的开发是为了显示更多的色彩,后来则用于图形用户界面(GUI)和游戏。图形用户界面促进了高分辨率的需求,游戏则促成了3D加速的诞生。显卡还是唯一允许多个连接的硬件(如SLI或者CrossFire的显卡)。CD-ROM和DVD-ROM的开发一般用于媒体的大容量存储,而廉价的大容量媒体信息存储能力催生了更高的读/写速度。
现代游戏对PC资源的应用最为苛刻。许多玩家购买高性能的个人计算机的目的是用最快速的设备来玩最新、最先进的游戏。因此,CPU持续飞速发展的部分原因是,游戏产业比商业或其他个人应用需要更快速的处理器。
1.1.2 游戏产业价值链
Digitalmill的Ben Sawyer指出,游戏产业价值链由如下6个独特的层连接而成。
(1)资本和出版层:参与新项目开发的支付,并通过销售项目的许可证寻求回报。
(2)产品和人才层:包括开发者、设计师和美工,可能是个人根据合同工作的,也可能是内部开发团队的一部分。
(3)生产和工具层:生成内容的制作工具、游戏开发的中间层、可定制的游戏引擎和生产管理工具。
(4)发行层:涉及生成和销售游戏,包括零售和在线销售。
(5)硬件(或虚拟机、软件平台)层:基本平台的供应商,可以是以游戏机为基础的,可通过网络媒体访问,或通过移动设备,例如苹果的iPhone。这一层现在还包括非硬件平台,如虚拟机(如Java或Flash),或软件平台,比如浏览器,甚至是Facebook等。
(6)终端用户层:用户/游戏的玩家。
游戏产业往往雇用一些在其他传统行业的资深人士,但是也越来越多地雇用在游戏产业有专业经验的人。例如,许多招聘者的目标仅限于游戏产业的专业人士。游戏产业的一些具体岗位包括游戏程序员、游戏设计师、关卡设计员、游戏制作人、游戏美工师和游戏测试员。这些专业人员中的大多数人受雇于游戏开发者或游戏发行商。然而,许多爱好者也制作同人游戏并盈利出售。
1.1.3 电子游戏的历史
1.前身
1958年10月18日,核科学家William Higinbotham制作了《双人网球》。尽管1982年的《创意计算》杂志称其为第一个游戏,但它并不是一个真正意义上的电子游戏,而只是一个电力试验,所以也从来没有商业发行过。游戏采用实际屏幕来表现比赛。然而,虽说双人网球是最为知名的电子游戏前身,但一般认为,由Thomas T. Goldsmith Jr.和Estle R. Mann于1948年创建的“阴极射线管游乐设备”才是已知的游戏鼻祖。
此外,还有两个值得注意的前身。在1951年,费伦蒂国际一个研究小组建成了“尼姆罗德”计算机,并在当年英国科学展览艺术节首次公开展览。这个计算机是专门为一个世纪老游戏《尼姆》设计的,使用灯光表示位置。次年,剑桥大学的A.S. Douglas制作了《OXO》(也叫“圈圈叉叉”,Noughts and Crosses)。设计它的目的是研究人类和计算机之间的互动。《尼姆》和《OXO》的设计目的都不是娱乐。
2.20世纪70年代
到1970年代末期,当个人计算机刚刚开始得到广泛普及时,计算机游戏产业形成一种爱好文化。该产业伴随着计算机技术的提高而增长,并经常推动其提高。
3.20世纪80年代
在1980年代中期,由于生产太多(在数量和质量上)粗制滥造的游戏致使行业受到打击,导致北美产业的衰退和日本产业的兴盛,尤其是游戏公司任天堂。
4.20世纪90年代
20世纪90年代,游戏相关技术有所进步。显著的进步有:
- 广泛采用光盘存储和软件分发。
- 广泛采用的基于GUI的操作系统,如Microsoft Windows系列和Mac OS系列。
- 3D图形技术的提高,使得3D显卡被广泛采用,目前3D图形已“在事实上”成为电子游戏图像标准。
- 不断提高的CPU速度。
5.21世纪
今天,电子游戏产业已成为发展的主宰;利润仍然在驱使科技进步,然后使其应用于其他行业。虽然电子游戏产业正走向成熟,但它仍然复杂多变,并伴随第三方电子游戏开发商的迅速出现,以同样快的速度继续进一步壮大。
自1990年代中期以来,电子游戏产业的最新做法是,游戏玩家的崛起成为游戏内容的开发者。游戏玩家的崛起成为了游戏内容的第四方开发者,使得更多开放源代码模型的游戏设计开发和工程出现了。玩家创建用户修改的游戏(MOD),在某些情况下与原游戏一样流行,甚至比原游戏更受欢迎。这方面的一个例子是游戏《反恐精英》,它在最初是电子游戏《半条命》一个的MOD,并最终成为一个非常成功的发行游戏。虽然这种“修改者共享”可能只增加特定的游戏用户群的约1%,但数量的增加将提供更多的修改游戏的机会(例如发放源代码),并伴随国际玩家群体的上升而增加。据Ben Sawyer推测,到2012年将存在多达600000的在线游戏公共开发者。这将有效地为游戏产业价值链增加一个新的组成部分,并且如果继续走向成熟,它将融入整个行业。
早期的开发成本最低,电子游戏应该是相当有利可图的。每个游戏可由一个程序员开发,或由一个程序员和美工师组成的小团队开发,可以出售数10万份。这些游戏中的许多只花了几个月的时间制作,所以开发商每年可以发布几个题目。因此,发行商往往可以大有收益,如游戏销售的版税。许多早期的游戏发行商是从这个经济气候起步的,如Origin Systems、雪乐山、卡普空、美国动视和美国艺电。
随着计算和图形处理能力的增加,开发团队的规模也随之扩大,需要大量的工作人员来解决日益复杂的图形和编程。现在,即使是使用中间层和预先构建的游戏引擎,游戏预算也可以轻易达到数百万美元。最专业的游戏需要一至三年的开发,这进一步提高了预算的压力。
一些开发商正在转向新的制作和发行渠道,如在线销售,以降低成本。
今天,通过主要系统和游戏等的销售对电子游戏产业的经济产生了重大的影响,例如,《侠盗猎车手IV》上市第一周销售额超过了5亿美元。该游戏的收入超过了《蜘蛛侠3》的上市周末和原来的销量冠军《光环3》的总和。许多个人也受益于电子游戏经济上的成功,其中包括任天堂的前董事长、日本首富山内溥。
电子游戏产业目前面临着资金紧张,因为它既要继续盈利,又要给人才加薪。结果是,传统的新游戏来源——游戏开发商基本上是正在消亡或纳入大发行商。游戏产业目前正经历一个巩固的阶段和由成本升级带来的纵向一体化。这种气候也孕育了充满活力的独立游戏开发商组成的小公司,这些小公司尝试使用互联网,而不是传统的零售渠道与玩家沟通。
1.1.4 电子游戏产业的游戏分类
电子游戏的分类标准五花八门,新的游戏类型不断涌现。对于某一款游戏,很有可能它是若干种游戏类型的合成。根据电子游戏内容、游戏的目的,大致可以分为以下几种:
- RPG=Role-Playing Game:角色扮演游戏,由玩家扮演游戏中的一个或数个角色,有完整的故事情节的游戏。RPG游戏是最能引起玩家共鸣的游戏类型。
- MMORPG(Massively Multiplayer Online Role Playing Game):大型多人在线角色扮演游戏。
- ACT=Action Game:动作游戏,玩家控制游戏人物用各种方式消灭敌人或保存自己以过关的游戏,不刻意追求故事情节,ACT游戏讲究打击的爽快感和流畅的游戏感觉。在2D系统上来说,应该是在卷动(横向、纵向)的背景上,根据代表玩家的活动块与代表敌人的活动块以攻击判定和被攻击判定进行碰撞计算,加入各种视觉、听觉效果而成的游戏。
- AVG=Adventure Game:冒险游戏,由玩家控制游戏人物进行虚拟冒险的游戏。
- FPS=First Personal Shooting Game:第一人称视角射击游戏,第一人称视角射击游戏(First-Person Shooting)FPS游戏在诞生的时候,因3D技术的不成熟,无法展现出它的独特魅力,就是给予玩家极其强烈的真实感。可以这么说,FPS游戏是完全为表现3D技术而诞生的游戏类型。
- FGT=Fighting Game:格斗游戏,由玩家操纵各种角色与电脑或另一玩家所控制的角色进行格斗的游戏,游戏节奏很快,耐玩度非常高。此类游戏谈不上什么剧情,最多有个简单的场景设定或背景展示。场景布置、人物造型、操控方式等也比较单一,但操作难度较大,对技巧要求很高,主要依靠玩家迅速的判断和微操作取胜。2D FTG游戏的系统就是在固定背景画面下的活动块碰撞计算,是动作游戏的战斗部分的进一步升华。
- SPT=Sports Game:体育类游戏,在计算机上模拟各类竞技体育运动的游戏,花样繁多,模拟度高,广受欢迎。
- PZL=Puzzle Game:益智类游戏,Puzzle的原意是指以前用来培养儿童智力的拼图游戏,引申为各类有趣的益智游戏,PZL游戏多需要玩家对游戏规则进行思考判断。
- RAC=Racing Game:竞速游戏(也称为RCG),在计算机上模拟各类赛车运动的游戏,通常是在比赛场景下进行,非常讲究图像音效技术,往往是代表计算机游戏的尖端技术。惊险刺激,真实感强,深受车迷喜爱。
- RTS=Real-Time Strategy Game:即时战略游戏,本来属于策略游戏SLG的一个分支,但由于其在世界上的迅速风靡,使之慢慢发展成了一个单独的类型,知名度甚至超过了SLG。RTS游戏是战略游戏发展的最终形态。玩家在游戏中为了取得战争的胜利,必须不停地进行操作,因为“敌人”也在同时进行着类似的操作。就系统而言,因为CPU的指令执行不可能是同时的,而是序列的,为了给玩家造成“即时进行”的感觉,必须把游戏中各个势力的操作指令在极短的时间内交替执行。因为CPU的运算足够快,交替的时间间隔就非常小。
- STG=Shooting Game:射击类游戏,这里所说的射击类,是指纯粹的飞机射击,或者在敌方的枪林弹雨中生存下来,一般由玩家控制各种飞行物(主要是飞机)完成任务或过关的游戏。STG也可以按照视角版面分为纵版、横版、主观视角。
- SLG=Simulation Game:SLG是指玩家运用策略与计算机或其他玩家较量,以取得各种形式胜利的游戏,或统一全国,或开拓外星殖民地。SLG的4E准则为:探索、扩张、开发和消灭(Explore、Expand、Exploit、Exterminate)。SLG可分为回合制和即时制两种。
- MSC=Music Game:音乐游戏,培养玩家音乐敏感性,增强音乐感知的游戏。伴随美妙的音乐,有的要求玩家翩翩起舞,有的要求玩家手指体操。
- MUG游戏的诞生以日本KONAMI公司的《复员热舞革命》为标志,初诞生便受到业界及玩家的广泛好评。该系统说起来相对简单,就是玩家在准确的时间内做出指定的输入,结束后给出玩家对节奏把握的程度的量化评分。这类游戏的主要卖点在于各种音乐的流行程度。
- SIM=Simulation Game:生活模拟游戏,区别于SLG(策略游戏),此类游戏高度模拟现实,能自由构建游戏中人与人之间的关系,并如现实中一样进行人际交往,还可联网与众多玩家一起游戏,如《模拟人生》。
- TAB=Table Game:桌面游戏,顾名思义,是从以前的桌面游戏脱胎到各种游戏平台上的游戏,如各类强手棋(掷骰子决定移动格数的游戏),经典的有《大富翁》系列;棋牌类游戏也属于TAB。由于桌游的互动性非常的强,一些外国人喜欢将桌面游戏称为社交游戏。
- TCG=育成游戏,以前GB系列泛用,现在一般大家都用EDU(Education)来指代该类游戏,以便于和“Trading Card Game”区分开。顾名思义,就是玩家模拟培养的游戏。
- CAG=Card Game:卡片游戏,玩家操纵角色通过卡片战斗模式来进行的游戏。丰富的卡片种类使得游戏富于多变化性,给玩家无限的乐趣。
- LVG=Love Game:恋爱游戏,玩家回到初恋的年代,回味感人的点点滴滴,模拟恋爱的游戏。恋爱不是游戏,但偏偏有恋爱游戏,目前的恋爱类游戏主要是为男性玩家服务的,也有个别女性类的。
- GAL=Girl And Love GAME:GALGAME是一类走极端的游戏,它几乎放弃了所有游戏性,而仅以剧情取胜,在人物塑造、情节张力方面有着他类游戏所难以企及的高度。
- WAG=Wap Game:手机游戏,顾名思义,是指手机上的游戏。目前,该游戏随处可以玩,连手机也必带休闲游戏,网民最喜欢手机游戏的种类,益智类比率最高,随后是动作类、战略类、模拟类、射击类。
- MUD=泥巴游戏,主要是依靠文字进行游戏的游戏,图形辅助。
1.2 Windows的发展历史
在过去的25年中,Windows操作系统经历了一个从无到有,从低级到高级的发展过程,总体趋势是功能越来越强大了,用户使用起来越来越方便了。但其发展进程并非是一帆风顺的,中间也曾多次出现曲折。应用最广泛的Windows操作系统在不断地发展,其发展进程充满了不确定性。Windows的成功与处理器速度的提高和内存容量的增加可谓“休戚与共”。微软依靠大量第三方软件让用户喜欢上了Windows。
Window的中文意思是“窗口”,Windows是Window的复数形式,表示多个窗口。Windows这个名字形象地说明了Windows操作系统是由多个窗口组成的。在Windows系统中,最基本的概念就是窗口。由于Windows系统的视觉感受很好,于是也被人称为“视窗”系统。
Windows的第一个版本Windows 1.0是在1985年5月诞生的,此时的Windows功能还很差,只是DOS系统上的一个Shell外壳程序,Windows本身还受图形条件的限制,界面也十分简单。Windows发展简史如表1-1所示。
表1-1 Windows发展简史
图1-1展示了从1985年至2010年Windows家族的衍生情况。
图1-1 Windows家族树
1.3 Windows应用程序开发
首先,我们必须了解Windows是什么,想必大家都很容易地回答:一个操作系统。没错,那么它有什么特性呢?与游戏制作有什么关系呢?为什么会选择Windows平台来制作网络游戏呢?这要从它的基本特性讲起。
1.Windows特性
Windows是基于图形界面的操作系统,它的特性就是其标准化的图形用户界面(GUI)。同时,它又是一个多任务操作系统,允许用户在同一时刻运行多个应用程序或同一个应用程序的多个实例。它采用了与硬件无关的方式来处理视频显示、键盘、鼠标、打印机、串行口以及系统时钟。这些特性决定了Windows的成功,它现在作为世界上最主流的操作系统,也是网络游戏最主要的开发平台。
2.Win32 API
针对Windows进行编程,就必须了解它的API。
Win32 API是32位Windows开发的基础。32位Windows上的一切软件都可以使用Win32 API来实现,而对于3D网络游戏制作来说,Win32 API的学习对于DirectX程序设计和WinSock程序设计的理解和掌握是相当重要的。
API是应用程序接口(Application Programing Interface)的简写。API类似于我们在学习C语言时了解的函数库的概念,例如C语言运行时库(C Run-Time Library)。同函数库类似,API包括一些预先定义的函数、结构体和宏,目的是提供应用程序开发人员在某软件/硬件平台下进行开发时能够访问该平台的能力,而又无须访问源码,也无须理解内部工作机制的细节。
但API比库函数更接近平台本身。例如C语言中提供了访问文件的能力,但是实际上它还是要调用操作系统的API函数来访问文件。这样做的目的在于提供了C语言跨平台的能力。同样的一段C语言代码在Windows的编程环境中可以使用,在Linux的编程环境中也可以使用。但是显而易见,直接调用操作系统的API可以获得更多的功能和性能。
同一个API也可以提供给不同编程环境、编程语言进行访问。例如Visual C++、Visual Basic、Dephi等都可以使用Windows提供的API。
我们可以使用微软的MFC库和.NET进行编程,但是利用Windows API进行编程更有利于我们去了解Windows的本质。MFC仅仅是对Windows API的一种高级封装而已。当我们使用DirectX时将明白,DirectX的绝大多数接口和函数,均是使用Win32 API的方式来进行开发的。
3.Platform SDK
Windows API是操作系统的一部分。只要安装了操作系统,无须安装其他软件(例如Visual C++),系统中也存在Windows API。此时,只要你有一个C/C++的编程环境(例如Visual Studio Express)就可以进行Windows编程,尽管很麻烦。
SDK是软件开发包(Software Development Kit)的缩写。在SDK中提供了开发应用程序所需的各种头文件、库文件、帮助文档、各种工具以及例程。在微软公司发布的Visual C++中就包含了使用C++语言进行Windows编程的Platform SDK。当然,开发人员也可以使用免费的Visual Studio Express,然后单独下载和安装Platform SDK进行Windows应用程序的开发。尽管商业版本的Visual Studio中包含了Platform SDK,但是也不是最新的。有的时候,为了使用最新的操作系统的特性,往往需要重新下载最新的Platform SDK。
4.MSDN
MSDN是微软开发者网络(MicroSoft Developer Network)的缩写。这是微软公司面向软件开发者的一种信息服务。MSDN实际上是一个以Visual Studio和Windows平台为核心整合的开发虚拟社区,包括技术文档、在线电子教程、网络虚拟实验室、微软产品下载(几乎全部的操作系统、服务器程序、应用程序和开发程序的正式版和测试版,以及各种驱动程序开发包和软件开发包)、Blog、BBS、MSDN WebCast、与CMP合作的MSDN杂志等一系列服务。
MSDN Library就是通常人们眼中的MSDN,涵盖了微软全套可开发产品线的技术开发文档和科技文献(部分包括源代码),还包括过期的MSDN杂志节选和部分经典书籍的节选章节。但事实上,这两者只占MSDN庞大计划的一小部分。MSDN Library有1.8 GB左右,可以通过在线或者MSDN订阅(需付费)以脱机方式浏览。每个时期,在不同版本的Visual Studio发布时,都会有对应的MSDN Library发布。
其中,产品下载、在线电子教程、MSDN杂志和技术紧急电话支援是付费的,其余的基本免费。当然,MSDN杂志可以通过微软公司的网站免费观看或者下载。MSDN涵盖了所有的可以被开发扩充的平台和应用程序,因此微软公司的百科全书Encarta或者各种游戏,是不包括在MSDN之内的,因为这些产品直接面向最终用户,没有进行程序开发的必要。
1.4 一些说明
使用本书有三个先决条件:一是应该从用户的角度熟悉Windows操作系统;二是熟悉C/C++语言;三是应该在计算机中安装Visual C++编程环境。作者在编写这本书的过程中采用的是Windows 7操作系统,Visual Studio 2005编程环境,其中包含了Visual C++ 8.0,并安装了SP1。当然,也可以采用其他版本,但无法保证能顺利运行我所讲述的代码。除此之外,如果能够具有以下条件,则有助于您的学习,但是这些并不是必需的。
建议一:推荐安装Visual Assist X插件。当然,安装其他的插件也未尝不可,个人感觉这个插件比较强大方便而已。安装插件的目的仅仅是方便你的编程,即使没有,也可以顺利进行编程。
建议二:若你对和我一样对自己的英语没有信心的话,建议随便找一个英文翻译软件。因为你会接触到大量英文文档,一个适合的英文翻译软件会为你的编程之路带来很多帮助。
最后,期望你本身拥有下列素质:
(1)对游戏编程的爱好;
(2)对学习编程的耐心和毅力;
(3)勤于动手,能够主动地学习。
因为本书是为那些希望在Windows平台下从事游戏编程工作的广大游戏爱好者而编写的,所以在内容的组织上,不可能也没必要讲清楚每一个细节。本书从Windows编程入手,重点放在游戏架构上,最大的目的还是起到一本入门教材、抛砖引玉的效果。也希望各位读者在阅读并且尝试编程的过程中,不必把每一个成员、每一个变量都搞清楚。用到什么学什么、把程序写出来、在编程中自己寻找答案,这才是最重要的。
1.5 习题
(1)选择一款经典的单机小游戏,尝试对它进行倒推方式的游戏策划。如果通过本教材的学习,你能够实现它,那一定是一件很棒的事情!
(2)安装Visual Studio 2005(SP1)开发环境以及MSDN,选择安装Visual Assist X。
(3)在MSDN的目录视图中,浏览MSDN的目录结构,重点放在《Win32和COM开发》这一部分。
(4)安装一款电子词典软件。在MSDN中的索引视图中查找WinMain,在电子词典的帮助下自行阅读WinMain函数的帮助文档。
(5)通过网络搜索适合于Windows游戏编程的开发环境。