難度の上昇カーブ
適切な速度での難度上昇とはどのようなものだろう。これはプレイヤーに 1 ゲームをどのくらいの長さ遊んで欲しいかに依存する。例えば 1 ゲーム 3 分間を想定したうえで、ゲーム開始時の 2 倍の難度になるとたいていのプレイヤーが脱落する、というゲームにした場合、難度を計算する式として以下が考えられる。
[難度] = sqrt([経過フレーム数] * 0.0001) + 1
フレームは、ゲームでの 1/60 秒を意味する。経過フレーム数は 1 秒で 60、1 分で 3600 となる。sqrt
は平方根を意味する。フレーム数に比例して線形に難度を設定するのではなく、sqrt
を用いることで、ある程度時間が経過した後の難度上昇がおだやかになる。上記の式に、3 分後のフレーム数である 10800 を代入すると難度は 2.04 となり、当初想定の難度が得られることが分かる。
ただ全てのミニゲームでこの難度設定でうまくいくかというとそうとも限らない。場合によってはもっと素早く難度を上げたほうが緊張感が出て良い場合もある。
どのような難度上昇が適切か、この辺の感覚は実際にゲームに適用してみないと分かりにくい。そこで、難度上昇を時間を横軸とした曲線で可視化し、その曲線を調整できる UI を準備し、それをゲームに反映するサンプルゲームを作ってみた(画像クリックでデモページへ)。
右の UI で難度曲線を調整したのち、左のゲーム画面をクリックすると、上から落ちてくる岩を避けるゲームが遊べる。初期設定の曲線は、難度の上昇具合が分かりやすいよう、30 秒で 2 倍と速めの設定になっている。
各難度曲線はその計算式 (sqrt, linear, pow)と上昇具合 (climb)、あと一定時間ごとにがくんと難度が下がるノコギリ波 (saw)の調整ができるようになっている。ノコギリ波の難度曲線はゲーム&ウォッチでも使われている方式で、難度にメリハリを付けるには良い方法だ。また複数のパラメタに対して難度が設定できる。今回の例だと岩の落下速度 (speed)と大きさ (size)だ。
難度に影響を受けるパラメタが複数あると調整はより難しい。ゲームをプレイしてみると分かるが、岩の落下速度(≒ ゲームスピード)が速くなってもプレイヤーの技量でなんとか対処可能だが、岩の大きさがある程度まで大きくなると対応が不可能に感じる。岩が速く落ちてくる分にはマウスさばきでなんとかなるように思えるが、大きい岩が降ってくる状態はどうしようもなく理不尽な印象を受ける。
そのため、岩の大きさは sqrt を用いて難度上昇を抑えて理不尽感を減らし、岩の落下速度は緊張感を持たせるために linear でゲーム序盤からどんどん難しくし、たまにノコギリ波でゆるめる、のような調整が考えられる。
また、このように調整したゲームは、ゲーム開始直後の難度が低く退屈に感じるという欠点もある。その場合、岩の近くを通るとボーナス点が入るなど、プレイヤーが積極的にリスクを取りに行くとリワードが得られるようなメカニクスを導入することで、ゲーム序盤からプレイヤーに緊張感を提供することができる。