Core Techniques And Algorithms In Game Programming

 

游戏编程中的核心技术和算法

 

关于作者

本书的作者Daniel Sánchez-Crespo Dalmau西班牙巴塞罗那Pompeu Fabra大学教授。他创建了西班牙计算机游戏制作第一硕士学位,并担任其主任。他还成立了Novarama­­——位于巴塞罗那的一个独立游戏工作室,主要制作PC/Xbox平台上的创新游戏。同时,他是《Byte Magazine Spain》、《Game Developer Magazine》以及Gamasutra网的专栏作家 ,已经发表了40多篇文章。

 

绪论

许多年,游戏编程好的思想只是手写记录在纸片上的。游戏开发知识也只是通过开发者在会议、游戏产业集会的构思图或同其他同行交流的时候共享。游戏制作是极度没有的条理的。今天,游戏编程比以前更为复杂,人们为之从团队大小、预算、时间进度做了很大的改进,这些对每一个游戏开发者来说是激动人心的。我们在游戏行业的大小规模和价值上不再是无组织的。现在,专业游戏开发必须是有效率的,同时开发人员的开发也必须准确、可靠。我们完全不能因为一个非预期的特写或是不知道怎样去实现某一个特效而冒项目失败的风险。

  游戏行业需要结构化的方法去培养新的专业人员。我们对待游戏开发的态度正在改变,例如游戏讨论会议、游戏开发杂志、相关的国际游戏开发组织(像International Game Developers Association (IGDA)),甚至世界各国的学校也开始把从事游戏开发当作可选的生存职业来开课、训练学生。但是游戏开发相关的资料却特别的少,以至于人们找一本合适的游戏开发参考资料都十分的困难。许多参考书侧重于与游戏有关的API编程,其他的一些却属于别的不同学科,比方说人工智能、图形学等。这些书也许具有极高的学术价值,但是缺少游戏开发细节。结果,我们因没有主要的资料来源而不再从大量的信息渠道去收集资料。本书就是在这样的独特的背景下产生的。有六年游戏编程教学经验并作为欧洲计算机游戏制作第一硕士工程奠基人和领头人之一的我为热心的游戏开发人员发展了一套课程。我曾经教学生任何一个游戏开发人员都接受的核心科目和技术,使他们能在短的适应时间里成功进入游戏制作室。这正是本书的目的——组织、连贯地介绍计算机游戏编程有关的基本原理科目。

我的目的是为想学习当前游戏编程和设计技术的人们提供一本好的参考书。因此,本书的重点不是一步步地来教你窍门,这些许多好的书中都包含有。它不是一本有关某种游戏流派的书,因为技术往往交叉在流派的边界。它更不是一本理论的书。相反,它是一本有关具有杀伤核威力的确定的、好理解的方法的书。这本书将帮助你建立基本的层次,你能从细微上区别大多游戏程序中的基本算法。

 

你将学到

这是一本有关游戏编程的书。它的目的是教你驱动市场上大多数计算机和电视游戏的基本技术和算法。你将学到AAA标题的pc机以及各种平台的理论和它们的执行细节。本书的重点不是放在如图形、网络等的详细内容。我的目的是想读者展示游戏每一个内容的核心算法。所以,这本书是一本不错的游戏编程入门教材。

你需要知道什么

游戏编程需跨越许多学科领域。它源于数学,多方面编程、人工智能等领域,如果你在以前旅行中学习过这些科目,它们应该是使你放轻松的原料。

首先,本书假设读者能熟练地使用cc++编程语言。读者应该熟悉文件包含、指针、类、数据结构、继承等。这不是一本关于具体编程语言的书,而是一本详尽的程序制作的书。你将在第三章看到流行的数据结构的内容“数据结构和算法”,但是这不是你应当期望的全部。另外,你可以一点都不懂游戏编程,这正是本书所要让你学习的所在。

还有一个先决条件是:读者有线形代数和微积分等数学知识。你应该熟悉数学矢量、派生词以及积分、复数、三角法等内容。如果读者因久淡忘了这部分内容,我在后面附录D的“相关数学知识”将提及。它包括了大部分本书所涉及的公式和数学方法,是读者应该浏览的部分。

再者,你需要时间,它的重要性比你想象的要多得多。许多人觉得游戏编程很难学,认为游戏代码是用不可思议的语法构成,只能被专家理解。游戏编程的一些过程确实比较复杂,但是游戏的大部分源代码很容易看懂——仅仅复杂在一些具体的但又很容易发现的地方。所以,游戏编程没什么难的东西,达到一个相当的水平只是时间问题。游戏制作需要奉献精神和大量的训练。极大程度上,它并不被认为有多难。但是它需要时间,所以,请确信你有大量时间能投入到游戏编程。

 

本书的组织

从纯技术的观点,游戏代码能被划为两个大的部分。相当多的一部分代码处理玩游戏的有关部分:控制交互、人工智能、脚本等。这是游戏逻辑部分,我将用书的前半章节来讲述它。然后我们再介绍技术部分:图形、声音。一般来讲,这两者使游戏更富有多媒体效果。在本书的第一部分,我们将概述c/c++。然后在接下来第二部分,我们将使用多种工具和函数库,比方说OpenGL DirectX。下面是本书的目录纲要。

 

第一部分:游戏系统设计(Gameplay Programming

 

第一章:“游戏编程概历”,历史说明。简要地介绍从游戏产业起初到现在的发展并包括平台例子。

第二章至第四章:“游戏体系结构”、“数据结构和算法”、“样品设计”都和代码分析的宏观水平有关。他们覆盖了游戏代码结构、通用数据结构和设计平台等主题。

第五章:“用户输入”仅包含玩家和游戏的交互处理。

第六章至第九章:“基本人工智能原理”、“面向行动的人工智能”、“人工智能策略”以及“脚本”,处理人工智能方面。这几章将解释基本算法、动作行为和人工智能战略、人造生物、脚本技术。

第五章:“网络编程”,研究网络游戏有关方向。它将阐述c/s多用户游戏编程,和大量的多用户游戏。

 

 

第二部分:引擎设计(Engine Programming

 

第十一章至第十五章:2D游戏设计”、“3D管道”、“室内表现”、“室外算法”以及“特征刻画”,包含图形引擎例如表现管道,从一般设计然后继续至室内或室外的表现算法。

第十六章至第十八章:“电影表现”“明暗表现”“纹理绘制”,和视觉感觉相关。它包括摄像机设置和灯光照明,应用不同的几何学纹理技术。

第十九章至第二十一章:“粒子运动规律”、“组织表现”“Procedural技术”,需要复杂的表现情节。在这几章中,我们谈论自然仿真的粒子运动规律、组织表现技术和procedural/shader-based方法。

第二十二章:“几何算法”,讲述几何检测,如碰撞检测、几何化简等。

 

 

第三部分:附录(Appendices

附录A性能调整包括最优化。性能优化技术能保证游戏运行的最佳性能。

附录B:OpenGL附录CDirect3D:罗列API探讨OpenGL 1.4 and DirectX 9

附录D相关数学知识”,总的回顾一下游戏编程中所用到的数学知识。

附录E“深层阅读”,为读者在某一方面更深层的学习提供补充信息。

 

 

第一章     游戏编程概历

"In the beginning the Universe was created. This has made a lot of people very angry and been widely regarded as a bad move."

Douglas Adams

第一节    Before Spacewar

计算机游戏产业不是从确定的总体计划的一部分开始。确切说,它形成于不同国家的独立团体在近似相同的时间里提出相同的意见的时候。这传统的游戏创作者寻找一条多样性投资道路,技术公司利用新发明的电子技术,一些幻想家设想的一种新的娱乐方式,使游戏成长为我们今天所知道的产业。

正如你不久会了解的,计算机游戏时代开始于二十世纪七十年代早期。但是大多数起关键作用的公司产生得更早。这些公司经营着不同的商业,不知何故,他们后来并不认为电子设备游戏能成为一个新的赚钱商业。

工业巨人任天堂就是一个很有说服力的例子,它在1889年被Fusajiro Yamauchi确定为传统游戏公司。起初在Marufuku公司麾下,它的生意就是加工并且出售Hanafuda卡——一种日本游戏卡片。在1951年,Marufuku公司被命名为任天堂游戏卡公司。不久,随着电子游戏和设备出现,任天堂成立分支做电子游戏。随着时间的过去,传统游戏逐渐被淘汰,任天堂成为今天我们所看到的任天堂公司。所以,任天堂是从现有团体随着成型技术而改变的一个完美例子。

但是像索尼这样的公司走的是完全不同的道路。它成立时是做电子消费产品的,前身是1946Akio Morita Masaru Ibuka成立的东京无线电通讯工程社。它在计算机方面的生意主要是制造磁带录音机,并且随着晶体管的到来而小型化。当它的产品打入欧洲和美洲市场的时候,为了让外国人方便记忆,社团决定更名。公司因此该名为SONY(根据拉丁词“sonus”,声音的意思),以便易记。索尼很快成为电子消费品的最大卖主,特别是声音和视觉领域的产品。它装配生产了随身听、彩色显象管以及其他的诸多名牌产品。直到二十世纪80年代后期,索尼从开发第一个索尼游戏站开始,才接近游戏生意。今天,索尼在世界范围内建立了许许多多的游戏工作室来制作游戏。游戏站平台成为它重要的经营战略,并成功的扩展到电子消费产品。

  再者,小型公司对技术和游戏公司持中间态度.Sega就是一个典型的例子。它历史于1940Martin Bromely, Irving Bromberg, 以及 James Humpert创办的Standard Games—位于檀香山的投币机制造厂商-1951年,公司迁到日本东京后。1952年公司在日本以Service Games名注册,简称SEGA.公司的移迁使它更便于向美国在日本的军用单位生产投币机。几年后的1965年,Service Games和另外一家从事便捷摄影棚以及街机游戏相关的Rosen Enterprises联合。Rosen Enterprises是朝鲜战争老兵David Rosen1954年成立的。Rosen驻扎在日本时经历了机械投币机(像风靡全世界的弹球机)流行时期。在和Service Games联合后,Rosen开始想用Service GamesSEGA的名义想日本出口机械投币机。因生意萧条,Rosen购买了一家东京的自动贩卖机和自动唱片点唱机公司。SEGA也开始生产街机,不久扩展到家庭平台和游戏开发。

尽管不是任天堂、SONYSEGA 他们引导电子娱乐业。但是这些公司跟着进军了游戏业。显然,一些有电子游戏预见的人推动了这一过程。电子游戏预见源于大学和军队的研究者,因为他们有机会接触机器硬件(在二十世纪五十年代)。第一先锋是纽约Brookhaven国家核物理实验室的William Higinbotham。他也是一个弹球玩家。在上世纪五十年代,Brookhaven是国家支持的核能研究机构,游客能在那参观原子能的和平利用,包括图片和设备展览,图解说明核能用于放射性机器。Higinbotham觉得前来参观的游客很另人讨厌,他利用实验室的剩余原料设计了一个奇怪的装置:一个示波器、一些电容、两个电位计和一台模拟计算机。他为其起名叫“Tennis for two”。这个一个支持两人的桌球游戏,球台和球显示在示波器上,玩家能扭动电位计击球而改变球的角度。这台游戏装置是用电线缠绕成的,所以还不能算为游戏编程。和大多数天才人物一样,Higinbotham没有意识到他的成就,直到成队的人们等待着去玩它。1958年,世界上才有人做出了类似的东西。早在1952年,剑桥大学的A.S. Douglas在他的博士论文中提出了人机交互,他写了一个运行在EDSAC 计算机上的tic-tac-toe游戏来说明人机交互原理。

在上世纪五十年代,这样的例子很多,但是Higinbotham是早期最有证明力的。另外一个值得怀念的是Ralph Baer,他早在1951年就提出了家庭平台概念。他在Loral公司被委任做一个cutting-edge电视机时提议在其加入游戏。公司管理层接受了建议,但是15年后换了承包人,他还像第一次那样成功了。然后他开始做Mvox Odyssey-世界第一个家庭平台。

作为游戏早期的发展概要,到(上世纪)五十年代或六十年代初,一些公司(任天堂, Sega,等等)开发了著名的游戏并坚固了自己的业界地位,其他公司如索尼和Matsushita却在挖掘晶体管技术。还有,一些倡导先锋也已经意识到技术是游戏的潜力工具。一些测试游戏出现在具体硬件机器上:游戏能有效地运行在机器上。游戏编程还没有出现,因为,当时可编程装置很少。到1960年,在传统游戏和技术提供者的催化下,人们需要研究一个成功的单一游戏将会在哪说明三个趋势合并产生意义深长的生意机会。

 

第二节 Spacewar Atari

  游戏产业的转折点是美国麻省理工学院的学生Steve Russell编写了运行于一台数字PDP-1小型机上的一个简单的两玩家游戏。这个名叫Spacewar的游戏显示两艘太空飞船在计算机屏幕上。每膄飞船能在向对方射击的同时移动。Spacewar虽然没有成为消费产品,但是影响了很多人。它运行很新的技术,并且为其他游戏产生奠定了基础,是世界游戏史上的里程碑。游戏包括有:

     两玩家的竞争

     行为规则

     清晰的判胜条件

事实上,这种结构和传统游戏的棋类游戏差不多。它们的主要区别是游戏系统所用的技术。此后,这种三规则结构基本上保留原样。Spacewar深深影响了很多人,接下来我们介绍两位游戏产业先驱。

Nolan Bushnell,他在Utah大学学习工程学的时候接触游戏。他想象着把游戏镶嵌到人们玩得爱不释手的街机上,几年后,他成立了Atari并制造了第一台投币机。

Atari的故事是人人皆知的。看到Spacewar后,Bushnell开始从事费用合理的游戏载体平台机器研究。在Atari成立之前,他制作的第一个游戏叫Computer SpaceComputer SpaceSpacewar的翻版。Bushnell把它嵌入到了女儿卧室的电视机上。Nutting Associates——一家街机厂商购买了Computer Space的创意,并且雇佣Bushnell做产品总监。1971年,1500Computer Space机器生产并卖到美国。但是玩家发现,玩Computer Space机器很困难。以至Computer Space没有被接受。Bushnell尝试着寻找新的游戏创意,在几次争论后,Bushnell离开了Nutting Associates,他和Ted Dabney1972年共同创立了Atari

Ralph Baer,五十年代的电视游戏先驱。到1966年,他已经离开Loral且效力于Sanders Associates——一个军需供应商。在Sanders Associates,他被许可研究电视新创意,并在1968年获得专利。他认为电子游戏是电视机的第二用途。同时, Ralph Baer成功制作了两款电视游戏和早期的光笔。到1970年,电视制造商Magnavox得到了Ralph Baer的技术许可,在Ralph Baer的指导下,开始开发第一个游戏平台。在Atari诞生的同一年里(1972年),Magnavox发布了Magnavox Odyssey系统。1972年末,电子游戏商业从美国西海岸开始风靡了整个世界。Atari的最早游戏Pong成为最早的投币机成功例子。Bushnell从来没有想到,不到两周,加利福利亚的Pong机器因大量投币而瘫痪。几乎在同一时间,Magnavox的官方商店创下卖出了100000Odyssey的非凡业绩

在这段时期,两种截然不同的商业模式产生了:玩一次都得付费的街机游戏和购买后能反复玩的家庭游戏。这两种都不断发展至今,但是后者即家庭游戏占主导地位。甚至出现了第三种:在特定硬件上玩得游戏。

 

 

第三节                游戏平台和个人计算机

电子游戏,不管是家庭平台还是街机游戏,都是即兴起来的。不同的厂商如Coleco , Fairchild等发布了自己的家庭游戏平台,并且竞相改新。例如1976年的Game cartridges1978年的trackballs等等。

游戏平台和游戏开发者

  在上世纪的七十年代,平台制造商和游戏开发者的区别逐渐明显。平台制造商是投资大笔钱用于制造硬件平台并且以诱人的价格出售给消费者。有些时候,价格几乎不包括甚至低于硬件成本费。制造商也会留出接口给其他公司来制作游戏,尽管那时候比较粗糙、简单。显而易见,其他公司当然愿意从事相关的商业。随着游戏平台市场份额的竞争,能提供尽量大的游戏成为主要的竞争优势。没有哪一个制造商可以有传送使自己的平台能吸引尽量多人的游戏带宽。因此,外部公司开始为平台系统编写游戏。在这个时期,平台厂商没有对产品质量进行管理,数量高于质量。每卖出一款游戏,开发者需付钱给平台制造商以作为平台开发的费用和收入。一些平台制造商仅仅从事硬件生产,也有一些同时从事开发,当然有些时候会产生利益冲突的。外面开发者有和内部团队相同的信息资料吗?一般来讲,第二部分的团队拥有的信息不及参与前一部分的团队,这也导致了前者的埋怨。即使有些变化,这种模式现在还是适用。和今天模式不同的是,平台以比生产低得多的价格出售,特别是在刚推出的时候。这是很危险的,因为硬件厂商有时候不得不遭受重大的损失。因此,平台厂商开始向开发者征收版税来弥补损失或最后盈利。

那时候占可编程控制器主导的是Atari VCS,也被称作Atari 2600,它最早发布于1977年,当时价格为249美元。因为它实际上是当时的标准,所以我会用它来说明在七十年代为控制台编写代码意味着什么。这个平台使用一个6507 CPU128字节的用来存储状态量的RAM

程序存储在一个插在控制台的可交换的外部盒子里。盒子的一边满是电子接线。因此,把完整的数据片插入控制台,盒子就成为控制台硬件的一部分了,这个盒子一般作为程序代码和数据的存储器。

  尽管许多的先进系统使用不同的磁碟作为存储媒介,存储盒方法一直没有太大变化,直到Nintendo 64 and the Gameboy Advance出现。对制造商来说,用CD-ROM DVD碟片存储游戏更为划算,但是增加了被盗版的风险,所以还不得不去提高控制台内存的存储容量。在在Atari 2600中,容纳游代码和数据的6k大小的ROM通常固定在盒子里。有8k地址空间的6507 CPU1.19 MHz速度运行着。辅助CPU的是电视卡(TIAStella)和I/O芯片(RIOT.

Stella通过寄存器并且有十分严格的缓冲区或物理寄存器来存放屏幕内容。现代适配器(CGA以前)都有一个存储区域来存放屏幕像素,因此,复制数据到这个区域就能有效地绘制在屏幕。Atari 2600没有这样的存储区域。显示器通过连续地和电子束同步地读取Stella寄存器数据来显示内容。CPU必须和电子束同步,以严格相同的速度向寄存器写入,所以,使人看上去不会抖动。作为硬件带来的局限性的例子,下面是Atari 2600的一个游戏循环次序:

        Start the vertical blanking interval

Start the vertical sync interval

             Here is space for 80 micro instructions

End vertical sync

             Perform game computations here

End vertical blank

Now the screen rendering starts...

             Send each line to the register

             6 instructions can be fit here

Loop lines until the screen is rendered

Go to first step

Atari 2600和同时代的其他控制台一样,代码是用特殊的机器汇编程序编写的。程序的数据和源代码是内存条的一部分数据就是跟在程序代码不用的代码后面翻动的字节信息。一个没有经过测试的程序执行数据将会得到意想不到的结果。这里是 2600 的战斗游戏的一个摘录, 说明成绩和数据怎么样作为全部的一部分的。

 

B
   
   
    
    15A
   
   7       STX  D2

            LDX  #03

B15AB       LDA  L1765,Y

            EOR  D1

            AND  D2

            STA  COLUP0,X

            STA  D6,X

            STA  D8,X

            INY

            DEX

            BPL  B15AB

            RTS

J15BD       LDA  #00

B15BF       INX

            STA  A2,X

            BNE  B15BF

            RTS

L
   
   
    
    15C
   
   5       .BYTE  $0E ,$
   
   
    
    0A
   
    ,$
   
   
    
    0A
   
    ,$
   
   
    
    0A
   
    ,$0E ;  0

            .BYTE  $22 ,$22 ,$22 ,$22 ,$22 ; 11

            .BYTE  $EE ,$22 ,$EE ,$88 ,$EE ; 22

            .BYTE  $EE ,$22 ,$66 ,$22 ,$EE ; 33

            .BYTE  $AA ,$AA ,$EE ,$22 ,$22 ; 44

            .BYTE  $EE ,$88 ,$EE ,$22 ,$EE ; 55

            .BYTE  $EE ,$88 ,$EE ,$AA ,$EE ; 66

            .BYTE  $EE ,$22 ,$22 ,$22 ,$22 ; 77

            .BYTE  $EE ,$AA ,$EE ,$AA ,$EE ; 88

            .BYTE  $EE ,$AA ,$EE ,$22 ,$EE ; 99

 

L
   
   
    
    15F
   
   7       .BYTE  $F8 ,$F7 ,$F6 ,$06 ,$06

            .BYTE  $06 ,$16 ,$17 ,$18 ;     $15FC

            .BYTE  $19 ,$
   
   
    
    1A
   
    ,$
   
   
    
    0A
   
    ,$
   
   
    
    0A
   
    ;     $1600

            .BYTE  $
   
   
    
    0A
   
    ,$FA ,$F9 ,$F8 ;     $1604

            .BYTE  $F7 ,$F6 ,$F6 ,$06 ;     $1608

            .BYTE  $16 ,$16 ,$17 ,$18 ;     $
   
   
    
    160C
   
   

            .BYTE  $19 ,$
   
   
    
    1A
   
    ,$
   
   
    
    1A
   
    ,$
   
   
    
    0A
   
    ;     $1610

            .BYTE  $FA ,$FA ,$F9 ,$E8 ;     $1614

            .BYTE  $E6 ,$E4 ,$F4 ,$04 ;     $1618

            .BYTE  $14 ,$24 ,$26 ,$28 ;     $
   
   
    
    161C
   
   

            .BYTE  $
   
   
    
    2A
   
    ,$
   
   
    
    2C
   
    ,$
   
   
    
    1C
   
    ,$
   
   
    
    0C
   
    ;     $1620

            .BYTE  $FC ,$EC ,$EA ;          $1624

多数时候,游戏是由布置内存映像的那个人完成的,包括程序代码,图形设计,甚至声音。有时会有一个懂绘画的人跟着帮助。不过在当时的硬件限制下,制作图形是一个相当简单的任务。今天盛行的代码重用,那时候简直不存在。至多,程序员只是借用以前使用过的微指令顺序来加快游戏编码。一般来说,在这样的机器上编码需要很高的技巧和技术,正和写汇编程序为生的人所知道的一样。

个人计算机

当消费者正热衷于购买游戏机的时候,个人计算机方面也正产生革命。计算机是1959年发明的集成电路的副产品。第一台计算机Digital PDP-1,首次出现在1960年,它只有一个键盘和一台显示器。它的发布价格是12万美元。配置电脑也只是公司团体,计算机主要用于帐目清算、工程计算、以及数据库等方面。到1964年,出现了BASIC语言,人们可以在计算机上直接编写程序了。

后来,Douglas Engelbart 发明了一种两维的定点装置,这就是我们现在广泛使用的鼠标。到1968年(人类登上月球的前一年),第一台家庭计算机Honeywell H316进入市场,当时价格为一万零六百美元。阿波罗飞船的计算计算导航系统,特别是阿波罗11导航系统,给人们留下了不可磨灭的映像。它以2MHz速度运行,有64K的ROM4K的RAM,每秒能处理五万条加法运算。1972年,AtariMagnavox取得了成功,计算机产业也正在发展壮大。C语言出现后,Xerox's Palo Alto Research Center (PARC)首次提出了膝上型计算机。接着,Intel推出了8008,它有16KB的内存,CPU速度200KHZ,每秒能执行六万条指令,并且只需很低的成本。从这时开始,计算机以它的快速处理而著称。1974年,Intel又推出了8080,它内存16KBCPU速度2MHz,每秒执行64万条指令。在同一年,用于通用电子学的MITS Altair 8800的价格才400美元。

一年后,微软成立了。它当时的旗舰产品就是一个用于AltairBASIC解释程序。它是第一个用在微机上的可编程语言。几年后,微软开始为IBM微机开发操作系统。

1976年,个人计算机产业诞生了,Steven JobsSteve Wozniak成立了产品设计和经营的Apple公司。硬件天才Steve WozniakHewlett-Packard工作。Apple公司的第一个产品是Apple I,以每套666美元的价格出售给Homebrew Computer Club。但是,Apple I只是克隆了游戏机上的东西。

1977年,在Apple II到来的时候,游戏正潮水般地涌进市场。Apple II的关键部分是它的CPU:6502-和Atari2600特别相似。Apple II上有16KbRAM模块,并且理论上能扩展到48Kb,远远高于市场上的其他产品。Apple II包含有BASIC解释程序,一个QUERTY键盘,一个磁带盒接口以及特别的游戏操纵杆连接I/O口等。它能用16色、280×192像素显示图像,是理想的游戏平台。

Apple II以它技术优势超过了它竞争者(包括游戏机),它能用于编程,游戏,以及办公,拥有大容量内存和提供完美的色彩支持。而且,Apple II的成本比Apple I明显降低了,基本核心部分才600美元。如果全部配置成48Kb的超级计算机,也才2275美元。Apple II销量很好,并且有许多基于它的游戏被开发——例如Ultima 系列。

五年后,IBM推出了IBM微机,IBM微机采用Intel的8080CPU和微软的磁盘操作系统(DOS)。IBM 公布了PC的体系结构,使得其他公司能设计、出售自己的计算机产品来和IBM竞争。诚然,正是这些竞争促使了个人计算机时代的到来。

 

第四节  Shakedown and Consolidation

Atari 2600Apple II投放市场的时候,游戏产业有着明确的方向感。因此,从七十年代晚期到八十年代初,有时候被称为是游戏产业的黄金时代。那时候只需把最初产品做一些改进。在平台方面,即使Nolan Bushnell1978年离开Atari后,Atari还在多年拥有最高的市场率。随着公司奠基人的离开,Atari因大量游戏的推出而保持繁荣。这个时期是日本厂商进军游戏行业的时期,Taito(一个弹球盘厂商)推出了Space Invaders;任天堂出售Othello街机游戏并在1981年推出了Donkey Kong(当时著名设计人Shigeru Miyamoto的第一款游戏);Namco推出了著名的游戏有如 Galaxian, Pac-man, Galaga, Pole Position等。

Pac-man的最初设计理念来自一个缺少一片的皮萨饼。游戏题材是日本的一个叫Paku的以能吃著称的民间英雄。游戏原本名叫Puckman,但是为避免美国一些喜欢涂鸦的人把P改成F使得Namco最终定名为Pac-man

Atari公司没有着重关注2600的质量,以致预先为2600做的一些游戏落空。Pac-man 等游戏发布时带有极大的欺骗性,消费者因它们的质量而拒绝购买。传说成千上万的游戏拷贝因此在美国新墨西哥州被当作垃圾扔掉。到1982年十 二月 7日 ,Atari宣布说,2600第一次没有达到预期的销售,使它的母公司Warner Communications的上市股票价格一天就降了百分之三十二。1983年,当Atari还在努力恢复的时候,计算机游戏市场发生了大的动荡。零售商人的货架上仍有大量的劣质游戏。游戏的价格急剧下降。以前售价40美元的游戏只卖到了99美分,导致了很多公司停业。也有幸免的公司,但是再也没有从中恢复过来。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
《Python中的数据结构和算法》是一本介绍Python编程语言中数据结构和算法的书籍。本书围绕Python提供的丰富的数据结构和算法进行阐述,让读者能够充分利用Python的优势,并编写高效且易读的代码。 首先,本书将介绍Python中常用的数据结构,如列表、元组、集合、字典和字符串。读者将了解它们的特性、使用方法和操作技巧。另外,本书还会介绍Python中的线性数据结构(如栈、队列和链表)和非线性数据结构(如树、图和堆),并详细介绍它们的实现原理和应用场景。 其次,本书将详细讨论Python中常见的算法和算法设计技巧。读者将学习到排序算法(如冒泡排序、插入排序、选择排序和快速排序)和查找算法(如线性查找和二分查找)的实现方式和性能分析。此外,本书还会介绍一些常用的图算法(如广度优先搜索和最短路径算法)和动态规划算法,帮助读者解决实际问题。 在深入学习数据结构和算法的过程中,本书还会提供大量的示例代码和解题思路,帮助读者理解和掌握相关的概念和技巧。此外,本书还会提供习题和练习,让读者巩固所学知识,并培养解决实际问题的能力。 总而言之,《Python中的数据结构和算法》是一本系统、全面且实用的书籍,适合对数据结构和算法感兴趣的Python初学者和程序员阅读。通过学习本书,读者将能够深入理解Python的数据结构和算法,并能够应用于实际编程中,提高程序的效率和可读性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值