图书前言

序    言

如今,“因特网”一词事实上已经和“计算机”成了同义词,越来越多的人使用计算机只是为了使得自己可以在万维网上冲浪,或者可以与朋友及家人通过E-mail联系。用户的增长,以及现代硬件和软件能力的指数级提升,已经开辟了个人计算机时代结束和网络时代开始之间的一个灰色区域。

因特网的计算机文化毫无疑问给我们的生活带来了超出想象的冲击,我们中的大多数人每天都浏览网络以获取信息和新闻。我们中的一部分人使用因特网来进行学术研究,还有一些人使用网络传播病毒或者攻击公司网站,以此来发泄自己的不满并给别人带来灾难。对于笔者而言,网络的魔力在于它给人提供了体验在线游戏的机会。

电子游戏产业是一个每年可以产生数十亿美元产值的产业,其中大部分来自于家用游戏机和压缩包装型PC游戏。我深信在线游戏在很大程度上还是一个未被发掘的市场——这非常有趣,因为它给了所有人在计算机游戏中开发“下一个重要事物”的很好的机会。不管它是一种适合在线玩的新游戏类型,还是一种帮助现有在线游戏赚钱的新的市场模式,这中间都充满了机遇。即使不能成为下一个有数亿美元身价的多媒体大亨,在游戏产业中你依然有很多的机会一举成名。请记住,由于Java游戏一般来说简单而有趣,并且对用户硬件要求极小,所以Java游戏通常对于85%的计算机用户都有吸引力,这些人一般不是纯粹的铁杆游戏玩家。可以利用这个事实把你的游戏传播给所有类型的玩家而不仅是铁杆玩家。

不管是喜欢向朋友炫耀作品的痴迷程序开发者,还是正在探求利用因特网的优越性在游戏产业边缘创造财富的老练专家,本书将向你展示如何使用Java语言来开发稳健的、柔性的游戏程序。你准备把你的技术提升到更高的一个档次吗?继续阅读,或许你会成为写出下一个“杀手级游戏”的人。

谁应该阅读这本书

计算机编程既是一门艺术又是一门科学。要把一个想法变为一个完全的产品,需要严密性,也需要创造力。我相信对任何人来说,只要他会一些计算机技术,就具备了成为一名程序员的能力。问题在于:你有成为一名计算机程序员的兴趣吗?请拿起本书,告诉我你确实有兴趣。但是,你是否应该买本书呢?

如果符合下列条件之一,那么你应该买本书: 

? 你对游戏编程感兴趣或者你是一个初级程序员,并且想在应用Java语言创造刺激的因特网游戏方面登堂入室。

? 你已经使用过像DirectX或者OpenGL这样的软件包,并且想把你的技术延伸到Java领域。

? 你需要一本大部头的书来支撑不平的躺椅或者桌子。

? 你是一名贪婪的Java程序设计者,并且想搞清楚怎样把你的Java实践扩展到游戏开发领域。

? 你喜欢没有不必要的代码并且有实际例子的书。

? 你对开发游戏感兴趣。

? 你的书架上有一个空位并且忍不住想往里面塞一本列入《Primier Press游戏开发丛书》中的书(我有点厚颜无耻了,呵呵)。

如果符合下列条件之一,那么你可能不应该买本书:

? 你喜欢电子游戏,但是对实际创作没什么兴趣。

? 你在找一本关于其他面向对象语言的书。

? 你只是想在书店里假装读一下本书让别人觉得你是淘气的游戏编程天才。

? 你认为这是一本关于咖啡,或者关于离中国海岸不远的那个海岛的书。

? 你以前在发明Java的那个开发组,并且对我传授Java语言的无用尝试嗤之以鼻。

带着上面的想法,我们已经来到了十字路口。如果你属于第一类人,想学习用Java来开发游戏,那么请继续,并且买下本书。我保证你会获得创造自己游戏的乐趣。然而,如果你更偏向第二类人,请友善地把本书递给等着看本书的下一个人。我相信本书所包含的魅力会把你拉回来。

你将从本书中获得什么

像所有的探索未知世界的旅行一样,对要去的地方至少有一些认识总是好的,这就是我要列出当我们看完本书时需要达到的目标的原因。当看完最后一章,再回头来到这里,看看你到底做到了多少。

在阅读完本书后,你应该:

? 能够编写、编译和运行Java 应用程序(application)和小应用程序(applet)。

? 了解面向对象的基本概念和特征,特别是它们怎么和Java以及游戏编程相关的。

? 可以使用Java创建稳健的、柔性的2D游戏和游戏工具。

? 可以在游戏中加载声音。

? 知道如何在游戏中使用抽象Window工具包(AWT)的比较高级的特性和Java 2-D。

? 知道什么是客户机/服务器(C/S)架构,并且知道如何在游戏中实现客户机/服务器架构。

? 对于如何创建自定义菜单和可视化组件系统有牢固的理解。

? 能够融汇上面所有的概念,创建一个可重用的游戏开发引擎。

本书的组织结构

学习游戏编程可能开始看起来势不可挡——尤其是对那些新进入这个行业的人,这就是我把所有的内容分成不同部分的原因。用这种方法,我们可以用一种有组织的方式探讨Java游戏编程。以下是我们将在本书中讨论主题的简要列表。

? 第1篇——步入Java的丛林:从Java 2 API开始。这一部分包括Java语言简史,逐步介绍在系统中安装Java,以及其他针对游戏编程的Java基础。这一部分主要针对编程新手和初次接触Java的C/C++程序员。

? 第2篇——Java 2-D图形开发和抽象Window工具包(AWT)。在开始创建游戏前,我们必须首先研究Java图形程序是如何工作的。本篇综述了如何用Java 2 API创建applet和抽象Window工具包(AWT)的公共特性。还使用了Java 2-D包的一些比较高级的图形特性。

? 第3篇——面向大众的Java游戏。这是真正乐趣的开始。它把第1篇和第2篇中的概念融汇到一起,我们将可以探索如何在2-D装置中建立并控制游戏中的对象。这一部分还研究了如动画和游戏对象控制等主题。你还会看到场景管理和自定义控件与菜单,以及如何建立一个客户机/服务器网络。

编程成功的诀窍

下面的诀窍可以保证让你在几乎所有的编程挑战中获得成功。虽然其中的大部分很简单并且很感性,但你还是不妨把它们记在心中。

? 让自己熟悉Java语言。虽然投入到游戏编程中可能是很诱人的,但是如果不了解Java的基本特性,你可能很快被淹没,这也是我把针对用Java进行游戏编程的预备资料也包含进来的原因。即使你是一个熟练的C++程序员,也请在写第一个游戏之前,首先搞清楚Java的特性和组成。

? 开放的心态。有时候证明新的概念或想法的最好方法是展示实现它的最复杂的途径。所以,本书的一些示例代码并不是实现所想表达的东西的最有效方法,我将尽量指出那些可以对代码进行改进和优化的情况。可以自由地对书中的代码作出加强和改进,记住,几乎任何一段代码都存在改进的可能。

? 创新。虽然计算机编程是技术性的,但是用所掌握的知识来做什么取决于你。我会给出用Java创建游戏的工具,由你决定利用这些工具来开辟创新性游戏的下一个时代。

? 了解哪些工具可用。对于大型C++ Windows应用程序,我不会顽固不化地不用诸如Microsoft Visual Studio之类的集成开发环境(IDE)。但是对于Java项目,我更乐于使用纯文本编辑器和命令行来编译并运行程序。确定使用哪种工具很大程度上取决于你自己。我在配书光盘中提供了一份Forte 3.0 for Java的拷贝,也许你会想试用它。即使像原始的Java包和javadoc这样的工具也可以帮你写出最有效的代码。使用那些可以让你在尽量短的时间写出最优美代码的工具,这是游戏的目的。

? 准备充足的咖啡。这对于深夜编码工作很重要。就个人而言,我经常喝Mountain橙汁,但是我还是喜欢不时喝一点咖啡以让我度过那些编写代码的漫漫长夜。

? 专注于手头的工作。如果你在编写一个很酷的绘图程序时,却突然想起要编写一个声音引擎,那么没有什么比这样的事情更糟糕的了。中途转换目标会让你不能专心,而且当你回过头来时会不记得在做什么。如果有这样的事情发生,那么就在一个想法浮现在头脑中时记下笔记,但是尽量要先把手头的事情做完。

? 最重要的是要有兴趣。只要不是在离截止日期只有15分钟时还有两个星期的工作量没有完成,就没有什么可以惊慌的,哪怕是在开发周期的某个阶段受阻。好的态度,肯定会在最终产品中展现出来。

好了,序言到此为止。下一步,在第1章读者将看到怎样开始使用Java。我们会回顾一下Java语言的简要历史,然后看看怎样安装Java编译器和运行Java程序。之后,我们将研究Java语言的细节。所以系好你的安全带,准备迎接即将到来的激动人心的旅行!