コンピュータゲーム最大のバグ 「弾が当たっても倒れない」より大きなバグは?:組み込みエンジニアの現場力養成演習ドリル(18)(1/2 ページ)
今回は、コンピュータゲームのバグについて考えます。
はじめに
筆者がプログラマーとして就職したのが1977年です。ピンクレディ−の『渚のシンドバッド』がヒットし、王選手が本塁打世界新記録となる756本目を打った年。PCは、まだ一部のマニアの「高価なオモチャ」だった頃で、ビデオゲームの嚆矢(こうし)となった「ブロック崩し(図1参照)」がゲームセンターに登場しました。
このゲームは、米国初のビデオゲーム専門会社、ATARI*1)の「ブレイクアウト」を日本のゲーム機メーカー、タイトーがライセンス販売したものです。今のコンピュータゲームから見ると、非常に原始的ですが、当時は大人気になりました。翌年の1978年、タイトーが、伝説となる「スペースインベーダー(図2参照)」をリリース。日本中に爆発的なブームを起こし、「コンピュータゲーム」産業が誕生しました。
*1)ATARIについて
ATARIという日本語風の社名は、囲碁用語である「アタリ」に由来しています。同社社長のノーラン・ブッシュネルは囲碁が趣味で、初段の強豪。囲碁用語の「センテ」「ハネ」「アタリ」の中から「アタリ」を選んだそうです。
日本の代表的なボードゲームが「囲碁」と「将棋」です。国際化戦略を選択した囲碁と、駒に漢字が書いてあるがゆえに日本国内でしか普及しない将棋は、行く先が大きく分かれました。日本のオリジナルのものや、日本で人気が高いものを国際化すると、愛好家の人数は爆発的に増えますが、王者やチャンピオンが日本人以外になり、日本での人気が落ちる可能性があります。大相撲や柔道と同様、囲碁界では、今は、中国、韓国の海外勢が世界最強棋士の座を占めています。また、日本では、特に「長老」は、何事にも「精神の修業」を重視しますが、国際化をすると、海外勢は「勝つための技術」を追求します。
「品質向上を推進します」と同じレベルで、「国際化を推進します」と宣言する組織が少なくありません。こう言うと、進歩的でカッコよく聞こえますし、市場規模が大きくなりますが、かつての日産のように社長が辣腕(らつわん)フランス人になるかもしれません。「国際化する」と「国際化しない」は、どちらにも長所と問題点があります。これを考慮しないと、柔道着の片方が青色になった時のような「大混乱」が起きます。
バグが生んだ高等テクニック
スペースイベーダーは、立ってゲームをする「アーケード型」から、座ってプレイできる「テーブル型」にしたことから喫茶店で大流行。喫茶店では、百円玉を10枚重ねた「円柱」を5、6本も並べて、一心にボタンを押す熱烈愛好者が多数いて、大きな社会現象になりました。
高得点を出し、百円玉1枚で数時間もプレイする上級者の基本的テクニックが、伝説となった「名古屋撃ち(英語名:Nagoya Attack)」です。インベーダーはじわじわ下降しながら画面の一番下にある人間(プレーヤー)の「砲台」に弾を撃ち込むのですが(赤いトーチカが、盾になっていますが、インベーダーの弾を受けると少しずつ崩れます)、インベーダーを最上段に1つだけ残し、残りをブロックのまま最下段へ来るようにすると、UFOが弾を撃っても砲台に着弾判定されず、自身の「砲台」からは撃てるため、大量得点が可能となります(図3は「名古屋撃ち」の条件がそろった状態で、①最上段に孤立したインベーダー、②最下段に進んだインベーダーの集団、③防御のトーチカ、④人間の砲台を表します)。
この伝説の「名古屋撃ち」が可能になったのは、スペースインベーダーのバグのためです。インベーダーは、1画素分、下の場所から弾を発射し、さらにもう1画素下の地点で、弾が人間側の砲台やトーチカに当たったかを判断します(図4参照)。したがって、砲台がインベーダーの1画素下へ接近すると、プログラム的には、砲台に着弾したかどうかの判断ができず、無傷のまま一方的にUFOを攻撃できます。
通常の組み込み系の製品ではバグは存在してはならず、バグはユーザーから非難されます。ですが、同じ組み込み系の製品でも、スペースインベーダーのバグは、「隠し仕様」として大歓迎されました(後の改訂版では、「名古屋撃ち」のバグが修正され、その結果、人気が落ちたそうです)。
コンピュータゲーム最大のバグ
組み込み系では、分野によって「最悪のバグ」は大きく異なります。ゲームの世界では、「人が空中を歩く」「弾が当たっても倒れない」は大したバグではありません(逆に、人気の要素になり得ます)。コンピュータゲームの最大のバグは「ゲームが売れない」だそうです。何億円ものコストと数年の期間を投入するコンピュータゲームの開発では、「人気がない」は圧倒的に致命的なバグです。この「バグ」を起こさないよう、ゲーム業界では十分に時間をかけます。
実は、コンピュータ用ゲームのソフトウェアでは、「ゲームが売れない」より深刻なバグがあります。以下の問題を解きながら考えてください。
問題【制限時間:30分】
A君のプロジェクトは、ロールプレイング方式の新しいゲーム、『惑星Zの大冒険』を開発することになりました。全社で同プロジェクトを強力にバックアップするため、社員全員が木星を模した『惑星Z』を描いたTシャツを着用しています。地球は真球ではありませんが、ゲームでキャラクターが動く「惑星Z」は真球とします。ただし、モニター画面が2次元ですので、「惑星Z」の3次元の世界を地図の「メルカトル図法」的に、2次元の地図のように表示することにしました(図5参照)。
「惑星Z」に登場するキャラクター、乗り物、その他の動くものは、図6のように、モニター上では、左右と上下がつながり、連続した世界にいることになります。
「惑星Z」をメルカトル図法形式で表現すると、北極と南極は点なのに距離があることになります。これを解決するため、北緯85度以北(北緯85度〜北緯90度)と、南緯85度以南(南緯85度〜南緯90度)は存在しないとしました。したがって、モニターの最上部は「北緯85度」、最下部は「南緯85度」とし、「北緯85度」と「南緯85度」がつながっているとします。
キャラクターや乗り物が移動する速度は、球体である「惑星Z」で動く速度を2次元のモニター上で表現します。したがって、見かけの速度は、モニターの上部と下部(北極と南極付近)より、中央付近(赤道)の方が、同じ速度でも移動距離が短くなります。「惑星Z」の半径をRとすると、赤道1周の長さは2πRcos0(=2πR)となり、北緯85度(あるいは、南緯85度)では、1周が2πRcos85°=2πR*0.087となります(図7参照)。このため、同じ緯度上を等速運動する場合、モニターの最上部と最下部(北緯85度上、あるいは、南緯85度上)を横断(1周)するのに1時間かかるとすると、モニターの中央を横切る(赤道上を1周する)には、約11.5時間かかることになります。
上記の世界をキャラクターや乗り物が移動します。
上記の仕様のバグを指摘してください。また、改定案をも示してください。
Copyright © ITmedia, Inc. All Rights Reserved.