WirelessWire News Technology to implement the future

by Category

ゲームの「道具」としての数学

2025.06.05

Updated by Atsushi SHIBATA on June 5, 2025, 11:55 am JST

私レベルのおじさんとなると「テトリス」を何回作ったか忘れるくらい作ったことがあるものです。新しいプログラミング言語などを学ぶのに必要な要素が詰まっていてちょうどいいから、という理由が大きい気がします。新しい環境を使い始める前に、習作として作ってみるのです。

プログラムを作るときはまず、「テトリミノ」と呼ばれる7種類のピースを定義して、画面上部から落とし、横一列揃った列を消す、というルールを実装します。次のテトリミノを選ぶのには乱数を使います。ただ、乱数の使い方にちょっとしたコツがあります。

面白さを演出するための数学

いつだったか、何度も作っているテトリスが、どうも本家ほど面白くないことに気付きました。次のテトリミノを選ぶのに「0から6まで7種類の数を疑似乱数で生成」していたのですが、すると4つ一線に並んだ「Iテトリミノ」が連続で何度も出てきたりします。100万回テトリミノを落とすと7回連続で同じものが落ちてくることがあるのが乱数の性質です。でも、本家はそういう「落ち方」はしません。

あるとき、エンジニアの知人に「シャッフルしないとダメなんですよ」と教えてもらって頭の中に電球が点りました。そこで、0から6までのテトリミノをいったん並べた上でばらばらに並べ直し、先頭から順番に取り出すことで次のテトリミノを選ぶようにしてみました。すると、確かに本家っぽい落ち方になります。

後で知ったことなのですが、次のテトリミノを選ぶ方法には「公式設定」があり、それがまさにシャッフルする方法なのだそうです。公式設定では、面白さを担保するための「味付け」が、乱数の使い方として組み込まれているのです。

ちなみに、AIに作らせたらどうなるだろうと思って、次のテトリミノを選ばせる部分だけを作らせてみました。GPT-4oは乱数で選ぶ関数を作ります。コーディング能力が高いと言われるo3で試してみると、シャッフルするバージョンを作ってきて、さらに「公式」とコメントまで付けてきました。なかなかやるな。

さて、このままAIでテトリスを作ってリポートしても面白いと思うのですが、今回は数学とゲームの関係性を深く掘り下げた「数学がゲームを動かす!」という書籍を紹介する記事にしたいと思います。数学の専門雑誌「数学セミナー」に掲載されていた連載記事をまとめた本です。

3D CGやAIのように、特定の分野でゲーム関連の数学について解説した書籍は何冊か読んだことがありますが、ジャンルを横断的に扱って数学とゲームの関わりについてまとめた本は珍しいと思います。著者の三宅陽一郎氏と清木昌氏はどちらもゲームとAIという分野で仕事をされてきたスペシャリストで、両氏の守備範囲の広さと知識の深さが垣間見える良書です。

数学でゲームの体験を定義する

最初に取り上げられるのは、オールドゲームとして超有名な「パックマン」です。2019年にゲームに搭載されたAIの始祖として、人工知能の専門誌に掲載されたパックマンの仕様書のいわば「分析記事」です。読んでみると、企画の段階でかなり細かくゲームの「面白さ」に繋がるような要素が、数値やアルゴリズムとして最初から決められていたことがよく分かります。

パックマンを追いかける四種類のモンスターには、それぞれ異なった性格が与えられています。モンスター個々の「追いかける」「先回りをする」「気まぐれに動く」というような性格が、企画書には「アルゴリズム」として表現されているのです。

また、モンスターの動きには「攻撃」「休憩」という二種類のモードがあり、別々の周期で動くようになっています。これによって、ゲーム進行に緊張感の緩急が付くようになっています。最も成功した業務用ゲーム機としてギネスブックにも載っているゲームの「体験」に繋がる仕様が、すべて数値やアルゴリズムとして仕様に定義されていたというわけです。

ウォーシミュレーションとRPG

その次は、戦闘シミュレーションからロールプレイングゲームに繋がる「損害計算」という形で、数学とゲームの繋がりについて解説する章が続きます。19世紀に卓上で戦闘を模して演習に使われた「クリークスシュピール」というウォーシミュレーションゲームの元祖では、サイコロを振って「損失表」を参照することで部隊へのダメージを模擬的に表現します。

20世紀になると、戦場を再現して前もって有効な作戦を立案するために、似たような仕組みが活用され始めます。それをボードゲーム化し「遊び」にしたのがいわゆる「ウォーゲーム」です。そして煩雑な表の参照や計算をプログラムにしてコンピュータゲームとしてのウォーシュミレーションが誕生します。

もともとボードゲームとして遊ばれていた初期のロールプレイングゲームも、実はウォーゲームとよく似た仕組みを取り入れていました。ユニット(キャラクター)へ武器を使った攻撃をしたり、魔法でダメージを与える、または治癒をする、というようなゲーム内の「行為」は、ダイスの数値を元にした計算の結果をパラメーターに反映する、という「計算手順」に置き換えることができます。ボードゲーム版の「TRPG(テーブルトークロールプレイングゲーム)」をコンピュータ上で実現したのが「ウルティマ」で、それがやがて「ドラクエ」のような国産RPGに受け継がれて行きます。

章の最後には、ゲームの難しさ、楽しさに繋がる「損害計算」の極意が明かされます。そして次章では、「大戦略」や「天下統一」など大ヒットコンピュータシミュレーションゲームにかかわった市川淳一氏のインタビューへと続いて行きます。

8章では、対戦ゲームに使われる「レイロレーティング」の解説があります。ランキングやレーティングも、対戦する相手とのマッチングを司っているという意味では、ゲームの体験を定義するために使われる数学の一分野と言えるかも知れません。

動きの演出と数学

アクションゲームをリアルに見せる秘訣は、現実のような「動き」を再現することです。多くのゲームで引力のような物理現象が再現されています。しかし、「ファミコン」のような黎明期の家庭用ゲーム機に搭載されていた8ビットのCPUはとても非力でした。マリオのようなアクションゲームのジャンプなども、計算コストのかかる浮動小数点演算は使われず、整数演算が使われていました。

整数演算を使って実数演算を代替する手法として「プレゼンハムのアルゴリズム」というものがあります。このアルゴリズムを応用すると、低コストな整数演算だけでリアルなジャンプや円を描くような動きを再現したり、ビットマップディスプレイ上に直線のような図形を描くことができます。5章では物理現象を整数演算で再現するこのような仕組みを、「解析」という切り口でアルゴリズムの解説に繋げていて、読んでいて爽快でした。

次の章では、最近のゲームで使われている3Dの物体表現や物理シミュレーションの話が続きます。最近のPCやゲーム機、スマホは計算能力がとても高いので、実数演算をしつつ大量のキャラクターを動かすことができるようになりました。個人が作るようなちょっとしたゲームにも物理シミュレーションが使われています。

少ない計算資源をやりくりしていた昔も今も、いろいろな工夫をしながらリアルなゲームの動きを追求したい、というモチベーションは変わらないのだと思います。そして、手法の根には必ず数学があります。

数学による世界の構築と生成

ゲーム内部に世界を作り出すのも数学が使われます。かつてはゲームの画面を格子状に区切って、事前に準備したブロックを並べるような手法が使われていました。離散的な「マップ」を使って世界を表現し、構築していたのです。ゲームに3Dが使われるようになると、頂点の座標を集めて立体的な地図を作ることで、よりリアルなゲーム世界が作られるようになります。

3Dの地図でゲーム世界が表現されるようになると、必要なデータ量が増えます。特にオープンワールドと言われるタイプのゲームでは、とても大きな範囲のデータを用意する必要があります。

世界で最も売れたゲームとして知られる「マインクラフト」の世界を実寸に直すと五億平方キロメートルにもなり、これは地球7個分の大きさに相当します。ここまで大きなマップとなると、人間の手では作ることができません。このような場合、アルゴリズム的にマップや地形を生成する、という手法が採用されます。

マップの生成とゲームの関連はとても古く、10章でも取り上げられているように「ローグ」にたどり着きます。UNIX端末で遊ばれていたゲームで、英数字のようにターミナルに表示可能なASCII文字だけを使って表現されたダンジョンは、乱数を使って画面を分割することで生成されていました。4章で取り上げられている「ドルアーガの塔」の迷路生成アルゴリズムも、アルゴリズムを使ってゲーム世界となるダンジョンを生成している例の一つです。

似たような手法は、3Dの地形生成にも応用できます。地形を格子状に区切り、隣り合う地点の高さを変えることで地形を生成する「ハイトマップ」や、隆起の方向をベクトルとして揺らがせる「ベクターフィールド」という手法が紹介されています。

また北米で人気のあるオンラインの星間戦争シミュレーションゲーム「Eve Online」では、ゲームの舞台となる「星系」をアルゴリズムで生成しています。まるで宇宙の構造を数式で定義しているような話で、読んでいてとてもスケール感があります。

人間の行動や社会を数学で作り出す

書籍冒頭のパックマンは古典的な手法使って「それらしい」モンスターの動きを再現する手法について、実際に使われた仕様書を元に解説していました。もう少し高度な数学的手法として、10章では地形生成のベクターフィールドの発展として群衆シミュレーションの話題に触れています。

AIに関連する技術についても至る所で触れられています。古典的な手法から遺伝的アルゴリズムや基本的なニューラルネットワークを使った方法など、全体を通して振り返ってみると、AIの歴史を辿るような内容が見え隠れする構成が目立ちます。機械学習を活用した今風のAIはモデルを作るときの計算コストが高いので、リアルタイム性を求められるゲームには使われるケースが少ないようですが、今後は生成AIを含めたいろいろなAI技術が様々なシーンて取り込まれて行くことになるのでしょう。

10章で自動生成アルゴリズムの話題に混じって「シムシティ」の都市形成アルゴリズムについて解説されています。地形や建物、道路などが置かれるユーザーに見えるマップを最上位として、その下に3階層の格子状の数値マップを設ける、という手法を使って、まるで生きた人間が作り出す社会のような状態遷移を作り出す、というシミュレーション手法が使われています。

作者のウィル・ライト自身、ジェイ・フォレスターの著書「Urban Dynamics」からの影響を語っているようなので、社会科学の一分野システム・ダイナミクスからの影響を受けてゲームを作っていたと思われます。コンピュータサイエンスと社会科学を混ぜたようなシミュレーション的手法を活用して、ゲームの世界を作り出しているのです。

ゲームの設計図としての数学

ゲームの面白さを形作る要素はいくつかありますが、一番大事なのはゲームの中に「リアルを感じさせる」ことなのではないでしょうか。自ら考えて動いているようなモンスターの動きであったり、リアルなジャンプだったり、またリアルな世界そのものを生成する手法であったり、プレイヤーがゲームにリアルを見い出す要素はいろいろあります。

9章ではゲームのユーザーインターフェースに関する数学が紹介されています。プレイヤーに一番近いところでも、リアルを演出するために数学が使われているのです。この本を読むと、ゲームのリアルな世界を表現するための「道具」として、数学が使われているということがよく分かります。

様々な事象を数値化し、変化を数式に置き換えることで世界を記述するという意味では、科学も同じように数学を道具として使っています。特に物理で使われる数学とゲームの親和性は高いはずです。実際、力学はゲームのいろいろな分野で応用されていますね。

書籍の最後では、相対性理論を応用したゲーム世界構築、というような話が出てきます。私たちが感じている「時空」とは異なった世界観も、ゲームを使えばリアルに感じることができるのではないかと思えてきて、私はとても楽しく読ませていただきました。

数学が必要になるとき

この本はいろいろな読み方ができます。私は最初から最後まで順番に読みましたが、気になる数学的手法をベースにして読み進めたり、ゲームタイトルを元にしてつまみ読みしても楽しいと思います。インタビューから読む、というのもお勧めの読み方です。

書籍には三つのインタビューが収録されています。一人目は「大戦略」の石川淳一氏、そしてゲームだけでなくテレビ番組のCGなどにも関わったクリエイターの森川幸人氏へのインタビュー。そして、セガの山中勇毅氏のインタビューが真ん中に来ます。

山中氏は、同じ日本評論社から出ている「セガ的 基礎線形代数講座」という書籍の著者でもあります。中山氏が社内で行った数学の勉強会を元にした書籍で、三角関数などの解説から始まり、行列によるベクトル表現、回転、クオータニオンまで、数学的な仕組みを学ぶ内容の本です。

「クオータニオン」というのは、3D空間上にある物体の回転を扱うための「データ構造」の一種です。UnityやUnreal Engineのような3Dゲームエンジンでは、クオータニオンに回転や法線抽出など様々な数値演算を施すことのできるオブジェクトが準備されていて、これを必ず使います。現代的なゲームを作るときに必須となる「道具」の一つです。

道具がなぜ便利かというと、仕組みを理解しなくても使えるから便利なのですね。クオータニオンも道具なので、高校数学くらいは知っていた方が良いと思いますが、ただ使うだけなら、深く仕組みを知っている必要はありません。

では、仕組みを知ると何が嬉しいのかというと、応用が利くようになるのです。既存の手法を越えて新しい手法を産み出したり、よりスマートな手段を見付けることができるようになるのです。

数学は、抽象化の軸となる考え方を与えてくれます。この軸を押さえているかどうかは、「スマートなプログラミング」をする上でとても大事なことなのです。

大学で物理を専攻されて、セガに入ってからプログラミングを学び、3D黎明期の頃ファームウエアを作っていたという山中氏のインタビューを読んでいると、プログラミングに数学は必須ではないけれど、やっぱりあると強いんだな、ということをしみじみと感じるのでした。

WirelessWire Weekly

おすすめ記事と編集部のお知らせをお送りします。(毎週月曜日配信)

登録はこちら

柴田 淳(しばた あつし)

株式会社マインドインフォ 代表取締役。東進デジタルユニバーシティ講師。著書に『Pythonで学ぶはじめてのプログラミング入門教室』『みんなのPython』『TurboGears×Python』など。理系の文系の間を揺れ動くヘテロパラダイムなエンジニア。今回の連載では、生成AI時代を生き抜くために必要なリテラシーは数学、という基本的な考え方をベースにお勧めの書籍を紹介します。

RELATED TAG