マガジン

タワーディフェンスは何を守るゲームか:経路と時間の設計

遊びを見つける

執筆にClaudeを使用しています。

道をつなぐ線、丸い駒、幾何学のタイルからなるパズルの模型。
記事のテーマをもとに制作したAI生成イメージ。実際のゲーム画面ではありません。

敵が通る道が一本あり、その脇にタワーを置ける場所が8か所ある面を考えてみます。画面の端には拠点があり、体力の表示は「10」です。このとき、プレイヤーは何を守っているのでしょうか。素直に答えれば「拠点」ですが、拠点の体力は、守りきれなかった結果として減る数字にすぎません。操作の中身を見ると、プレイヤーがしているのは、敵が拠点に着くまでの間に、どれだけ長く敵を射程の中にとどめるかの調整です。 この記事の仮説は、「タワーディフェンスが守っているのは拠点ではなく、敵を削れる時間である」というものです。その時間は、敵の道とタワーを置ける場所の位置関係でほぼ決まります。道と置ける場所の関係が、プレイヤーに許される選択の数と質を決めているとも言えます。 仮説が正しいかどうかは、読者が自分の遊んでいる面で数えれば確かめられます。必要なのは方眼紙か表計算ソフト、そしてタワーの射程や敵の速度が分かるゲームです。数字は読者ご自身の面から取ってください。本文中の数値は、手順を説明するための仮定の例です。

この記事の目次
  1. 分析の準備:何を記録するか
  2. 数える①:道とスロットの位置関係を長さにする
  3. 数える②:長さを時間に、時間をダメージに換える
  4. 選択の構造を読む:「どこ」「何」「いつ」
  5. 失敗しやすい点
  6. 次の行動

分析の準備:何を記録するか

まず、用語を決めておきます。

  • 経路:敵が通る道のことです。マス目のゲームならマスの列、自由移動のゲームなら線として扱います。
  • スロット:タワーを置ける場所です。マス目なら置けるマス、自由配置なら候補地点を自分で選びます。
  • 射程:タワーが攻撃できる範囲です。多くは中心からの半径で表されます。
  • 滞在時間:1体の敵が、あるタワーの射程の中にいる時間です。

記録する対象は、スロットごとの次の4項目です。

  1. 経路からの距離(マス単位)
  2. 射程内にある経路の長さ(マス単位)
  3. 敵の移動速度(マス/秒)
  4. 滞在時間と、そこから見積もるダメージ量

ゲームに速度や射程の数値が表示されていない場合は、無理に推測しないでください。敵が1マス進むのにかかる秒数をストップウォッチで数回測り、平均を取る方法で十分です。測る回数は、少なくとも3回以上を目安にしてください。数値が公開されていないものを断定する必要はなく、「自分の計測では1マス約何秒」と記録しておけば足ります。

数える①:道とスロットの位置関係を長さにする

最初に、各スロットが経路のどれだけを射程に収めているかを数えます。

手順は次のとおりです。

  1. 面の全体を方眼紙に写し、経路とスロットに番号を振ります。
  2. スロットごとに、射程の円(またはゲームの示す範囲)を書き込みます。
  3. その円の内側に入っている経路のマス数を数えます。斜めや端で半分欠けたマスは、0.5として数えると決めておきます。
  4. スロット番号、経路からの距離、射程内のマス数を表に書きます。

直線の道の場合は、数えなくても計算で見当が付きます。射程の半径をr、経路までの距離をdとすると、射程内に入る道の長さは 2×√(r²−d²) です。仮に r=3 マスとして並べると、次のようになります。

  • 0(道の真上に近い)、射程内の道の長さ(概算):6
  • 1、射程内の道の長さ(概算):約5.7
  • 2、射程内の道の長さ(概算):約4.5
  • 3、射程内の道の長さ(概算):0(射程の端に触れるだけ)

距離が1から2に離れても、長さの減り方は緩やかです。3に近づくと急に落ちます。つまり、道から少し離れた場所でも、それほど損をしないことが分かります。この性質は、置ける場所が道の両側にある面で効いてきます。

曲がり角の場合は、事情が変わります。道が折れ曲がる内側にタワーを置くと、直線の式より多くの経路が射程に入ります。道が1か所ではなく2方向から射程の円を横切るためです。この効果は式で出すより、方眼紙の上で数えるほうが確実です。自分の面で、角の内側と直線部分の中央を比べてください。

数える②:長さを時間に、時間をダメージに換える

射程内の道の長さが分かったら、時間に換算します。

滞在時間(秒)= 射程内の道の長さ(マス)÷ 敵の速度(マス/秒)

仮定の例です。射程内の道が6マス、敵の速度が毎秒2マスなら、滞在時間は3秒です。タワーの攻撃力が毎秒10ダメージなら、1体あたり最大で30ダメージを与える見積りになります。敵の体力が100なら、このタワー1基では足りません。ここから、他のスロットの合計で足りるかを見ていくことになります。

ここで注意が必要です。この見積りは「最大」です。攻撃の間隔、弾の飛ぶ時間、敵を狙う優先順位によって、実際の与ダメージはこれより小さくなる場合があります。見積りは、スロットどうしの優劣を比べるための物差しとして使い、実際の戦果は自分のプレイで確かめてください。

次に、減速の効果を見ます。敵を遅くするタワーは、攻撃力そのものを上げません。その代わりに、射程内の全タワーの滞在時間を延ばします。たとえば敵の速度が毎秒2マスから1マスになれば、同じ6マスの滞在時間は3秒から6秒になります。減速を置く場所は、他のタワーの射程が重なる区間のほうが得になる、と考えられます。この考え方が当てはまるかどうかは、自分の面で、減速の有無による合計の見積りを比べて確かめられます。

選択の構造を読む:「どこ」「何」「いつ」

数字がそろったら、選択の構造を読みます。タワーディフェンスのプレイヤーが決めているのは、次の3つです。

  • どこに置くか:経路との位置関係で、滞在時間が決まります。
  • 何を置くか:射程、攻撃力、減速や範囲攻撃などの性質が決まります。
  • いつ置くか:資源に限りがあるため、早く置くか、貯めて強い物を置くかの選択になります。

この3つのうち、「どこ」の選択肢の広さを決めているのが、敵の道と置ける場所の関係です。自分の表で次の点を見てください。

  • スロットごとの差が大きいか:全スロットの射程内の道の長さがほぼ同じなら、「どこ」の選択にほとんど意味がありません。差が大きければ、良い場所と悪い場所がはっきりします。
  • 良い場所が1つに決まるか:最も長いスロットが他を大きく引き離していれば、迷う余地は少なくなります。上位がいくつか拮抗しているほうが、選ぶ面白さが残ります。
  • 良い場所どうしが射程を共有するか:重なる区間があれば、同じ敵に複数のタワーが当たります。減速と火力の組み合わせが生まれやすくなります。
  • 良い場所が経路の序盤か終盤か:序盤に集中していれば、敵を早く削れる代わりに、すり抜けた敵への備えが薄くなります。終盤に集中していれば、拠点に近い分だけ失敗の代償が大きくなります。

つまり、表を見て「差があり、上位が拮抗し、序盤と終盤に良い場所が分かれている」面は、選択の構造が豊かだと言えます。逆に、差がなく置けば置くほど強くなるだけの面は、判断より作業の比重が大きくなります。もちろん、どちらが好みかは人によって異なります。ここで示すのは、感じた面白さの理由を言葉にするための物差しです。

経路そのものが変えられるゲームもあります。置いたタワーが道をふさぎ、敵が回り道をする作りです。この場合、「どこ」の選択は、滞在時間だけでなく経路の長さも変えます。固定経路の面と、可変経路の面で同じ表を作り、スロットの価値がどう動くかを比べてください。可変経路では、置くたびに表を作り直す必要があります。この手間の多さが、可変経路の難しさと奥深さの表れです。

失敗しやすい点

分析がずれやすい箇所を挙げます。

  • 敵が1体か群れか:群れの場合、先頭の敵と後続の敵で滞在時間が異なります。範囲攻撃は、群れが重なるほど有利になります。1体を基準に表を作ったら、群れでの見え方は別に確かめてください。
  • 飛行する敵:経路を無視して直進する敵がいるゲームでは、経路の長さを基準にした表がそのまま使えません。その種類の敵だけ、別の表にしてください。
  • 射程の見方:画面に表示される円と、実際の判定が少しずれるゲームもあります。数えた結果と体感が食い違うときは、計算のミスだけでなく、判定の仕様も疑ってください。
  • 資源の制約を忘れること:どれだけ良いスロットでも、置くための資源がなければ使えません。表は「置けたら」の比較であり、「置ける順番」は別に考える必要があります。
  • 1回の記録で結論を出すこと:敵の速度の計測も、戦果の確認も、複数回行って平均を見てください。1回だけの結果で面全体の性質を決めないようにします。

次の行動

遊んでいるタワーディフェンスを1面選び、スロットごとの「射程内の道の長さ」と「滞在時間」を表にしてみてください。いちばん長いスロットと短いスロットの差、上位が何か所拮抗しているかを見れば、その面の選択の構造が言葉にできます。

作る側の方は、ゲームを組む前に、紙の上で経路とスロットを置き、同じ表を埋めてみてください。差が小さすぎれば位置を動かし、差が大きすぎれば別のスロットを足す、という調整が数字で行えます。完成したHTMLゲームは、アソバースにHTMLまたはZIPでアップロードして公開できます(容量は20MiB以内)。