Javaゲームプログラミングの本:比較レビュー

ゲームプログラミングは、15年ほど前に私をコンピューターに惹きつけたものです。あなたが私のようであるなら、コンピュータゲームから放射状に広がる魔法の鮮やかな色のアニメーションは、あなたを蛾のように光に引き付けます。しかし、コンピューターゲーム(およびその内部)に魅了され、それらをプログラムできることは、まったく別の2つのことです。ゲームがどのように機能するかがわかるまで何時間もゲームを見つめることで、私は貿易を難しい方法で学ばなければなりませんでした。最近では、ごまかして近道をすることができます。本を手に取って、経験、ヒント、トリックをすべて非難する経験豊富なプログラマーと「心を溶かす」だけです。

最近のJavaの本(以下の「参考文献」セクションにリストされているLaura Lemayの本を参照)は、まったく別の道をたどりたいと考えていることを念頭に置いて、元(商用)ゲームプログラマーに現在のレビューを任せるよりも悪いことをする可能性があります利用可能なJavaゲームプログラミングの本。

このレビューのために4つのタイトルが私の玄関口に届きました:

  • Black Art of Java Game Programming、Joel Fan、Eric Ries、Calin Tenitchi(Waite Group Press)

  • 最先端のJavaゲームプログラミング、Neil Bartlett、Steve Simkin、およびChris Stranc(Coriolis Group Books)

  • ジョン・ウィザーズ(ワイリー)によるJavaエンターテインメントアップルの開発

  • Michael Morrison(Sams.net)による「Javaインターネットゲームプログラミングを教える」

本を詳細に検討する前に、主な特徴を俯瞰する表から始めましょう。

表1:Javaゲームプログラミングブックの概要。

タイトル(出版社) 価格(US $) ページ 章(付録) のCD-ROM? 著者 オブジェクト指向 ネットワーク化されたマルチユーザーフォーカス ゲームフレームワークフォーカス
Javaゲームプログラミングのブラックアート(待機) 49.99 933 20(5) はい 3 ++

非常に

良い

良い 良い
最先端のJavaゲームプログラミング(コリオリ) 39.99 523 21(2) はい 3

非常に

良い

非常に

良い

非常に

良い

Javaエンターテインメントアプレットの開発(Wiley) 29.95 392 10(0) 番号 1 貧しい 貧しい 平均
Javaでインターネットゲームプログラミングを自分で教える(Sams.net) 39.99 416 21(3) はい 1 平均 良い なし

表の見出しを説明するために、「オブジェクト指向」列では、それぞれの本の著者がJavaを本来の使用方法、つまりオブジェクト指向の方法でどの程度使用したかを強調しています。優れたJavaの本は、その焦点が何であれ、優れたオブジェクト指向の実践を強制します。劣った本は、JavaをCまたはPascalであるかのように、つまり手続き的な方法で使用します。ゲームは、オブジェクト指向を使用して設計および実装することで恩恵を受ける非常に優れた候補アプリケーションであるため、優れたJavaゲームブックは、OOA / OOD / OOP(OO分析、設計、プログラミング)に強い方がよいでしょう。

Networked Multi-User Focusコラムは、この本がJavaの最も強力なゲームプログラミングの可能性であるネットワーク化されたマルチユーザーゲームにどれだけ焦点を合わせているかを強調しています。

ゲームフレームワークの焦点の列は、本がゲームプログラミングを説明および開発するためにゲームフレームワークにどの程度依存しているかを強調しています。ゲームフレームワークは、すべてのゲームが実行する必要のある標準タスク(スプライト管理、画面の再描画、スコアの保持など)の多くを排除する最先端のゲームAPIです。

さて、本を詳しく見てみましょう。

Javaゲームプログラミングのブラックアート

Black Art of Java Game Programmingは、それらの聖書タイプの本の1つであり、全933ページです。この本は論理的に3つの部分に構成されています。

  1. 「Javaゲーム開発の基礎」
  2. 「高度なゲームとグラフィックスのテクニック」
  3. 「ゲームギャラリー」

パート1は、本の主な著者(Joel Fan)によって完全に書かれており、Java、オブジェクト指向、およびゲームプログラミングの基礎の3つの主題スレッドを、1つの明確で、さわやかで、一貫性のある全体に巧みに織り込んでいます。

パート2は、ネットワーキングと3D技術に焦点を当てています。 1つの章ではサーバー側のハイスコア管理システムを開発し、別の章ではチャットルームシステム全体を開発します。これらのシステムは両方とも、クライアント側とサーバー側のプログラム(つまり、アプレットとサーバー)を必要とします。 3Dを扱う2つの章だけが、本の中の本のように読まれます。110ページを超えるCalin Tenitchiは、すべての古典的な3Dの基本をくすぐり、2番目の章では、 App3DCore。公式のJava3D APIが間もなく登場するため、本のこの部分はまもなく部分的に廃止されますが、フレームワークの多くはJava 3Dよりも高レベルの側面を扱っているため、これは本の問題ではありません。とにかく、そのような3Dフレームワークの内部を説明することは非常に啓発的です。

パート3のゲームギャラリーには8つの章があり、それぞれがゲーム全体を開発しています。ゲームの洗練度はさまざまで、本のこの部分はかなり急いでまとめられているような印象を受けました。ただし、ゲームの個々の設計と実装は、(全体的に)本の他の部分と同じ高品質です。ベクターベースのAsteroidsクローン、オセロ、Webベースの麻雀、横スクロールの単語シューティングエデュテインメントゲーム、2つの異なる魔方陣ゲーム、そして古典的なワーム(または必要に応じてスネーク)ゲームの化身があります。 。

この本にはグリッチやエラーなどがないわけではありませんが(たとえば、1ページに信じられないほど壊れたコードリストが含まれています)、私はそれがとても好きでした。この本には多くの長所といくつかの短所があります。優れたプログラム分析と設計に強いです。(ああ!ゲームだからといって、これらの段階をスキップできると思ったのですか?間違っています。)この本では、さまざまな種類の図(オブジェクト図、クラス図、フローチャート、ステートマシン図、画面プロトタイプ図など)を非常に効果的に使用しています。 、およびほとんどのコードリストは非常に読みやすいです。(この側面は、文体と同様に、著者ごとに変動します。これは、複数の著者によって書かれた本の必然的な裏返しです。)

最先端のJavaゲームプログラミング

私は通常、「Advanced」、「Cutting-Edge」などで始まるタイトルには非常に懐疑的です。なぜなら、通常はそうではないからです。以下の場合、Javaのゲームプログラミング最先端、コリオリのマーケティング部門は、誇大広告何かをアップしませんでした:本は間違いなく初心者や中級レベルのJavaプログラマのためではありません。実際、この本の最初と最後の章を除くすべての章は、2つのゲームフレームワークの設計と実装の詳細で実用的な分析に専念しています。最初のフレームワークはシングルユーザー(スタンドアロン)ゲームに対応し、2番目のフレームワークはインターネットベースのマルチユーザーゲームを対象としています。

第2章では、再生可能でちらつきがなく、スムーズなアニメーションとサウンドを使用するAsteroidsクローン全体の完全な実装がパックされています。そして、それはたった250の奇数行のコード、つまりたった18冊の本のページです!したがって、この章では、ゲームフレームワーク、および一般的なフレームワークを使用することが、コードの再利用ではなく、デザインの再利用を強調することによって高レベルのプログラミング生産性を達成するための最良の方法の1つであることを誰にでも納得させる必要があります(ただし、その過程でコード)。

第2章がこの本の高品質の明確で有望な兆候である場合、第3章では、本のコアテーマである(非常に)適切に設計されたゲームフレームワークの詳細な調査を紹介することで、その印象を強化します。ちなみに、著者はCRC(Class / Responsibilities / Collaborators)カードとは何か、Boochクラス図の本質、およびオブジェクトメッセージの相互作用図について説明します。ちなみに、本の残りの部分ではこれらの強力なソフトウェアエンジニアリングツールを使用してテキストを拡張しているため、これはページの塗りつぶしほどではありません。

GameWorksと呼ばれるシングルユーザーゲームフレームワークは、俳優が住むステージの実証済みのゲームプログラミングメタファーに基づいています。この直感的な抽象化を使用して、古典的なボードゲームから高速でアクション満載のアーケードゲームまで、あらゆるタイプのゲームを実装できます。著者がカードゲームをゲームスタイルの例として選んだことに少しがっかりしました(アドレナリンが流れるようなものが好きです)が、それでもすべての標準的な問題とテクニックをうまく織り込んでいます(とりわけ:画像処理、入力管理、スプライト、最適化された画面更新、オーディオ、ランダム性、人工知能)。

この本はパーツを中心に構成されていませんが、構成されているはずです。第15章以降、明確な焦点の切り替えがあります。第15章「ネットワークゲームプログラミング」は、新しい著者が執筆を行うことで、より高いギアへの明確なシフトを表しています。ネットワークベースのゲームを取り巻く主な問題(接続トポロジ、遅延、ゲーム状態の同期)を紹介した後、この本は、古典的な戦略ボードゲームであるリスクのクローンを開発します(本ではドミネーションと呼ばれます)。支配は、ネットワーク対応のマルチユーザーゲームの一般的なクラスに対応する新しいゲームフレームワークを開発するための言い訳にすぎません。これらの最後の5つの章は困難であり、データ通信のバックグラウンドを持たない読者は、より技術的な議論に満足できないと強く思います。しかし、これらの章をスキップする方法はありません。これらには、ゲーム状態の非同期化と遅延の問題の重大な問題の非常に徹底的な処理と、ますます洗練されたソリューションが含まれています。

この本は、コードの最適化に関する章と、Javaで書かれた「Doom」クローンであるFREDの設計に関する興味深い章で締めくくられています。FREDはレイキャスティング(Javaではそうです)を使用して、その古典的な「Doom」の感触を実現します。このコアテクニックについて詳しく説明します。

要約すると、最先端のJavaゲームプログラミングは優れています。文章は明快で的確です。著者が開発するソフトウェアは非常に高品質です。リストは明確で読みやすく、あなたのことはわかりませんが、他の人のプログラムを15年間読んだ後、ソースコードの読みやすさを贅沢とは見なしていません)。

Javaエンターテインメントアプレットの開発

Javaエンターテインメントアプレットの開発は非常に残念な本です。パブリッシャーがJavaでのプログラミングゲームについて知っているすべてを詰め込むための400ページを提供した場合(わかりました、わかりました、「Java En-ter-tain-ment App-lets」)、繰り返し説明する章から始めません。ad nauseam、Javaの歴史。または、言語の基本(変数、Unicode、式、コメント、制御フロー、オブジェクト、クラス、パッケージなど)の完全に不要な再ハッシュである「Javaの基礎」(第4章)に進みます。著者はまだ、間違った主題に完全に焦点を合わせているのではないかと疑っています。そのため、第5章「より高度なテクニック」では、配列、ベクトル、文字列、例外、マルチスレッド、アプレットを使用します。少しだけ熱くなるのは、第6章「グラフィック、サウンド、イベント」です。しかし、ここでもゲームプログラミングへの参照を見つけるのは難しいでしょう。代わりに、貴重なページ不動産の些細な結果の13半ページのスクリーンショットよりも劣らず、あなたをもたらすことに専念しているdraw3DRect()drawOval()drawArc()など!

本の途中(第7章、219ページ)で、Javaゲームコードが最初に登場しました。この場合は、ソリティアカードゲームの試みです(カードゲームはシーズン中でなければなりません)。ゲームのデザイン、ゲームの実装、およびリストの読みやすさはすべて、このレビューの他の本の同じ側面と比較して非常に劣っているため、Javaエンターテインメントアプレットの開発に問題があることは明らかです。

著者によるいくつかの注目すべき発言、および明確な意味を持つ用語の一般的なだらしなさや誤用は、この本が出航する前に沈むのに役立つだけです。 AWTのレイアウト管理メカニズムは、次のように批判されています。「レイアウトの処理方法がかなり台無しになっています。意味がなく、正当な理由がないわけではありませんが、それでも台無しになっています。」 JavaのネットワーキングAPIも作者の好みではありません。「Javaがネット上の他の場所に接続する方法は壊れており、完全に使用できないわけではありませんが、現在の状態ではあまり機能していません。」奇妙なことに、私は他の人と私が同じAPI(Webクローラー、DAMPP-以前のJavaWorldへの参照については、以下のリソースを参照してくださいこれらのトピックに関する記事)。その最後の引用は、第8章「マルチプレイヤーゲーム」から出ていますが、それでもチャットアプリケーションの形で「ばかげた小さな例」(本を引用するため)が示されています。 (この本で飲み込むのが難しいと思う言語の他の例は、「頭の中でそれを固める」(p。283)、「ソケットに物を吐く」(p。284)、2つだけ引用することです。)

この本について何かいいことはありませんか?実際には、次のようなものがあります。第2章「ゲームデザインの原則」は、優れたゲームを優れたものにするための興味深い分析です。ここで著者は、適切に設計されたゲームインターフェイス、信憑性(リアリズムのレベル)、カスタマイズ可能性、AIなど、すべての優れたゲームが持ついくつかの側面を特定することで輝いています。次の章「ゲームデザインの実際」では、いくつかの実際のゲームを分析し、優れたゲームデザイン要素の使用に焦点を当てます。次に、Gamelet Toolkit(JavaCup International賞を受賞したMark Tacchiによって作成されたパブリックドメインゲームフレームワーク)の研究と使用に専念する1つの大きな章(第9章)があります。これらの3つの章は、それらが印刷された紙の価値がある本の唯一の部分です、私は恐れています。

Javaでインターネットゲームプログラミングを自分で教える

まったく同じカテゴリの本が2冊(またはそれ以上)になることはめったにないため、比較レビューは困難です。裏表紙によると、Javaインターネットゲームプログラミングを自分で教えると、「新規」から「カジュアル」のカテゴリのユーザーに対応します。言い換えれば、初心者。