いなあものPalmware開発日記 このページをアンテナに追加 RSSフィード

2005-09-13

[]Uターン禁止の美しきバトル Uターン禁止の美しきバトル - いなあものPalmware開発日記 を含むブックマーク

陣取りゲームは、プレイヤーフィールド内に互いに線を引き、壁やプレイヤーが引いた線にぶつかった方が負けというシンプルかつ明快なルールゲームです。

僕がコンピュータを始めて触った20年以上前には既に存在していたゲームですから、僕はコンピュータゲーム古典に分類されるゲームだと思っています。

この陣取りゲームプレイヤーコンピュータにやらせるにはどうしたらいいだろうかと考えたことがあります。試しに障害物を全て除けるようなアルゴリズムを組んでみました。これならコンピュータは強いに違いありません。

何しろ進行方向に障害物を見つけたら自動的に除けていくのですから。

ただ、障害物の直前まで直進するようでは見た目が不自然なので、時折気まぐれで進路を変えるアルゴリズムを組み込みました。方向転換のタイミングや進路は乱数によって決定。

うん、何か自然な動きが期待できそうです。

ところが、このアルゴリズムは予想以上に弱くて人間の圧勝コンピュータは自ら引いた線に囲まれて進路を失ってしまったのでした。もう、開始直後に渦巻きを作って自滅する事が多すぎ。これではゲームになりません。

ではどうすればいいのでしょうか?

先ほどのアルゴリズムに、もう一工夫しましょう。渦巻きを作らないようにするのです。

難しいようですが、渦巻きはUターンの繰り返しで発生しますから原則Uターン禁止のアルゴリズムを組み込めばいいわけです。

具体的には、左→下→左→下のように階段状に進むアルゴリズムですね。

実際に試してみると、進行方向に障害物があったりしてUターンせざるを得ない場合もありますから、結構自然な動きになる事が分かりました。

このアルゴリズムを考えたのは、実は僕がまだ大学生だった頃です。

早速当時の8ビットパソコンプログラムを組んでみました。Basicで数10行程度の短いプログラムでしたが、カラーグラフィックを駆使して作ったプログラムはとても美しい幾何学模様をスクリーンに映し出してくれました。

暫くコンピュータ同士の対戦を「ぼーっ」と眺めていたのですが、毎回違う模様が描かれるスクリーンは、何十分見ていても飽きがきません。

予想以上に気に入ったので、当時ライターをしていた某パソコン雑誌編集室に持ち込みデモを見てもらったのですが、皆の反応も僕と同じで暫くスクリーンを「ぼーっ」っと見ては「赤が強いだの」「緑頑張れ」とか何気ない幾何学模様に見とれては盛り上がったものです。

結局「戦略的ライトサイクルゲーム」という立派な名前を編集長から頂き、このゲーム雑誌に掲載されることになりました。

「ライトサイクル」という名前は当時話題になった映画トロン」から拝借したもののようです。

さてそれから10年以上が過ぎている訳ですが、Clie PEG-SJ33というカラースクリーンを搭載したデバイスを手にした僕は、是非ともこのゲームPalmで再現してみたくなった訳です。

アルゴリズムは「Uターン禁止」のみ。確か第4回NS Basicプログラムコンテストの締め切り3日くらい前に作り始めて、締め切り直前に応募した記憶があります。それくらい単純なプログラムなんですね。

ただ、残念なことに僕のTungsten|Cではボタンイベントをうまく拾うことが出来ず、現在僕はLightCycleで遊ぶことが出来ません。

プログラムの修正をしなければいけないなぁと思っているのですが、Tungsten|Cのイベント関係の処理は、他のデバイスと違って少々特殊なようで、どうしようか検討中

それでも時々、LightCycleのデモを立ち上げて、美しき幾何学模様を見てはほくそえんでいたりします。