そろそろ…
(ブログ開始時からカテゴリーは用意していたのに、全然書いていないもどーかと思ってはいましたが…(^^ゞ)
現在はC#の勉強を兼ねて、XNAで3Dゲームプログラミングをしています。開発時期は2007/04/16から開始しており、開発は仕事の休憩時間等を利用して、高橋名人ばりに「ファミコンは1日1時間!」ならぬ、「ゲームプログラミングは1日1時間!」みたいな感じで、ゴソゴソとコーディングをしている感じです。
最初はどのような3Dゲームを作ってみようかと考えたのですが、あまりコンセプトが浮ばなかったので、Sample Action Gameの3D版でも作ってみようと考え、今に至ります。
開発期間は設けておらず、「とりあえずSample Action Gameが移植できて、それなりに納得できるところまで作る」という感じで、且つ開発手法は俗に言う「プロトタイピング型」で開発しており、「とりあえず突っ走って作り、何度も後戻りをする」という、『趣味』ならではの作り方をしています。
折角Visual C#というリッチなIDE(って今も言うのでしょうか…)で開発をするので、2Dよりはスケールの大きいものを作ってみようかと思い、3Dゲームによくある「シーン デモ」とかを盛りこんでいます。
また、空間表現が2Dとは段違いな部分があるので、3D的なアクションを…ということで、今回はZ注目(ゼルダの伝説のアレですね)を活用して戦闘を行うようにしています。
現時点ではXNAにアニメーションライブラリがサポートされていないので、とりあえずこの辺は無視して作り始めていますが、現状ではステージ16までなんとなく作成してきています。
◇ ◇ ◇
とりあえずこのような出だしの日記ですが、将来はこの開発をメインのブログにしていこうと考えているので、「昔のゲームの想い出」のカテゴリーと並んで、「思いついたら、だらだらと書いて行こう」と思います。
まだプログラム自体は当面公開しませんが、文章だけでは寂しいので、現時点のスクリーンショットを載せながらやって行こうと思います。
![]() | ![]() | ![]() |
Sample Action Gameの紹介 [ステージ5]
今回はステージ5の紹介です。このステージは本ゲームで重要なステージの一つで、本ステージのアイテムを入手しないと話にならないという位重要なステージとなります。
ということで、ウォークスルーしていきたいと思います。
【ステージ開始マップ】
最下層をかなり占めてきました。
【宝箱】
このステージは最初から宝箱が出現しています。隣で炎が燃えさかっています。
開始地点のすぐ隣りでは滑車の音とともに床が上っているので乗っていきます。
プログラム的なこだわりとしては、このエレベーターの側に行くと効果音が鳴るようになっています。
また、滑車の鎖が滑かにアニメーションしています。ファミリーコンピュータ時代の背景処理と同様な処理を実現しています。
【スイッチ】
このステージにはスイッチが数カ所あります。スイッチは2種類の仕組みがあり、1つ目はエレベーターの上下の設定、2つ目は宝箱の部屋に行くためのエレベーターを起動するためのものがあります。
エレベーターへ行くためのスイッチは以下の2個所です。
【宝箱の前の炎】

触ると即死亡な炎です。
剣で払うとメッセージが表示されます。メッセージの通りたくさん炎を剣で払うと炎が消えます。
ここの炎もエレベーター同様、側に行くと効果音が鳴るようになっています。このような事は当り前といっては当り前ですが、大事だと思います。
【宝箱の中身】

宝箱からはメガネが入手できます。
このアイテムはPAUSEを行うと、そのステージの宝箱出現のヒントが見ることができます。
ヒントが無くても出現方法を知っていれば不要と言えば不要なのですが、このアイテムが無いと入手が困難なステージも存在するので、やはり入手は必須です。
アイテムを入手すると「PAUSEボタンを押してください」のメッセージが…

なにげない話なのですが、このメッセージの表示方法は種類程実装されています。
ステージ1の封印破壊時やステージドアを開いた時のメッセージは文字が浮びながらアニメーションして表示され、上述の「MORE ATTACK FIRE」のメッセージには、背景で文字が潰れないよう、文字に黒い枠が付いて表示されています。そして、この「PAUSEボタンを押してください」のメッセージは点滅しています。プレーをしている分には些細なことですが、このような表現によりユーザーの注意を引き付けられると良いな思い、実装しました。
メガネを入手してPAUSEをすると、このような画面が表示されます。
「このアイテムは後で必要になる」とのこと。

ちなみにアイテム入手前のPAUSEはこんな感じ。

このステージクリアにて、序盤の攻略が完了した感じです。基礎といったところでしょうか…
次のステージから、応用である中盤戦が始まります。
昔のゲームの想い出 [0010] 「メタルソルジャーアイザックII」 [タイトー] [1985] [アーケード]
このゲームは「ダライアスのBGMの一つである「CAPTAIN NEO」の原曲が流れる」、「諸事情から前作に当る「I」はリリースされていない」ということで割と知られているのですが(現時点ではコンシューマーにも移植されていますしね)、私にとってこのゲームというのは「隠しフィーチャーの条件がやたら高難易度である」という想い出が強いゲームとなります。
この時代、隠しボーナスやらミステリーボーナスなる用語で有名なものにスターフォースなどがありますが、当時知られていない最強のミステリーボーナスといえば、本ゲームが最強と思う位条件が厳しかったと記憶しています。
私の知っている高難易度のボーナスには、
1.ボディーを破壊されずに、ステージクリアで10,000,000点。
2.数種類のプレートと数種類のフラッグを出現させて100,000,000点。
「1.」でさえ、並の腕では達成できないのに、「2.」に至っては条件が凄く厳しいという洒落にならないようなことになっています。正直ミステリーと思わせる位です。
(だからこそ"1億点"という当時ではとんでもないボーナス点になっているとは思います。プログラム的な見解では「この8ビット時代にスコアを4バイトで表してるのか!?」位思ってしまいます。データ型の管理は違うとは思いますが…)
私はゲームセンターで知り合いになったゲームの上手な友人がこのフィーチャーを全て知っており、1億点達成等を見せてもらったことがあるのですが、正直「こんなのノーヒントで分る訳がない!」と思いながらも、「これが達成できて、且つみんなが認めれば、これはヒーローだなぁ。」と思ったりしました。
(2008年現在ネット検索をしてみても、この条件の詳細について紹介されている記事を見かけない位、伝説的な裏技となっている模様です)
ちなみにこの友人がどうやってこのフィーチャーを知ったかというと、知り合いに「ゲームフリーク(当時は同人サークル)のメンバーであり、ゲームセンターの店員をやっているという人」がいて、その人経由で修行をしたらしく、本ゲームの攻略は華麗なる物でした。その数年後、彼はこの達成感からか基板も購入していたのを見ると、「思い入れのあるゲームは基板を買いたくなるよなぁ」と共感しました。
◇ ◇ ◇
このゲームのように開発者のこだわりでマニアックな隠しフィーチャーが作られ、その情報を知って、それに到達したプレイヤーが最高の満足を得られる(そしてゲームセンターで他のプレイヤーからアドバンテージを得られる)という文化があったことは、この情報化時代ではなかなか無いもので、古き良き時代を感じさせてくれます。
Javaにおける2Dゲーム描画設計 (キャラクタータスクにビットマップ情報を持たせる)
今回は1/22に説明した、「キャラクタータスクに描画属性を持たせた設計」の描画情報の一つであるビットマップの説明をメインに行いたいと思います。
◇ ◇ ◇
さて、キャラクタータスクに描画属性を持たせた設計では、
【2Dゲームの開発の場合の情報】
・ビットマップ(これは1枚~n枚)
・アニメーション情報(現在何枚目を示しているか等)
ということを説明しましたが、このビットマップをJavaで実現する場合には、「Imageクラス」を用いることができます。ImageクラスはJavaの標準ライブラリで実装されてる高機能なビットマップ情報を保持するクラスとなります。
次にキャラクタータスクより派生したタスクにてアニメーションが行われることを考える場合、このビットマップ情報が複数必要になるので、以下の二つのアプローチが考えられます。
【アニメーションにおけるビットマップの保持方法】
1.ビットマップファイルをアニメーションパターン分作成して、その分のImageクラスを配列で持つ。
長所:プログラミングとは離れたレベルでアニメーションの管理を行いやすい。
短所:「2.」に比べてパフォーマンスが良くない。
2.ビットマップファイルを一枚のみ作成し、この中にアニメーション分のパターンを描いておき、
Imageクラスを1つ持つ。
長所:「1.」に比べてパフォーマンスが良い。
短所:アニメーションが追加された場合など、ビットマップの修正が場合により大変になる。

インターネットにて検索すると「2.」の方式を取るケースをが多く見受けられますが、これには長所/短所や好みがあるので、ここでは話がシンプルにしやすい「1.」の方式で話を進めて行きたいと思います。
(ゲーム上の表現にて大量の計算やメモリを必要とする場合にて、パフォーマンス優先するという場合には、「2.」の方法は必須と思います)
これをプログラムソースで表すと以下のようになります。
【単純なコーディング例(Java) 】
public class CharacterTask extends Task { // 画像集合(アニメーション対応) public ArrayList<Image> m_images = new ArrayList<Image>(); // 現在の画像(この画像が描画対象となります) public Image m_image; // アニメーション画像インデックス(現在どのアニメーションを差しているか) public int m_animeIndex = 0; // アニメーション画像待ち時間(何フレーム後にアニメーションを切り替えるか) public int m_animeWait = 0; public int m_workAnimeWait = 0; } |
この中の"m_images"がアニメーション用のビットマップとなります。
実際に描画を行う対象のImageクラスはメンバ変数"m_image"が、対象となることに注意してください。
これはアニメーションを行わないタスクの場合を考慮してこのように設計しています。

まずはここで説明を一区切りとして、次回はこのImageクラスにビットマップファイルを設定する説明をしたいと思います。
実際に画面に描画されるまで道のりはまだまだですが、一つずつ説明していきたいと思います。
昔のゲームの想い出 [0009] 「魔城伝説II ガリウスの迷宮」 [コナミ] [1987] [MSX]
MSXでリリースされたこのゲームは、ポポロンとアフロディーテを交互に操り大迷宮を探索しながら、更に10のボスのいる迷宮を攻略していくアクションRPGです。
このゲームは全体を通して非常に難易度が高い上に、アイテム情報のヒントがとても少なく、私はMSXの雑誌の攻略記事でなんとかクリアしたという想い出があります。
この攻略雑誌は後輩の友人(=知り合いではない人)の家に出向き、お願いしてレンタルしたという想い出があり、それ位なんとかしてクリアしたいと思わせたゲームでした。
特にクリア条件に必要なものは、私の場合は雑誌の攻略法なしではまず入手が無理という状況でした。
しかし、クリアしてからというもの、広大なフィールドにおける大ボリューム、アイテム数、ボス戦のセンス等、どれをとっても秀逸で、「トップビューならゼルダの伝説」「サイドビューならガリウスの迷宮」とまで思うようになりました。
この時代、コナミはものすごくアイテムを入手するゲームを制作してきていますが、このゲームもそれに当てはまり、ガリウスの迷宮は40以上あるアイテムが登場し、どれも無駄にならずに活用することができます。これはとても凄いことだといまだに思っています。
また各ボスが非常に個性的であり、且つどのボスも非常に強力というのも、この時期では類を見ないものでした。
プログラム的な見解では、これらボス本体はスプライトを使用せずに全てBGで描画処理されているのですが、とてもパワフルな処理を行っており、殆どのボスが大柄で色々なパターンで描画されるので、ある意味当時のアーケードゲームのボスキャラよりも存在感がありました。
このため、「どうにかしてこのゲームのボスを全て拝んでエンディングを見たい!」と思い、少し攻略してはパスワードを控えるという行動を取り、気がついたら何十個というパスワードがメモ書きされていてたという結果になりました。
パスワード式の場合、色々なステータスで再現できるので、「今日はこのボスで遊んでみよう。」というような事ができ、慣れてくるとちょっとしたステータスのチョイスで各ボスに会えたのが楽しかったです。
◇ ◇ ◇
このゲームのように広大なフィールド、大量のアイテムを実現してもゲームバランスが飽和しないということは、とても素晴しいと感じます。
また、アイテムの中に「短剣」があるのですが、入手後に画面にコウモリがいるステージにて「umbrella」と入力するとコウモリが全滅するという、キー入力ができるMSXならではの楽しいなフィーチャーがあるのですが、このアイテムを駆使していたお陰で"Umbrella"という単語が頭に残るようになりました。

Sample Action Gameの紹介 [ステージ4]
ということで、ウォークスルーしていきたいと思います。
【ステージ開始マップ】

城の中にかなり入ってきました。
【ゾンビ出現】

天井からゾンビが2体降りてきます。そして2体が同時に近寄ってきます。
ゾンビはかなりの体力があるので、何度も切りつけて倒してください。
【ゾンビの攻撃】

ゾンビはゆっくり近づいてくるので、体当たりはまずされないと思いますが、定期的に自らの肉片を投げてきます。そして、この攻撃が本ステージの一番の難所となります。
肉片は投げる際に手を振ってくるので、この手の動きに着目します。こちらの攻撃の際はゾンビの側にいるので、立ち防御でこの肉片を受けます。逆にゾンビの遠くにいる場合は遠くから放物線状に肉片が飛んでくるので、真上にジャンプ、または少し後ろに下って肉片をかわします。慣れるまで練習してみましょう。
また、アクションゲームが得意な方でも、このステージまでに凡ミスをしてしまった場合を考慮して、救済が可能なポーションが配備されています。
ポーションはライフゲージ3つ分のライフ回復をするので、腕に自身がある方はゾンビを倒してから受けたダメージをポーションで回復するのが良いと思います。
【宝箱】

ゾンビを倒した後、ある条件をクリアすると宝箱が出現します。
デモプレーにて条件を披露しているので、デモプレーを見てください。
宝箱からはライフゲージの上限枠が1つ上るアイテムが出現します。ライフゲージが1つ違うだけで、今後生死の境が決まる場合もあると思うので、このステージのアイテムを是非取得を心掛けると良いと思います。
またこの時点でポーションを取ればライフが満タンになると思うので、プレーに慣れている方は、この攻略をオススメします。
ステージ4は本ゲームの操作や雰囲気に慣れないと、自機を簡単に失う可能性が高いステージになると思います。
まだ最初のステージなので、コンティニューを何度行っても繰り返しやすいと思うので、今後のステージのためにも動体視力を上げられると良いと思います。
描画の設計 (基礎設計)
今回からしばらくの間はこれらを抽象化したレベルの設計(つまり共通で検討できる内容)を説明し、その後に別カテゴリにて言語別に説明ができれば良いなと思っています。
【流れ】
本カテゴリー
「ゲームプログラミング [共通] 」
にて概要設計を説明。
↓
別カテゴリー
2D→「ゲームプログラミング [Java] 」
3D→「ゲームプログラミング [XNA] 」
にて具体的な設計を説明。
という感じでしょうか。
◇ ◇ ◇
さて、抽象化レベルでの描画の設計というで、どのように検討すべきかを考えると、まず描画というのは、
・なにかしらのイメージを画面に表示する。
・イメージを表示する場所は演算の結果(タスク処理の結果)を元に表示する。
・内容によっては表示しなくても良いものがある。
・描画するものはできるだけ一括で描画した方が理解しやすいし効率が良い。
という事柄があると考えられます。
この事から2008/01/04にてイメージで表わしたように、

タスク(集合)処理の後に描画処理を行うのがと良いと考えます。
そして前回「キャラクタータスクに描画属性を持たせた設計」にて説明したとおり、描画属性を持つキャラクタークラスから派生したクラス(タスク)のみを描画対象とし、そのクラスが持つ描画情報を描画するという設計を行えば良いと考えます。
次に一括で描画する仕様を考案するのですが、単純にタスク集合の配列を走査してキャラクタークラスより派生したタスクを順番に描画するという考え方もあるのですが、これだとタスクが配列に登録された順番となり、優先順位を持つことができません。

※これは特に2Dのゲーム描画の際に如実に発生します。
3Dの場合はZソート、Zバッファの考え方があるので、このイメージとは考え方が異ります。
これをタスク集合の配列の登録順序を変更して実現を行うという仕組みを検討する方法もあるのですが、できるだけタスク処理と描画処理とは関係を切り離したいことから、描画専用の配列を用意すると関係を切り離すことができます。
この配列を実現した場合、配列への登録タイミングと抹消タイミングは、タスクの登録、抹消タイミングと同じで構わなく、タスクの実行中などに任意に順序を切り替えることができる仕組みを導入します。
これをイメージすると以下のような設計になります。

タスクの登録はJavaやC#の言語にある「関数のオーバーロード」として作成すると、シームレスに登録が実装できます。
単純なコーディング例(Java)
// タスク管理 // 描画管理 // タスクの登録 // キャラクタータスクの登録 } |
この例では、タスク管理クラスのaddメソッドにより、キャラクタータスククラスより派生していないタスククラスは「タスクの登録」のメソッドが呼び出され、キャラクタータスククラスより派生しているタスククラスは「キャラクタータスクの登録」のメソッドが呼び出されます。
後者の場合は、タスク管理クラスの登録と同時に描画管理の配列"DrawManager"に登録されます。
このDrawManagerは描画処理時に参照され、描画対象となるタスクを描画します。
もしも描画の順序を変更したい場合はこの配列の中に登録されているタスク情報の順番を変更すれば実現が可能となります。
次回は2Dの描画処理設計をJava言語を基に説明したいと思います。
昔のゲームの想い出 [0008] 「オーダイン」 [ナムコ] [1988] [アーケード]
ナムコ SystemIIマザーボードの第2弾ゲームとしてリリースされたこのゲームは、回転・拡大/縮小を駆使して表現された横スクロールシューティングゲームです。
私はこの機能をSystemIIの第1弾のアサルトからゲームセンターで見てはいたものの、アサルトは回転拡大縮小がゲームのメインシステムとして綺麗に組みこまれていたおかげで、あまり気がついていませんでした。しかし、このオーダインは1面の巨大戦艦ボスを倒した時等に派手に回転して沈没とかしていたので、「こ、この背景(のボス)はBGパターンでなくて、演算して回転させてる!! こーいう表現もあるんだぁ~!」と、ビックリしたことがあります。
それからというもの、「この先はどんな見せ方をするんだ?」とハマってしまい、気がついたら1コインクリアを果していたという流れとなりました。
ゲームバランスとしては、ストックボンバーが無いと正直悲惨な状況に陥りやすいバランスだったり、逆にストックボンバーさえあればボスが瞬殺だったりと、考えさせられるものではあったのですが、それを上回るビジュアル、演出、BGMなどが重なり、これらの魅力が何度もプレーさせる要因となって、クリアまでやりこむことになりました。
そして動体視力さえよければ、空中福引所であるDream Co.ltdにて、目押しで好きなアイテムをゲットできるので(といっても、基本はストックボンバーだけを望んでいましたが)、「今回のプレー運勢」を占うかのように目押ししで当てたりして楽しむことができました。
個人的にはビジュアル面で「雲の描画がとても綺麗な印象的」で、夕焼けの雲を見ると常にオーダインのボスラッシュ面を思いだす程、脳裏に焼きついています。
また、BGMが秀逸で、FM音源YM2151とPCM音源を駆使した細江慎治さんのメカニック質を想像できるBGMは、この作品が最高と感じます。

拡大・縮小/回転/YM2151搭載の神基板。System II
◇ ◇ ◇
このゲームに出会って、「熱い弾よけのSF風な硬派シューティングゲームでなくても、ビジュアルを前面に押し出して、プレーするたびに綺麗だなぁ、お洒落だなぁ、しかもBGMがいいなぁ~」と思わせる「モード系のようなゲーム」があることを考えさせられました。
(※注)とはいっても、ストックボンバーさえ装備しなければ、後半は熱い弾避けゲームになります。正直「避けられないんじゃないか?」位の…)
Sample Action Gameの紹介 [ステージ3]
ということで、ウォークスルーしていきたいと思います。
【ステージ開始マップ】

少し城の中に入ってきました。
【グリーンスライム】

スライムがステージをウロウロしています。
スライムはしゃがんで攻撃します。スライムはランダムに左右に移動するものと、自機向ってくるものがいるので、よく見て行動しましょう。
画面の最上部に鍵が落ちているので、これを取得して下の段に戻ります。
【レッドスライム】

鍵を入手するとレッドスライムが出現します。
レッドスライムは定期的にファイアボールを打ってきます。ファイアボールは前面のウィザードとは違い、しゃがんで防御します。
下の段のスライムほど、ファイアボールを打つタイミングが速いので気をつけてください。
【宝箱】

グリーンスライム、レッドスライムを全滅させると出現します。
コンティニューを一回分増やす金貨が入っています。ステージが進むとゲームオーバーになりやすいので、入手しておくと良いと思います。
ステージ3もまだまだ小手調べといった感じです。
スライムは一番のザコキャラではあるものの、当るとライフゲージが1マス分減るので、以外と侮れません。
キャラクタータスクに描画属性を持たせた設計
登場人物は画面で描画されて初めて意味があるものとなり、これが実現されると可視的に「登場」することができます。
この考えを設計に用いると、キャラクタークラスから派生されたクラスは「描画されるべき対象となるもの」という設計にすることができます。
そして、このクラスから派生した、"自機"や"敵"はその性質を受け継ぐことになるので、「画面に描画される(登場する)」ことになります。
一方「ステージ管理」クラスのような、画面に表示されなくても良い「裏方」の場合は、キャラクターから派生せずに設計することで描画が行われることが無いものと考えることができます。
(舞台などで考える「裏方」のようなものです)
このように、まずは画面に表示される/されないという属性を派生により実現し、表示する(描画される)側は、これら描画に必要な情報を持つといったことを設計します。
次に描画される側として何の情報を持って描画すべきかという設計になるのですが、これはゲームの内容や表現方法により決定され、おおよそ以下のようなものに分かれると思います。
【2Dゲームの開発の場合の情報】
・ビットマップ(これは1枚~n枚)
・アニメーション情報(現在何枚目を示しているか等)
【3Dゲームの開発の場合の情報】
・モデルデータ(これは単純な物の場合は1つ)
・アニメーション(モーション)情報
【共通で必要であろう情報】
・描画する大きさ(どの程度の大きさで描画するか)
・中心座標(このキャラクターが存在する位置)
・ヒットする領域(描画している表現とは別に、どの程度の大きさで当たるか)
・表示の可否(表示したくない場合などに使用)
これらの情報がキャラクタークラスに存在し、派生したクラスはもれなくこの情報が継承されることになります。
そして派生したクラスはこれら情報をリアルタイムに演算し、座標の位置などを変化させて、まるで生きているように動かします。
これらの情報を描画するのは、今後説明する描画処理にて行われ、キャラクタークラスから派生したタスクは、目に映らない中の情報を変化させることのみを行います。
(タスク処理と描画処理との分業となります)

昔のゲームの想い出 [0007] 「ペンゴ」 [セガ] [1982] [アーケード]
ペンゴはアイスブロックでスノービーという敵を倒す面クリアタイプのゲームで、プレー感覚としては非常にシンプルなゲームとなります。
しかし、シンプルながらも様々なフィーチャーや戦略があるとても奥の深いゲームとなり、プログラマーとしてこのゲームを分析すると、隅から隅まで練られに練って作られたゲームとしか思えないような出来となり、「もしもこれで数面おきにボス戦とかあれば、現時点(2008)でも通用するのでは?」と思える程、フィーチャーや表現が数多く存在します。

Sample Action Gameの紹介 [ステージ2]
実はこのステージも後で重要となるステージとなり、ここのステージの画面からある展開が起きるようにデザインされています。
ということで、ウォークスルーしていきたいと思います。
【ステージ開始マップ】

森を越えて、城の中に侵入します。
【入口】

中に入って行くと、このステージの戦闘開始です。
【ウィザード出現】

自機を待ちかまえています。
ここで画面のスクロールが停止して、戦闘となります。
画面には表示されていませんが、画面の両サイドで壁が閉ります。
【ウィザードとの戦い】

ウィザードは画面内をワープしながら、杖を上げるとファイアボールを打ってきます。
ファイアボールは立っている時の盾の高さと同じなので、剣を振らずにそのまま受ける事ができます。
しかし、真上にジャンプして避けることもできます。
【ウィザードを撃破】

ウィザードを倒すとクリアキーが出現します。
この時点で条件をクリアすると宝箱が出現します。
デモプレーにて条件を披露しているので、デモプレーを見てください。
【宝箱】

1UPのアイテムが出現します。1コイン(ノーコンティニュー)を目指すなら是非とも入手したいアイテムです。
ステージ2は短時間でクリアできるので、ガンガン進んで行きましょう。
また、画面デザインとしてのこだわりなのですが、自機の残機をアイコン形式にしています。
残機を単純な数字で表現するよりも、アイコン表示をすると、「なんとなく画面がリッチになる」気がしたというのが理由です。この後自機がパワーアップすると外見が変化するのですが、このアイコンもそれに伴い変化するように作りました。
タスクの派生設計
この継承を用いると、後にゲーム開発を行う際、非常にシンプルに、しかも処理の流用が行えるようになります。
例をインベーダーのようなシューティングゲームとして、自機、自機の弾、敵、敵の弾、爆発、ステージ管理といった、幾つかのタスクを考えた場合の派生設計をしてみましょう。
ここで前提として、自機・敵の弾は真っ直ぐ飛ぶものとし、ステージ管理というのは敵が全滅したらステージクリアというようなものとします。
派生図で表すと以下のようになります。

ここで、上述のタスククラス以外に「キャラクター」「弾」というタスククラスがあるかと思いますが、これらは派生先のクラスが共通して使用できる処理を実現するための設計となります。
このように共通となりうるもの、しかしそのクラスが持っている基本的な質(事象)が変化しないものは、基底クラスとして設計しておくことにより、将来新しいクラスを追加する際に簡単な派生をするだけで、追加のクラスを設計することが容易となります。
例を考えるとすると、「敵クラス」に将来、「ザコ」や「ボス」といったタスク(クラス)を追加したいと考えた時、当然動作などが変化する訳ですが、「強さは違えど敵は敵」ということより、敵タスクから「ザコ」「ボス」を派生させて作成し、これらの動作をそれぞれ派生先で実現すれば、良いだけのものとなります。
また、上の図では「敵の弾クラス」がまっすぐ移動する「弾クラス」から派生していますが、これを将来「自機に向って飛ぶ」ように改造したい場合は、「弾クラス」とは別に「指定の相手に飛ぶ弾クラス」を作成し、このクラスから派生しなおすようにすれば、敵の弾はまっすぐから、「指定の相手に飛ぶ弾(指定の相手は自機)」に変化します。
このようにクラスの継承を活用して設計を行うと、ゲームのシステムを様々な形でカスタマイズしやすくなり、また流用を多岐に行えるために、プログラムのボリュームを抑えてプログラムを作成することができます。
昔のゲームの想い出 [0006] 「ギャラガ'88」 [ナムコ] [1987] [アーケード]
No.0005 にてマリオブラザーズの想い出話をして、「アーケードゲームの方が移植作品よりも最強!」のように書きましたが、移植の方が個人的に良いという作品もあったので、想い出話として語りたいと思います。
PCエンジン版のギャラガ'88 は、アーケード版の次の年に発売されたナムコットブランドのゲームなのですが、この移植は制約のあるハードウェアの中で非常によくできたアレンジを行っており、個人的には正直「アーケード版よりもお手軽でプレーしやすい難易度」という「プレーしていて楽しい」という気分にさせてくれたゲームでした。

PCエンジン版のギャラガ'88
私の中では「ナムコットはアーケードの完全移植をハナから捨てている。」という偏見があるのですが、このタイトルはまるでそれを逆手に取ったようにキレイに別ゲーム(は言い過ぎですが…)のようなプレー感覚を表現したように感じました。
どのように違うと感じたかというと、例えば画面の比率は家庭用テレビのために少し横幅であるために、敵との距離が近い分、敵の弾の速度が少し遅い、弾の量が多少少ない、敵が遅いというものが挙げられます。様は「難易度が低い」のです。
では、なぜ難易度が低いだけで別ゲームのように感じるかというと、テンポの感覚がかなり心地良いのです。アーケード版の場合は、弾が多い、弾が速い、敵が速いということから、常に緊張感が高いのですが、PCエンジン版の場合は、それがかなり少ない上に、敵との距離が近いために、バリバリと敵を倒している状況になります。
このテンポがかなりの爽快感を引き出しているように感じました。このお陰で、少し気を引き締めればクリアも容易で(しかし後半は分岐によりそれなりに高難易度にはなります)、クリアタイムも30分そこそそこ…というお手軽感。そして家庭用のゲームなので、最初のステージとかで死んでしまっても、すぐにリセットして何度でも気兼ねなしにプレーしなおせる。というシンプルなシューティングという意味では、かなりの良ゲーのような性質を持っています。
このゲーム発売後は割とマイナーなゲームに評価されていたせいか、発売日からそれ程経過していないにも関わらず、すぐに値が下ってしまい、私は1,500円程度で購入しました。しかし、家庭用で「ちょっとした時間にシューティングをプレーしたい」という時には、ものすごく遊べるゲームでしたので、「こんなに安く買えたのに、なんて楽しいんだ!」と、とても幸せな気分にさせてくれたゲームでした。
しかしその更にその後、やはりというか、評価されなおしたようで、中古屋などでは高値で売っていることを確認し、「やっぱり評価されたんだなぁ。」と納得したりしました。
このような家庭用ゲームにて完全移植ができなくても、アレンジ次第で良ゲーに化けた(と私は思っています)ソフトもあるというお話でした。
Sample Action Gameの紹介 [ステージ1]
また後日紹介することになるのですが、このステージはゲーム上で重要となるステージでもあり、ステージ1とはいえ割とボリュームがあります。(^^;
ということで、ウォークスルーしていきたいと思います。
【ステージ開始マップ】

森から始まります。
【マグマを通れるようにする封印】

森に配置されている封印を3つ破壊します。
ちなみにプログラマーの方なら「おっ。」と思うように、森は二重スクロールしています。
バックグランド処理は"自機が隠れる手前の草"、"自機のすぐ後ろの森"、"奥の森"と3重背景処理をしています。
【封印を破壊】

封印を破壊すると島が流れてくるので、これに飛び乗ります。
アクションゲームが苦手な方はここで挫折しますwww
【金色のコウモリ】

金色のコウモリを倒すとこのステージの宝箱が出現します。
プログラミングテクニック的には、ここのマグマも全体的にアニメーションさせています。
【ボス戦】

ステージ1のボスとなる城の門番サイクロプスです。
ここのスクリーンショットは魔界村を彷彿させます。
…が、攻略はまるで別物です。立っている時は腹部を、しゃがんでいる時は頭を狙います。
【宝箱】

宝箱の中にはベルが入っています。
このアイテムにより、今後の宝箱の出現時にメッセージが表示されます。
【ステージクリア】

ステージクリアは鍵を用いて扉を開けて、そこに入ります。
まずは手慣らしという感じです。これから長いウォークスルーが始まります。
昔のゲームの想い出 [0005] 「マリオブラザーズ」 [任天堂] [1983] [アーケード]
ファミリーコンピュータで有名、主人公も世界的に有名なマリオ、ルイージを操作して、出現する敵をひっくり返して画面下の水路に落す面クリアタイプのアクションゲームです。
私の中では「マリオブラザーズ」といえば、スーパーマリオブラザーズはもとより、ファミリーコンピュータの方でもなく、「アーケードのマリオブラザーズ」が一番に思い浮びます。
タスク処理の設計
"タスク"というとコンピュータ業界ではとても抽象的で高度な処理と考えがちですが、ここでいうタスクとは「ゲーム上、実行する最も単純な処理」と位置付けます。
では、この実行とは何かというと、これはゲーム上で実行されるものであれば何でも良く、よくあるシューティングゲームでいえば自機となるシップ、アクションゲームでいえば主人公となるキャラクター、また画面上に表示される敵、敵の弾が"実行"されて動いています。
また、これらは画面上で目に見えたりしていますが、あまり意識しないもの等もタスクとして考えます。例えばフェードイン/アウトの処理、これも徐々に暗く(明るく)なっていく一つの「実行」となります。また、シューティングゲーム等によくある、「数秒後(数フレーム後)、もしくはある場所まで来たら、ボスを表示させる」というような処理も、ある意味「実行」の単位として扱うことができます。
ようは変化のあるもの('=, タスク)位と考えます。完成されたゲームをお手本によく分析してみると、変化のあるもの全てがタスクとして分解できると思います。
さて、ではどのようにタスクを実装するかというと、まずは基底クラスをタスク(実行単位)として表現し、ここから各実行すべきもの(自機等)を派生させる形となります。
雰囲気でいうと以下のような感じです。
単純なコーディング例(Java)
// 基底タスク // コンストラクタ // タスクの初期化 // タスク実行 // 例えば自機クラス(Taskクラスからの派生) |
これら実行すべきタスクとその派生クラスを設計したら、次はこれらをフレームワークとして実行する処理を検討します。
実行する処理は配列や、C++, Java, C# などのどの言語にも存在するコンテナを用いて集合管理し、この集合に登録されたタスクを一つずつ実行するという方法を実現すると、シンプルな実行処理を実現することができます。
具体的に説明すると、「集合管理された、基底クラス(タスククラス)から派生した実行処理クラス(自機等のクラス)の実行メソッドをポリモーフィズムにより動的に実行させる。」ということになります。
よくある面クリアタイプのゲームや、シューティングゲームを設計するとしたら、この方法が一般的かと思います。
この管理処理をメインループで呼び出せば、タスクの実行を行うことができます。
単純なコーディング例
// タスク管理 // 登録されているタスクの実行を行います // もしも消滅状態の場合はタスクを抹消します // タスクを実行します(ここでポリモーフィズムによる派生先のタスクが実行されます) |
まずは単純な説明はここまでとして、将来はこの基底クラス(基底タスク)からどのように、クラス派生を行うべきかを説明したいと思います。
Sample Action Gameの紹介 [ステージ1~5の宝箱攻略]
このSample Action Gameというのは、プロフィールにもあるように
https://gamedevelop.web.fc2.com/SampleAction/
にて公開している、「80年代に制作されたレトロゲームを尊敬して作られたアクションゲーム」となります。
起動方法やゲームの内部詳細は、公式サイトや、本ブログのプログラミングネタの方に譲るとして、ここでは「本ゲームの見どころ、制作者としてのこだわり、ゲーム攻略」等をつらつらと記述していこうと思います。
(このことから、日記としてはそれ程長期には渡らないものとして考えています)
ということから、まず第一回目は攻略から行ってみようかと思います。
本ゲームは全ステージに宝箱(アイテム)が出現するのですが、この出現方法は各ステージで違います。
出現方法のヒントはステージ5の宝箱から入手できるアイテムを用いればおおよそ理解できるのですが、それ以前のステージ1~4は、プレー中にはヒントがありません。
しかし、この宝箱の出現方法はデモプレー(タイトル画面でしばらく入力しないで放置していると始まります。最初は操作方法、その後からステージデモとなります)を見ているとヒント(というよりも出し方)を教えてもらえるようにしてあります(注:1~4を全て網羅している訳ではありません)。
このゲームは難易度をそこそこ高くしている(つもり)なので、最初のステージの宝物は後々のためにと思い、このようなものを用意しました。
【ステージ1】
出現方法:公式サイトのプレイングマニュアルに出現方法を記述しています。
アイテム:ベル。宝物が出現するとメッセージが表示されます。画面の外で出現したことが分ります。
【ステージ2】
出現方法:デモプレーにて出現方法を披露しています。
アイテム:1UP。自機が1機増えます。
【ステージ3】
出現方法:スライムを全滅させる。これは後から出現するレッドスライムも含みます。
アイテム:1 Continue。コンティニュー回数が1つ増えます。
【ステージ4】
出現方法:デモプレーにて出現方法を披露しています。
アイテム:ライフゲージが1つ増える。
【ステージ5】
出現方法:最初から出現しています。デモプレーにて入手方法を披露しています。
アイテム:PAUSEを行うとそのステージの宝箱の出現方法のヒントがメガネの中に映ります。
意外とプレー進行を優位にするアイテムが多いので、是非入手して行きましょう。
昔のゲームの想い出 [0004] 「テレビブロック」 [エポック社] [1979] [テレビブロック]
テレビブロックは「現在では当り前のROM交換式のコンシューマーゲーム機と違い、本体=1つのゲーム」という時代のゲーム機です。
このゲームは名前の通り(?)ブロック崩しのゲームで、7種類のモードに更に4つのレベルが選択できるという、当時のブロック崩しとしては、かなりの至れり尽くせりな仕様となっていました。

私はこのゲーム機が家庭用テレビゲーム機所有のデビューとなり、プレーするきっかけは「父親に『学研の電子ブロック』が欲しいと頼んでいたのに、『エポック社のテレビブロック』を買ってきてしまった。」という勘違いから、仕方なくプレーすることになったというのがきっかけです。
私は当時、テレビゲームにはあまり興味がなかったのですが、プレーしていくうちに「何故、このような表現がテレビでできるのだろうか?」と思うようになり、徐々にこのゲームで表現される、ボールの処理に目が行くようになりました。
このゲームはブロック崩しをメインに押し出しているのですが、モードによりバスケットのゲームがあり、従来のブロック崩しでいう所の反射に加え、「重力」が導入されているという部分があり、この処理が私にはとても新しく、しかも不思議な感じに見えました。
(とてもなめらかに重力がかかり、まるで本物の玉がそこにあるかのように見えました)
この処理を見てから、「将来自分もこのようなものが作りたい」と思い、徐々にテレビゲームの世界にのめり込むようになり、今の自分がいるという次第です。

重力処理がかなり凄いバスケットゲーム
このゲームは4年位所持していたのですが、ある日プレーしようとしたところ急に画面が映らない現象が発生し、配線をテレビの後までたぐったところ、家に放し飼いにしていたウサギに配線をボロボロに噛み切られていたという惨事になりました。
慌てておもちゃ屋に修理を依頼したところ、「もう古くて修理のサポートはしていない」と一蹴されてしまい、「もう十分遊んだから、もう卒業かな…」と思い、破棄をすることになりました。
この事から得た教訓は「家に動物を放し飼いにする時は気をつけよう」でした。

これは二号機w
家に動物を放し飼いしてますね(^^;
猫はダンボールとかカジるので注意が必要です…
このゲームのリリース時期は、他にもブロック崩しのゲームがありましたが(任天堂のTV-GAME 15等)、バスケットボールモードのような一味違う処理があるだけで、技術力にアドバンテージがあるように見えたので、「似たようなものが複数ある場合は、ソレにしか無い味を出す」というのは素晴しいことだと思います。

他にもピンボールゲームとかもあります。とても至れり尽くせり!
XNAにおける入力情報の保持
また、XNAではキーボード情報を取得することが行えるため、入力系統はXbox 360コントローラーとキーボードとなります。
このことからシューティングゲームやアクションゲーム等を開発する際には、メイン入力はXbox 360コントローラー、サブ入力としてキーボードという設計にするのが融通が利いて良いかと思います。
入力情報はMicrosoft.Xna.Framework.Inputのネームスペースに全て集約されており、この中にキーボード情報を保持するKeyboardクラス、コントローラー情報を保持するGamePadクラスがあり、これらを用いて入力情報を取得することができます。
入力情報はJavaのイベントと違いリアルタイムに取得することができるため、タスク処理(キャラクター処理)中に本クラスにアクセスすれば状態が分ります。
入力情報の取得は例として記述するとこのような雰囲気です。
キーボードの入力情報の取得
KeyboardState ks = Keyboard.GetState(); if (ks.IsKeyDown(Keys.Up) == true) |
Xbox 360コントローラーの入力情報の取得
// コントローラ1からの状態取得 // 左スティック // ボタン A |
このように入力情報の取得方法は非常にシンプルです。
…が、本格的にゲーム設計をすると、以下の事を考慮することになります。
1.もしもコントローラーが装着されていない場合はキーボード入力を優先する。
2.ボタンが押下されている時と離されている状況を判断するケース(PAUSE機能の
ようなトグル状況)をサポートする場合は、その状態を保持するようにする。
3.キーボードの方向から、アナログスティックの状態に変換する。
等がまず容易に想定できます。
特に「3.」に関しては重要で、XNAのメイン入力はおおよその場合、方向入力はアナログスティックとなり、情報はVector2クラスのflortデータとなります。上下左右を例に取ると上は1~下は-1となり、左は-1~右は1となります(何も入力されていない場合は全て0となります) 。
キーボードの場合はデジタル入力となるので、単純変換の場合は、上下左右を1,-1,-1,1に変換する必要がありますが、そうでない場合は手前でキーリピートのタイミングと場合により何フレームのタイミングで上昇下降を計算するようにプログラミングしなければなりません(あまりそのような設計にはしないとは思いますが…)。
これらの事から、上述にて「タスク処理(キャラクター処理)中に本クラスにアクセスすれば~」云々と述べましたが、それはあまり現実的ではなく、実際には入力処理用のクラスを設計し、入力状況を管理する設計が望まれます。
イメージはこのような感じです。

Javaにおける入力情報の保持
Java(JDK 1.5.0_xx)の標準ライブラリにはWindows上のジョイパッドのサポートが行われていません。このため入力はマウス、またはキーボードとなります。
私はマウスで操作するゲーム作りの経験がないので、ここではキーボードのみに話を限定して説明します。
(実際"イベント"としての考え方はキーボードもマウスもそれほど違いがありません。キーボードにはキーリピートの概念がありマウスにはない、マウスにはマウスポインタの座標があり、キーボードにはないという感じです)
Javaの場合はキーボード入力が行われると、ウィンドウやアプレットにprocessKeyEventというイベントが発生し、このイベントの引数に入力されたキーの情報が格納されています。
このイベントはゲームのメインループとは別のタイミングで発生し、タスク処理(キャラクター処理)中にどのようなキーが入力されているか判断できません。そこで、ゲーム処理としては、この情報はこの時点では保存しておくなどして、後のタスク処理などで参照できるようにしておきます。
また、アクションゲームのようなゲームは右左が同時に入力されるというケースは、あまり好ましくないことがあるので(レバーで考えると、左右同時入力はありえないため)、このような制御をここで行っておくと、タスクの方は意識しないで入力された状況を判断することができます。
例として記述するとこのような雰囲気です。
/** // キー押し下げ状態 /** : /** case KeyEvent.VK_DOWN: case KeyEvent.VK_LEFT: case KeyEvent.VK_RIGHT: // ボタン 1 // ボタン 2 // ボタン 3 // SELECT // START // キーアップイベント case KeyEvent.VK_DOWN: case KeyEvent.VK_LEFT: case KeyEvent.VK_RIGHT: // ボタン 1 // ボタン 2 // ボタン 3 // SELECT // START |
昔のゲームの想い出 [0003] 「2010ストリートファイター」 [カプコン] [1990] [ファミリーコンピュータ]
開発はステイタスというところが行っている、かなり硬派なアクションゲームです。
タイトルからすると対戦ゲームっぽいのですが、面クリアタイプのアクションゲームです。
ゲームの仕様としては、各ステージにいる敵やボスを倒し、その際出現するオープンパワーというものを集めて、満タンになると出現する次元ドアという所から脱出するとクリアといったものとなります。
このゲームはアクション性、ステージ表現のどれを取っても上質で、ファミリーコンピュータのアクションゲームの中ではトップクラスに入る出来と思っています。
難易度は人によるとは思いますが、かなりの高難易度とネット上などでは言われており、クリアが困難と思われがちなのですが、ステージ仕様の把握、自機のテクニックをマスターしていくことにより、1機でも問題なくクリア可能なバランスとなっています。
このゲームの素晴しいところは、ステージデザインとボスデザインが挙げられます。これはデザインと言っても、グラフィックはもちろん、ゲームデザインが秀逸で、全19面のどのステージも多彩な表現で飽きがきません。
このため慣れてくると全面をクリアするのに1時間もかからないため、ちょっと立ちあげてクリアしようというプレー意欲が何度となく溢れ出てきます。
◇ ◇ ◇
このように何度プレーしても飽きがこない、しかも1時間そこそこでクリアできる面クリアタイプのアクションゲーム作りというのは素晴しいと思います。

Javaにおける画面設計について
この画面には、キーボード入力イベントが発生するので非常に重要となります。
次に画面の中身(実際のゲーム画面)ですが、これは上述したウィンドウ、コンテンツペインの考え方を抽象化したいので、私が行った開発では、これらの中に更にコンポーネントを追加する形を取りました。こうすることにより、将来アプリケーションとしても、アプレットとしても、あまり意識しないで開発できると考えました。
まとめると、
・アプリケーション → ウィンドウとしてデスクトップで表示 → クラスとしては JFrame クラスから派生して作成。
・アプレット → コンテンツペインとしてブラウザ等で表示 → クラスとしては JApplet クラスから派生して作成。
・アプリケーションやアプレットにはキーボード入力イベントが発生する。
・アプリケーションやアプレッドの中にコンポーネントを追加して、ゲーム画面自体はこの中に描画を行う。
こんな感じでしょうか。

昔のゲームの想い出 [0002] 「ファンタジー」 [SNK] [1981] [アーケード]
このゲームはレトロゲーマーには割と有名のようですが、私の周りでは誰も知らないといった、長編アクションゲームです(ちょっと大袈裟ですが)。
内容はいたってシンプルで、そのステージにいる彼女の所に行く、または指定の距離まで移動するといった面クリアクションです。
(ネットで検索をするとスクリーンショットや説明は割と発見されるみたいです)
特筆するべきはステージ構成で、この時代に全8面の様々な雰囲気を変えたフィーチャーで構成されています。
当時の私には、このたった8面ぽっちがものすごくスケールのある長編活劇に見え、「なんて夢のあるゲームなんだ!」と偉く興奮していました。
なぜ、たった8面程度でそう思ったのかと今考えてみると、このゲームは「ヒット & アウェイ」の"アウェイ"の部分がとても多彩で、しかも、ステージ毎に舞台を遠目に引いたり、近づけたりと様々な視点で、しかも自機は気球に乗って移動したり、徒歩だったりとかなりバラエティに富んだ(ちょっと大袈裟)ところがそう感じたのかもしれません。
またバージョン(なのか、ディップスイッチの設定なのか、デッドコピーなのか不明ですが)により、ステージ2の敵の船上での戦いでは自機は自慢のノコギリが使えずに、船上に設置されている敵の大砲(これは自機に打ってくる)を使用して、敵に命中させるといった、すごい攻略法を取る形となります。
私の通っていたゲームセンターはこの仕様だったので、別のゲームセンターで自機がノコギリを持っていた時にはビックリしました。しかも壁でジッとしているだけで敵が全滅するという恐しい仕様です。ネットで検索したエミュレータなどのスクリーンショットを見ると、ステージ2の画面でノコギリを持っているようなので、こっちが正当なのかもしれませんね。
このように基本アクションゲームなのに、避けの仕様が良くできているゲームというのは、「熱い展開になる」ので、とても素晴しいと思いました。
また冒険活劇物のアクションゲームは先の展開が気になるもので、このような「次はどんな見せ方してくれるのかな」と思わせたら勝ちなんだなと思いました。
ちなみに、このゲームのステージ5のBGMがLipps Inc.のFunky Town (1980)という曲にそっくりで、HONDA車THAT'SのCMを見たときに「ファ、ファンタジーのステージ5だ!」となんかニヤけてしまいました。

ファンタジーの基板
XNAの場合のフレームワーク

この図中の英単語の部分がXNAにて自動生成、あるいはユーティリティとして使用できるクラス、メソッドとなります。
これらのうち、Game.*がXNAのウィザードが自動生成するイベント関数となります。
そして、単純なゲームを作成する場合は、この図のGame.Updateの中に、キーボードやゲームパッドからの入力情報を取得し(Inputのネームスペース内のクラスに情報が自動的に格納されます)、ゲームの要となるタスク処理を行い(といっても、ここが一番難しい実装ですが…)、その際にサウンド処理を行います。(サウンドもInput同様、Audioネームスペース内のクラスを用いて発声させます)
そしてGame.Drawは、XNAのフレームワークがタイミングを見つけて、自動的に呼び出してくれるもので、タスク処理で行った処理結果をキャラクターとして時前で描画します。
1/4に説明したメインからの呼び出しやフレームレート演算を時前でプログラミングしないで、且つ、更新処理や描画処理のタイミングを自動で呼び出してくれるという仕組みを最初から生成してくれるXNAは非常によくできていると思います。
昔のゲームの想い出 [0001] 「ドルアーガの塔」 [ナムコ] [1984] [アーケード]
さて、今後はプログラミング以外にも定期的(というか昔話が書きたいとき)に昔のゲームの想い出やそれに関連するゲームプログラミングの話などを書いていこうと思います。
ゲームのジャンルや時期、プラットフォームなどはアトランダムですが、インベーダー時代から、2Dの終焉の頃のゲームが一番思い入れが強いので、その辺りのことを書いていこうと思っています。
ということで、まずは最終的には基板まで購入することになった、最も思い入れのあるゲームの一つ、ドルアーガの塔から始めたいと思います。

初めてこのゲームをゲームセンターで見た時、周りのギャラリーがみんな手帳を持っていたことが印象的でした。この手帳は各ステージの宝の出現方法を独自に記述しているものでした。後にベーシックマガジンのスーパーソフトコーナーで全面の宝の出し方が公表されたのですが、リリース直後ではこの解法が知られていなかったために、みんなが人のプレーから宝の出現方法を知ろうと一生懸命だったので、本ゲームのリリース直後には、この光景が多く見られていた訳です。
当時としては本当にスゴイ話で、宝の入手方法が分らないと全面をクリアできない、しかも入手方法がかなり不可思議なものが多かったので、私もこの初見から数日後、クラスメートのK井くんと、ゲームセンターに手帳を持って行き、人のプレーを見ながら「今のステージどうやって出した?」などと、人のプレーからどのように出現させたのかをお互いで相談しながら解析したものでした。
またヒドイ人だと、夜だというのにゲーセンにある蛍光灯反射のダンボール(駄菓子屋などに多く置いてあり、モニターの上に被せて画面を多い、蛍光灯や日光の反射を押えるための装備)で、ステージの画面を隠して解法を見せない方などがいたそうで、ベーシックマガジンで解法が公表されるまでは、一部のゲームセンターでは割と険悪な雰囲気があったとかいう話を聴いたことがありました。
私がこのゲームにハマったのは、全面をクリアする前にゲームセンターで知り合った一つ年上のY本くんからクリア画面を見せてもらい、「全部を覚えてクリアすると、かなり楽しいよ。」とアドバイスを貰い、全面の宝の出し方を覚えたクチで、全てを覚えて全面を1コイン1機でクリアできる頃には、ギルのパワーアップインフラの感覚、60階をかけあがる感覚がたまらなく面白くなってきたという形でハマっていきました。
慣れてくると、このゲームは恐しい程のディテールが見えてきて、例えば13面の宝、レッドラインシールドのシールドを入手すると、主人公のギルのシールドに赤いラインが描画される、37面のハイパーヘルメットを入手するとギルのヘルメットに角が描画される等、数ドットのディテールにエクスタシーさえ感じてしまう程(大袈裟ですが(^^;)の感動を覚えた記憶があります。
あまり知られていないみたい(?)なのですが、26面のハイパーガントレットを正しく入手しないと、剣が抜けなくなる(もうゲームオーバーしかなく、コンティニューをしてもクリア不能となる)赤いガントレットが入手され、この際ギルのガントレットがちゃんと赤く描画されていたりします。
この状況を他のプレイヤーが遭遇していて四苦八苦していた際に、初めてこの処理を見てしまい、私はこのディテールに驚愕し、「こんなクリアも出来無くなるアイテムに対してキチンと描画している、スゲー!!」とゲームセンターで大騒ぎをしてしまいました。(^^;
この時感じたのは、「コンピューターゲームのこだわりというはとても凄いことなんだな。しかも、この処理を誰かがプログラミングしないと、このように表現できていない訳で、誰かがこのプログラミングをしたんだ。すごいことなんだな。」と思いました。



昔のゲームの想い出 ['70~'90初頭] インデックス
No.0001 [ドルアーガの塔] [ナムコ] [1984] [アーケード]
80年代ゲーム最強のディティール!
No.0002 [ファンタジー] [SNK] [1981] [アーケード]
最古の冒険活劇ゲーム!
No.0003 [2010ストリートファイター] [カプコン] [1990] [ファミリーコンピュータ]
スタイリッシュアクションとはこーいうゲームの事を言う!
No.0004 [テレビブロック] [エポック社] [1979] [テレビブロック]
コンシューマーゲーム機デビュー!
No.0005 [マリオブラザーズ] [任天堂] [1983] [アーケード]
オリジナル最強!
No.0006 [ギャラガ'88] [ナムコ] [1987] [アーケード]
オリジナルの上を行く!?
No.0007 [ペンゴ] [セガ] [1982] [アーケード]
愛苦しいペンギンが動きまわる!
No.0008 [オーダイン] [ナムコ] [1988] [アーケード]
オシャレ横シューティング!
No.0009 [魔城伝説II ガリウスの迷宮] [コナミ] [1987] [MSX]
サイドビューアクションRPGの最高峰!
No.0010 [メタルソルジャーアイザックII] [タイトー] [1985] [アーケード]
知られていない究極の隠しボーナス!
No.0011 [ピットフォールII] [セガ] [1984] [アーケード]
地底探検の醍醐味!
No.0012 [スペランカー] [アイレム] [1985] [ファミリーコンピュータ]
足元を確認!
No.0013 [迷宮組曲] [ハドソン] [1986] [ファミリーコンピュータ]
7和音!?
No.0014 [サーカスチャーリー] [コナミ] [1984] [アーケード]
フレームバッファ方式!?
No.0015 [フリスキートム] [日本物産] [1981] [アーケード]
初エロゲープレー!(爆)
No.0016 [ボコスカウォーズ] [アスキー] [1983] [X1]
軍団移動のパイオニア!
No.0017 [ザ・スキーム] [ボーステック] [1988] [PC-8801mkIISR]
最強のBGM!…しかし!?
No.0018 [A-JAX] [コナミ] [1987] [アーケード]
最強のBGM!…しかし!?(その2)
No.0019 [海底宝探し] [ナムコ] [1980] [アーケード]
運試しゲーム!?
No.0020 [ミッキーアスレチックランド] [トミー] [1983] [ぴゅう太]
ミッキーマウスゲームの初☆ビデオゲーム化!
No.0021 [ヘビーメタル] [セガ] [1985] [アーケード]
先行攻撃!
No.0022 [ロックンロープ] [コナミ] [1983] [アーケード]
元祖ロープアクション!
No.0023 [クレイジークライマー] [日本物産] [1980] [アーケード]
まるでバーチャルリアリティ!
No.0024 [ポケットザウルス 十王剣の謎] [バンダイ] [1987] [ファミリーコンピュータ]
トツゼンですが クイズの じかんです!
No.0025 [メトロイド] [任天堂] [1986] [ファミリーコンピュータ]
最高峰のスペースオペラ!
No.0026 [クレイジーバルーン] [タイトー] [1980] [アーケード]
顔がっ!
No.0027 [セクターゾーン] [日本物産] [1984] [アーケード]
ペトラ人!
No.0028 [バルトリック] [ジャレコ] [1986] [アーケード]
超難易度シューティング!
No.0029 [サラダの国のトマト姫] [ハドソン] [1984] [MB-S1]
マツ マツ マツ マツ… …!?
No.0030 [チェスターフィールド] [ビック東海] [1987] [ファミリーコンピュータ]
複雑怪奇ダンジョン!?
No.0031 [ドラキュラハンター] [テクノン工業] [1980] [アーケード]
美女のウェストがっ!?
No.0032 [レイドック] [T&Eソフト] [1985] [MSX2]
超美麗シューティング!
No.0033 [妖怪道中記] [ナムコ] [1987] [アーケード]
超ド級難易度アクション!
No.0034 [ザ・ブラックオニキス] [BPS] [1984] [PC-8801]
クラーケンがコワイっ!
No.0035 [Mr.Do!] [ユニバーサル] [1982] [アーケード]
ほとばしるダイヤの緊張感!
No.0036 [フロントライン] [タイトー] [1983] [アーケード]
デモでも遊べる!
No.0037 [がんばれゴエモン!からくり道中] [コナミ] [1986] [ファミリーコンピュータ]
ひゃ、100周!?
No.0038 [ソルスティス 三次元迷宮の狂獣] [エピックソニーレコード] [1990] [ファミリーコンピュータ]
ファミリーコンピュータ最強の重ね合せ処理!
No.0039 [ジャイラス] [コナミ] [1983] [アーケード]
360回転シューティング!
No.0040 [ミスターバイキング] [セガ] [1984] [アーケード]
コミカルシューティング!
No.0041 [忍者くん 魔城の冒険] [UPL] [1984] [アーケード]
AI搭載!?
No.0042 [ザナック] [ポニーキャニオン] [1986] [ファミリーコンピュータ]
シューティングのAIと言えばコレ!
No.0043 [トップシークレット ヒットラーの復活] [カプコン] [1988] [ファミリーコンピュータ]
元祖ラバーリングアクション!
No.0044 [アウトラン] [セガ] [1986] [アーケード]
オシャレドライブゲーム!
No.0045 [シャロム] [コナミ] [1987] [MSX]
ゲーム史に残せる最強の大バグがっ!
No.0046 [ティップタップ] [セガ] [1983] [アーケード]
クォータービューのドンキーコング!?
No.0047 [ハイパーオリンピック] [コナミ] [1983] [アーケード]
連打→カプセル→鉄定規!
No.0048 [凄ノ王伝説] [ハドソン] [1989] [PCエンジン]
絶妙なバランスとイベント盛り沢山RPG!
No.0049 [ルパン三世] [タイトー] [1980] [アーケード]
子供がっ!
No.0050 [アルゴスの戦士] [テクモ] [1986] [アーケード]
最強の武器ディスカーマー!
番外編 No.0001
よく思う事
No.0051 [ファイナライザー] [コナミ] [1985] [アーケード]
腕の数以上のロケットパンチが!
No.0052 [リブルラブル] [ナムコ] [1983] [アーケード]
筐体にお金を置きまくる人がっ!
No.0053 [レグルス] [セガ] [1983] [アーケード]
メカアニマル萌え!
No.0054 [クルクルランド] [任天堂] [1984] [ファミリーコンピュータ]
22面以降が激熱!
No.0055 [キング&バルーン] [ナムコ] [1980] [アーケード]
自機が何回死んでもおk!
No.0056 [エイリアンシンドローム] [セガ] [1987] [アーケード]
ハガー萌え!
No.0057 [迷宮寺院ダババ] [コナミ] [1987] [ファミリーコンピュータ]
まるでカンガルー!
No.0058 [ちゃっくんぽっぷ] [タイトー] [1983] [アーケード]
実用円周率は15桁で十分!
No.0059 [アフターバーナーII] [セガ] [1987] [アーケード]
超高速のドッグファイト!
No.0060 [うっでいぽこ] [デービーソフト] [1986] [PC-8801mkIISR]
なんでも投げられる!
No.0061 [マリンアドベンチャー] [トミー] [1982] [ぴゅう太]
なかなかの深海ムード!
No.0062 [妖怪探偵ちまちま] [ボーステック] [1985] [FM-7]
目玉おやじ!?
No.0063 [レリクス] [ボーステック] [1986] [PC-8801]
敵に乗り移れっ!
No.0064 [ピーターペッパーズ アイスクリームファクトリー] [データイースト] [1984] [アーケード]
巨大アイスの玉を蹴っとばせ!
No.0065 [ファミコン探偵倶楽部PartII うしろに立つ少女] [任天堂] [1989] [ファミリーコンピュータ]
最高の恐怖を!
No.0066 [カンガルー] [サン電子] [1982] [アーケード]
強き母親の闘志!
No.0067 [魔界村] [カプコン] [1985] [アーケード]
凶悪な難易度!
No.0068 [マドゥーラの翼] [サン電子] [1986] [ファミリーコンピュータ]
ギャルゲーと思うなかれ!
No.0069 [マンハッタン] [データイースト] [1981] [アーケード]
巨大な拍手が素晴らしい!
No.0070 [ディグダグ] [ナムコ] [1982] [アーケード]
敵を爆死させる仕様ってスゴイ!
No.0071 [スクランブルエッグ] [テクノスジャパン] [1983] [アーケード]
目玉を飛せっ!
No.0072 [バイオアタック] [タイトー] [1983] [アーケード]
ミクロの決死圏のオマージュ!
No.0073 [北斗の拳] [セガ] [1986] [セガ・マークIII]
北斗百烈拳凄過ぎっ!
No.0074 [ASO] [SNK] [1985] [アーケード]
8つのアーマーを使いこなせ!
No.0075 [ゼビウス] [ナムコ] [1983] [アーケード]
ジェミニ誘導が熱い!
No.0076 [チャレンジャー] [ハドソン] [1985] [ファミリーコンピュータ]
100画面のフィールドは凄く広い!
No.0077 [SWAT] [セガ] [1984] [アーケード]
ブロックを連結させてはいけない!
No.0078 [テディボーイ ブルース] [セガ] [1985] [アーケード]
このゲームといったら、やっぱりあのアイドル!
No.0079 [Qバート] [コナミ] [1983] [オセロマルチビジョン]
斜め移動がっ!
No.0080 [ガズラー] [テーカン] [1983] [アーケード]
ニコチャン大王!?
No.0081 [新入社員とおるくん] [コナミ] [1984] [アーケード]
上司はヘッドバットで倒せっ!
No.0082 [サンダーフォースIII] [テクノソフト] [1990] [メガドライブ]
素晴らしくバランスが取れている横スクロールシュー!
No.0083 [ハイウェイスター] [スクウェア] [1987] [ファミリーコンピュータ]
ファミコン版のアウトラン!?
No.0084 [とびだせ大作戦] [スクウェア] [1987] [ファミリーコンピュータ]
とびだせメガネで本当に飛び出す!
No.0085 [ガールズ ガーデン] [セガ] [1984] [セガ SC-3000]
女性が男性に花をプレゼントっ!?
No.0086 [ファンタシースター] [セガ] [1987] [セガ・マークIII]
驚愕の3Dダンジョン!
No.0087 [アウトライブ] [サン電子] [1989] [PCエンジン]
SF系の3Dダンジョン!
No.0088 [アリシア ドラグーン] [ゲームアーツ] [1992] [メガドライブ]
稲妻とお供のモンスターを使いこなせ!
No.0089 [ダチョラー] [日本物産] [1983] [アーケード]
カメを蹴り飛ばせ!
No.0090 [ジュピターランダー] [コモドール] [1982] [マックスマシーン]
緊張感ある木星着陸!
No.0091 [エスパードリーム] [コナミ] [1987] [ファミリーコンピュータ]
ポップでメルヘンなRPG!
No.0092 [ノーティボーイ] [ジャレコ] [1982] [アーケード]
投石で城を落せ!
No.0093 [タイムギャル] [タイトー] [1985] [アーケード]
レーザーディスクゲーム唯一のギャルゲー!
No.0094 [パフォーマン] [データイースト] [1985] [アーケード]
黒パン一丁のウルトラマン!?
No.0095 [エクセリオン] [ジャレコ] [1983] [アーケード]
自機に物凄い慣性力がっ!
No.0096 [おたすけマン] [オーエム] [1980] [アーケード]
確率1/2!
No.0097 [アステロイド] [アタリ] [1979] [アーケード]
隕石の合間をかいくぐれっ!
No.0098 [テレビベーダー] [エポック社] [1980] [テレビベーダー]
一列表示のインベーダー!?
No.0099 [ボスコニアン] [ナムコ] [1981] [アーケード]
前後ショット搭載の全方向スクロールの戦略!
No.0100 [ロックマン] [カプコン] [1987] [ファミリーコンピュータ]
7つの武器を使いこなせ!
No.0101 [高機動戦闘メカ ヴォルガードII] [デービーソフト] [1985] [ファミリーコンピュータ]
ドッキング ロボの先駆け!
番外編 No.0002
シューター歴レーティングマークって…
No.0102 [スーパーロコモーティブ] [セガ] [1982] [アーケード]
トップビューとサイドビューの驚異的な表現!
No.0103 [銀河の三人] [任天堂] [1987] [ファミリーコンピュータ]
衝撃のラストが!
No.0104 [メタルブラック] [タイトー] [1991] [アーケード]
シューティングにアートを見た!
No.0105 [テトリス] [セガ] [1988] [アーケード]
落ちゲーの元祖!
番外編 No.0003
ネームエントリに悩む
No.0106 [第3惑星] [サン電子] [1979] [アーケード]
時計周りの侵略!
No.0107 [トランキライザーガン] [セガ] [1980] [アーケード]
猛獣を眠らせろ!
No.0108 [モンスターマンション] [エポック社] [1982] [カセットビジョン]
よくできたドンキーコングアレンジ!?
No.0109 [ポップフレーマー] [ジャレコ] [1982] [アーケード]
敵を火炎放射器で焼き殺せ!
番外編 No.0004
ゲームセンターの椅子
No.0110 [ツタンカーム] [コナミ] [1982] [アーケード]
ツインレバーで左右のレーザーを撃て!
No.0111 [エクイテス] [アルファ電子] [1984] [アーケード]
地上と空中をいったりきたりするロボットシューティング!
No.0112 [ボンブマン] [トミー] [1982] [ぴゅう太]
爆発が凄い!
No.0113 [スパーキー] [コナミ] [1983] [アーケード]
導火線のついた爆弾を操れ!
番外編 No.0005
買っていたゲーム雑誌
No.0114 [ホールランド] [ユニエンタープライズ] [1984] [アーケード]
モグラ叩きのようなインベーダーゲーム!
No.0115 [パイオニアバルーン] [SNK] [1982] [アーケード]
気球に乗ってどこまでも!
No.0116 [アクスレイ] [コナミ] [1992] [スーパーファミコン]
スーパーファミコン2Dシューティングの最高級エフェクトがっ!
No.0117 [Mr.Do! VS ユニコーン] [ユニバーサル] [1983] [アーケード]
ブロックで敵を潰せ!
No.0118 [R-TYPE] [アイレム] [1987] [アーケード]
フォースを使いこなせ!
番外編 No.0006
ゲーメストのオフ会に参加した想い出
No.0119 [ダライアス] [タイトー] [1986] [アーケード]
強威の海洋巨大戦艦ボス!
No.0120 [グラディウス] [コナミ] [1985] [アーケード]
レーザーとオプションの元祖!
No.0121 [マリンデート] [タイトー] [1981] [アーケード]
タコをトラックボールで移動!
番外編 No.0007
アーケード基板のハーネス
No.0122 [スナッチャー] [コナミ] [1988] [PC-8801mkIISR]
イカしたサイバーパンクアドベンチャー!
No.0123 [スプリンガー] [オルカ] [1982] [アーケード]
太陽を目指せ!
No.0124 [ウイングマン2 キータクラーの復活] [エニックス] [1986] [PC-8801]
デルタエンドが熱いっ!
No.0125 [怒] [SNK] [1986] [アーケード]
手榴弾の炸裂が爽快!
No.0126 [スペースハリアー] [セガ] [1985] [アーケード]
超名作体感ゲーム!
No.0127 [ファルシオン] [コナミ] [1987] [ファミリーコンピュータ]
誘導弾がイカす!
No.0128 [ミッションアタック] [トミー] [1982] [ぴゅう太]
ぴゅう太版の疑似3Dシューティング!?
No.0129 [シティコネクション] [ジャレコ] [1985] [アーケード]
シティでフィールドを塗り潰せ!
番外編 No.0008
私のアーケード筐体
No.0130 [夢工場ドキドキパニック] [フジテレビジョン] [1987] [ファミリーコンピュータ]
引き抜きアクション!
No.0131 [麻雀] [任天堂] [1983] [ファミリーコンピュータ]
ファミリーコンピュータ初の麻雀ゲーム!
No.0132 [ぎゅわんぶらあ自己中心派] [ゲームアーツ] [1987] [PC-8801mkIISR]
原作に忠実なバラエティに富んだキャラクターが魅力!
No.0133 [麻雀学園 "卒業編"] [ユウガ] [1988] [アーケード]
名人ばりにHボタンを連打っ!
No.0134 [スーパーリアル麻雀PII] [セタ] [1987] [アーケード]
て、天和!?
No.0135 [源平討魔伝] [ナムコ] [1986] [アーケード]
必殺旋風剣!イヤ~!!
No.0136 [月風魔伝] [コナミ] [1987] [ファミリーコンピュータ]
新方式ゲートアレイシステム!
番外編 No.0009
クラシカルゲームコレクション(60 in 1)基板を購入
番外編 No.0010
嬉し悲しのアーケードゲーム移植&エミュレータ
No.0137 [イース] [日本ファルコム] [1987] [PC-8801mkIISR]
シナリオ、映像、サウンドの最高峰アクションRPG!
No.0138 [ワンダーモモ] [ナムコ] [1987] [アーケード]
パンモロギャルゲー!
No.0139 [ドラゴンクエスト] [エニックス] [1986] [ファミリーコンピュータ]
国民的RPG!
No.0140 [ドラゴンクエストII 悪霊の神々] [エニックス] [1987] [ファミリーコンピュータ]
シリーズ最高難易度!
No.0141 [ドラゴンクエストIII そして伝説へ…] [エニックス] [1988] [ファミリーコンピュータ]
シリーズ最高人気作品!
No.0142 [ドラゴンクエスト IV 導かれし者たち] [エニックス] [1990] [ファミリーコンピュータ]
オムニバス形式シナリオ採用!
番外編 No.0011
私が対戦ゲームを嫌う訳
No.0143 [NOVA 2001] [UPL] [1983] [アーケード]
ダークスペーシーなSFシューティング!
No.0144 [VS.バルーンファイト] [任天堂] [1984] [アーケード]
浮遊感が素晴らしい!
No.0145 [ワードナの森] [タイトー] [1987] [アーケード]
難易度低のバランスの良いアクションゲーム!
No.0146 [アイスクライマー] [任天堂] [1985] [ファミリーコンピュータ]
頂上を目指せ!
No.0147 [デビルワールド] [任天堂] [1984] [ファミリーコンピュータ]
スクロールの圧死に気をつけろ!
番外編 No.0012
今更ながらレトロゲームを大事にしたい…
No.0148 [パックマン] [ナムコ] [1980] [アーケード]
最高峰のドットイートゲーム!
No.0149 [パックランド] [ナムコ] [1984] [アーケード]
最高級のキャラクターゲーム!
番外編 No.0013
ゲームセンター全盛期
No.0150 [ガルディア] [セガ] [1986] [アーケード]
マイナーな佳作だけど結構激熱!
No.0151 [サスケVSコマンダ] [SNK] [1980] [アーケード]
YES SHOGUN!
No.0152 [ネクタリス] [ハドソン] [1989] [PCエンジン]
シンプルでカッコイイ近未来シミュレーションゲーム!
番外編 No.0014
20年前(1990年)の基板の値段
No.0153 [ドラゴンスレイヤーIV] [ナムコ] [1987] [ファミリーコンピュータ]
広大な地下ダンジョンを家族の力で攻略!
No.0154 [グーニーズ] [コナミ] [1986] [ファミリーコンピュータ]
友人達を救い出せっ!
番外編 No.0015
私にとってS級クラスのゲームって…
No.0155 [チーキーマウス] [ユニバーサル] [1980] [アーケード]
ペスト菌がっ!
No.0156 [カトちゃんケンちゃん] [ハドソン] [1987] [PCエンジン]
エンディングの最後がっ!
No.0157 [赤い光弾ジリオン] [セガ] [1987] [セガ・マークIII]
オパオパも出るよっ!
番外編 No.0016
借りパクされたゲーム達
No.0158 [DOOM] [id Software] [1993] [PC-DOS]
FPSなんて言葉ができるまえの歴史的FPSゲーム!
No.0159 [いっき] [サン電子] [1985] [アーケード]
ホーミング鎌!
No.0160 [アトランチスの謎] [サン電子] [1986] [ファミリーコンピュータ]
ザヴィーラも謎っ!
No.0161 [グロブダー] [ナムコ] [1984] [アーケード]
誘爆を駆使!
No.0162 [モンスターバッシュ] [セガ] [1982] [アーケード]
有名モンスターを退治!
番外編 No.0017
私はファミコン通信のライターになりたかった(笑)
No.0163 [戦場の狼] [カプコン] [1985] [アーケード]
ミリタリーの渋さが光るっ!
No.0164 [シェリフ] [任天堂] [1979] [アーケード]
ダイヤルスイッチの元祖!
番外編 No.0018
私は女性キャラが主役のゲームが苦手でした
No.0165 [愛戦士ニコル] [コナミ] [1987] [ファミリーコンピュータ]
コスモボールは最後まで保持っ!
No.0166 [平安京エイリアン] [電気音響] [1980] [アーケード]
永パ防止がトラウマ!
No.0167 [火の鳥 鳳凰編 我王の冒険] [コナミ] [1987] [ファミリーコンピュータ]
落る直前に鬼瓦を連射!
No.0168 [マッピー] [ナムコ] [1983] [アーケード]
トランポリンゲームといえばコレ!
No.0169 [ドンキーコングJR.] [任天堂] [1982] [アーケード]
ツル移動が斬新!
No.0170 [トロン] [トミー] [1983] [ぴゅう太]
ワイヤーフレームっぽいけど実は違うっ!
No.0171 [トラフィックジャム] [トミー] [1982] [ぴゅう太]
街を塗り潰せっ!
No.0172 [ミステリアスストーンズ -Dr.キックの大冒険-] [データイースト] [1984] [アーケード]
3つのお宝で1億点を!
No.0173 [快傑ヤンチャ丸] [アイレム] [1986] [アーケード]
ふっ、ふっ、ふぅ~!
No.0174 [バルバルークの伝説] [エイブル] [1986] [アーケード]
アイテムは頭突きでっ!
番外編 No.0019
愛するピコピコ音楽
No.0175 [バッグマン] [Stern Electronics] [1982] [アーケード]
ツルハシで敵を倒せっ!
No.0176 [フロッガー] [コナミ] [1981] [アーケード]
愛しのあの娘とドッキング!
No.0177 [アミダー] [コナミ] [1982] [アーケード]
秀逸なアミダアルゴリズム!
No.0178 [トリプルパンチ] [KKI] [1982] [アーケード]
3発殴れっ!
No.0179 [ソニックブラストマン] [タイトー] [1990] [アーケード]
3発殴れっ!
番外編 No.0020
テレビゲームの軍資金
No.0180 [スターラスター] [ナムコ] [1985] [ファミリーコンピュータ]
アドベンチャーモードの奥が深いっ!
No.0181 [オバケのQ太郎 ワンワンパニック] [バンダイ] [1985] [ファミリーコンピュータ]
チャウチャウ最強説!
No.0182 [ボンバーマン] [ハドソン] [1985] [ファミリーコンピュータ]
30面から最高のカタルシス!
No.0183 [キック・チャレンジャー エアフット 野菜の国の足戦士] [バップ] [1987] [ファミリーコンピュータ]
ウンコ…踏んじゃった!
No.0184 [スーパースターフォース 時空暦の秘密] [テクモ] [1986] [ファミリーコンピュータ]
歴史を変えろっ!
No.0185 [ボーダーライン] [セガ] [1981] [アーケード]
要塞を墜とせっ!
No.0186 [スタージャッカー] [セガ] [1983] [アーケード]
自機は2機位が良い!?
No.0187 [プーヤン] [コナミ] [1982] [アーケード]
ボスオオカミが手強いっ!
番外編 No.0021
シリーズ物
No.0188 [ラッソ] [SNK] [1982] [アーケード]
投げ縄で家畜を囲めっ!
No.0189 [イシターの復活] [ナムコ] [1986] [アーケード]
君は二人でやるか?一人でやるかっ!?
No.0190 [ウットイ] [コンパック] [1984] [FM-7]
とてもセンスの良いアクションパズルっ!
No.0191 [夢大陸アドベンチャー] [コナミ] [1986] [MSX]
PAUSEが最強の敵っ!
No.0192 [ロードファイター] [コナミ] [1984] [アーケード]
カウンターステアが要!
No.0193 [F1スピリット] [コナミ] [1987] [MSX]
F1からが本番!
No.0194 [スプラッターハウス] [ナムコ] [1988] [アーケード]
スライディングキックがキモ!
No.0195 [ラッシュ&クラッシュ] [カプコン] [1986] [アーケード]
80年代ゲーム最強のディティール!(その2)
No.0196 [ハンバーガー] [データイースト] [1982] [アーケード]
巨大ハンバーガーを作れっ!
No.0197 [バベルの塔] [ナムコ] [1986] [ファミリーコンピュータ]
ビッグパスワードは難解過ぎっ!
No.0198 [ザ・スーパー忍] [セガ] [1987] [メガドライブ]
高難易度アクション!
No.0199 [光神話 パルテナの鏡] [任天堂] [1986] [ファミリーコンピュータ]
ヤラレチャッタ!
番外編 No.0022
テレビゲームに関する嘘つき
No.0200 [メタルギア] [コナミ] [1987] [MSX2]
映画のような最高級ゲームデザイン!
No.0201 [華の舞] [ダイナックス] [1988] [アーケード]
最高のエロこいこい!
No.0202 [スクランブル] [コナミ] [1981] [アーケード]
燃料を気にして進め!
No.0203 [アルマナの奇跡] [コナミ] [1987] [ファミリーコンピュータ]
インディ・ジョーンズなロックンロープ!
No.0204 [ゴンタ ロードラッシュ] [カワクス] [1982] [アーケード]
今では言えない「ブッシュマン」!
No.0205 [忍者龍剣伝] [テクモ] [1988] [ファミリーコンピュータ]
テクモシアター第2弾!
No.0206 [ワープ&ワープ] [ナムコ] [1981] [アーケード]
銃か爆弾かっ!
No.0207 [ラリーX] [ナムコ] [1980] [アーケード]
元祖スペシャルフラッグ!
No.0208 [北海道連鎖殺人 オホーツクに消ゆ] [アスキー] [1987] [ファミリーコンピュータ]
悲しみのニポポ人形!
No.0209 [ミンキーモンキー] [ローラートロン] [1983] [アーケード]
ドンキーコングJR.の算数遊びよりもヒドイ!
No.0210 [ドラちゃん] [クラール電子] [1982] [アーケード]
超☆著作権侵害!
番外編 No.0023
私の通っていたゲームセンター
No.0211 [タンクバタリアン] [ナムコ] [1980] [アーケード]
自分で司令部の旗を破壊できるっ!
No.0212 [キングスナイト] [スクウェア] [1986] [ファミリーコンピュータ]
5面のフォーメーションがキビシすぎるっ!
No.0213 [ブループリント] [ジャレコ] [1982] [アーケード]
設計図を探し出せっ!
No.0214 [ふぁみこんむかし話 新・鬼ヶ島] [任天堂] [1987] [ファミリーコンピュータ]
童話の秀逸アレンジシナリオ!
No.0215 [エキサイティングビリヤード] [コナミ] [1987] [ファミリーコンピュータ]
大人な雰囲気が最高!
No.0216 [スコルピウス] [新声社] [1991] [X68000]
パジトノフさんが解析!
番外編 No.0024
私はアーケードゲームでは殆どコンティニューをしなかった
番外編 No.0025
ゲームプレー中の癖
No.0217 [ストライダー飛竜] [カプコン] [1989] [アーケード]
きさまらにそんな玩具は必要ない!
No.0218 [フィッター] [タイトー] [1981] [アーケード]
ルービックキューブ!?
No.0219 [激亀忍者伝] [コナミ] [1989] [ファミリーコンピュータ]
Shell Shock!
No.0220 [クインティ] [ナムコ] [1989] [ファミリーコンピュータ]
個性爆発の新面クリアクション!
No.0221 [テニス] [任天堂] [1984] [ファミリーコンピュータ]
ダブルスもできる本格的なテニスゲーム!
No.0222 [ぺんぎんくんWARS] [UPL] [1985] [アーケード]
もっと接近しましょ!
No.0223 [モピレンジャー] [コナミ] [1985] [MSX]
モピ!モピ!
No.0224 [ハッスルチューミー] [セガ] [1984] [セガ SG-1000]
ルパン三世のようなゲーム!
No.0225 [クラッシュローラー] [クラール電子] [1981] [アーケード]
5面のネコがコワイっ!
番外編 No.0026
BGMの直録
No.0226 [VS.レッキングクルー] [任天堂] [1984] [アーケード]
ゴールデンハンマーはFC版だけっ!
No.0227 [頭脳戦艦ガル] [デービーソフト] [1985] [ファミリーコンピュータ]
スクロール・ロールプレイングゲーム!?
No.0228 [ダックハント] [任天堂] [1984] [ファミリーコンピュータ]
カモのトリッキーさが凄い!
No.0229 [パワードリフト] [セガ] [1988] [アーケード]
マリオカートには無い凄まじいスピード感!
No.0230 [謎の村雨城] [任天堂] [1986] [ファミリーコンピュータ]
感動の村雨城BGM!
No.0231 [COSMO] [TDS&Mints] [1979] [アーケード]
BGMが鳴るバージョンがあるっ!
No.0232 [ヨットマン] [サンリツ電気] [1982] [アーケード]
乗ってけサーフィン!
No.0233 「ムーンクレスタ」 [日本物産] [1980] [アーケード]
ドッキングせよ!
No.0234 [ポンポコ] [シグマ商事] [1982] [アーケード]
ヘビを引いた時は爆音がっ!
No.0235 [ポパイの英語遊び] [任天堂] [1983] [ファミリーコンピュータ]
ファミリーコンピュータ初のエデュケーションソフト!
No.0236 [005] [セガ] [1981] [アーケード]
寝ている警備員が邪魔っ!
No.0237 [超惑星戦記 メタファイト] [サン電子] [1988] [ファミリーコンピュータ]
史上最強、痛快無比!
No.0238 [高橋名人の冒険島] [ハドソン] [1986] [ファミリーコンピュータ]
天使でなくて妖精のハニーがっ!
番外編 No.0027
テレビゲーム交流
No.0239 [ルート16] [サン電子] [1981] [アーケード]
個性のある部屋を走り抜けるっ!
番外編 No.0028
理解されない趣味
No.0240 [スペースアタック] [セガ] [1979] [アーケード]
ブタベーダー!
No.0241 [レイダース5] [UPL] [1985] [アーケード]
卵を駆使っ!
No.0242 [タイムパイロット] [コナミ] [1982] [アーケード]
元祖ドックファイト!
番外編 No.0029
テレビゲームの発売日
No.0243 [ギャラクシアン3] [ナムコ] [1990] [アーケード]
最大28人の超巨大アトラション!
No.0244 [Mr.Do's ワイルドライド] [ユニバーサル] [1984] [アーケード]
ジェットコースター級の超スリルアクション!
No.0245 [ギャプラス] [ナムコ] [1984] [アーケード]
超高速シューティング!
番外編 No.0030
ゲームセンターと不良
No.0246 [ハイパーオリンピック'84] [コナミ] [1984] [アーケード]
NICE!
No.0247 [邪聖剣ネクロマンサー] [ハドソン] [1988] [PCエンジン]
ザッ!ザッ!ザッ!
No.0248 [ワンダープラネット] [データイースト] [1987] [アーケード]
最強装備(フルパワー)でブットバセ!!
No.0249 [ワンダーボーイ モンスターランド] [セガ] [1987] [アーケード]
レバガチャが基本!
No.0250 [ドンキーコング] [任天堂] [1981] [アーケード]
初ドンキーコング&マリオ!
番外編 No.0031
ゲームのポスター
No.0251 [ドラゴンバスター] [ナムコ] [1985] [アーケード]
セリア姫のバニーガール!
No.0252 [ラジカル ラジアル] [日本物産] [1983] [アーケード]
ハイスピードシューティング!
No.0253 [ジャンプバグ] [セガ] [1981] [アーケード]
駄菓子屋でしか見た事がないっ!
No.0254 [ハイドライド] [T&Eソフト] [1984] [PC-8801]
経験値型アクションRPGの元祖!
No.0255 [ファイナルファンタジー] [スクウェア] [1987] [ファミリーコンピュータ]
シリーズ毎に戦闘システムが変化する日本が誇るRPG!
番外編 No.0032
アーケードゲームのプレイ料金
No.0256 [マイティボンジャック] [テクモ] [1986] [ファミリーコンピュータ]
ニゴロ・ニコニコ!
No.0257 [カダッシュ] [タイトー] [1989] [アーケード]
たいせつな ものを ありがとう!
No.0258 [ソンソン] [カプコン] [1984] [アーケード]
LET'S GO TENJIKU!
No.0259 [アサルト] [ナムコ] [1988] [アーケード]
回転・拡大・縮小、そして転がりっ!
番外編 No.0033
私は連射機能なしでアーケードゲームをプレーしてきた
No.0260 [ミッドナイトランディング] [タイトー] [1987] [アーケード]
最高の没入感筐体が素晴らしいっ!
No.0261 [メタルホーク] [ナムコ] [1988] [アーケード]
目標接近!目標!目標!
No.0262 [スカイアーミー] [ショウエイ] [1982] [アーケード]
サル・ゴリラ・チンパンジー!
番外編 No.0034
テレビゲームタイトルの略語呼びって…
昔のゲームの想い出 [キーマンの紹介]
想い出話を書いていると、「○○○の彼」とかよく出しますが、最近頻度が上ってきた気がします。
これらの人というのは「私のテレビゲームの歴史」にとって非常に重要なポジションとなっている人が多く、今でこそ疎遠になってしまっている人達もいますが、共にゲーム青春を歩んできた朋友なので、尊敬の意を込めて本アーカイブとして記録して行こうかと思いました。
ということで、この日記を登場人物のインデックスとして、参照できるようにしていこうかと思います。
(登場したり新たな日記で参照されると、更新していこうと思います)
メインループでのウェイト
前回の日記(1/4)でメインループの事を述べましたが、ループにて繰り返しを行う際に、ウェイト処理を入れてやる必要があります。
このウェイト処理というのは、ゲームに対するCPUのパワーが余れば余るほど必要になる処理で、これを行わないとゲームのスピードがとんでもなく速くなってしまう現象が発生します。
最近では当てはまらなくなってきましたが、少し前まではTVのブラウン管の映像表示(走査)速度と同じ、60fps(1秒間に60コマ = 60フレーム)で、タイミングを取るというのが当たり前という感じでゲームのプログラミングを行うというのが定石で、間に合わなければ30fpsに低下…というような処理をメインループに入れるということを行っていることが一般的のようです。
私もJavaで2Dゲームを開発したときは、同様なことを行い、
long m_nowTime; while(true) { // 入力処理、タスク、描画、サウンド等の処理 // 処理した時間を計算して、ウエイトが必要か判断します |
のようなコーディングを行いました。ここの「m_framerate = 17」というのが、1秒間のうちの60コマのおおよその1コマ秒となり、1÷60=0.016666… = 約0.017秒 = 17ミリ秒となります。
(Javaのスレッドを停止させるThread.sleepメソッドの単位はミリ秒となります)
ただし、このようなコーディングの場合は、処理落ちが発生した場合は全体がスローモーションとなり、フレームのスキップなどが行えないので、フレームスキップを行う場合には、描画処理を数フレーム行わない等の高度なウェイトを更に検討しなければなりません。
XNAの場合は非常にインテリジェンスなフレームワークを実装しており、メインループの実装も不要、フレームレートもMicrosoft.Xna.Framework.Gameインスタンス内のIsFixedTimeStep、TargetElapsedTimeにて、可変/固定フレームレート、フレームレートのタイミングを設定することができます。
(殆ど何も考えずに、メインループの実装が行われている&フレームスキップの実装が容易となります)
プログラミングを行う時にまず最初に検討すること
フレームワークと言うとものすごく抽象的ですが、大まかに言ってしまうと以下の物となる感じです。
1.メインループ
2.入力情報の保持
3.タスク(集合)処理
4.描画処理
5.サウンド処理(これは「3.」の処理の中に埋めこむケースが多いです)
これらの内「2.」「4.」「5.」の処理がプラットフォームや言語によって、かなり依存しやすい部分になるので、どのように実装すべきか検討します。
(これらの検討は日記として述べるのにはボリュームがありすぎるので、別の機会で各々少しずつ述べていこうと思います)
Java や C# など(というよりは大概のプログラム言語)は、必ずエントリポイントとなる、メイン関数から起動されるので、そこから「1.」のメインループ処理に入り、このメインループ内で「2.」~「5.」の処理を行うといった感じになります。
(私の場合ですが)
