ゲームを知る

デモ 034難易度曲線

デモを読み込んでいます
上の段はなだらかに、下の段は操作パネルで選んだ形で難しさ(色の線)を上げた 20 面です。挑むたびに上達するプレイヤーのモデル(白い線が腕前)が遊んでいます。赤い帯は 3 回以上やられた面、灰色の帯は着いたときの腕前が難しさを 1 以上上回っていた面です。下のボタンで自分でも 1 回ずつ進められます。ステージをクリックすると、キーボード(スペースで挑む、N で次の人)でも操作できます。

第五章 システムとバランスNo.034

難易度曲線

Difficulty Curve別名 難易度カーブ

概要

ゲームを進めるにつれて面ごとの難しさをどう上げていくかを、面の順に並べた線で表したもの。プレイヤーは遊ぶうちに上達するので、難しさを上げなければ手応えがなくなる。上達より速く上げれば、やられ続けて先へ進めなくなる。上達に合わせて少しずつ上げるのを基本にし、山場の後に少し易しい面を置いて起伏を付ける。

使われる場面

面が順に並ぶアクションゲーム
面ごとの敵の数や速さを面の順に並べ、1 面ごとの上げ幅を決める。章の終わりに山場の面を置き、次の章の最初の面は少し易しくする。
敵が波で押し寄せる戦い
波ごとの敵の数と強さを決める。後の波ほど強くし、強い波の次には数の少ない波を挟む。
パズルの問題の並び
解くのに要る手順の数や、組み合わせる規則の数で難しさを上げる。新しい規則を入れた問題の次は手順の少ない問題にする。
時間とともに敵が強くなるゲーム
面の区切りがないので、経過時間を横軸にして敵の強さの線を描く。上がり方が途中で急になっていないかを確かめる。
難易度の選択
易しい、ふつう、難しいのように段階を用意し、段階ごとに難しさの線を 1 本ずつ引く。

判断基準

こういうときこうする
ある面から急にやられる回数が増え、先へ進めない面ごとの難しさを一覧にして線を描き、前の面との差がほかより大きい所を探す。その上げ幅を手前の数面に分けて少しずつ上げる。
序盤が簡単すぎて退屈最初の数面から難しさを上げ始める。教えることのない面が続くなら、その面を減らす。
後半の面が前半と同じように越えられて、手応えがない後半の上げ幅を大きくするか、それまでに出した敵や仕掛けを組み合わせた面を入れる。
難しさが一本調子に上がり、同じことの繰り返しで飽きる数面ごとに新しい要素や組み合わせを入れた山場の面を置き、その次の面を少し易しくする。易しくするのは山場の直後の 1 面にとどめる。
山場の面でやられ続ける山場の難しさを前後の面より少し高い程度まで下げる。山場の手前に「チェックポイント」を置く。
敵の体力などを面ごとに同じ割合で掛けて上げていて、後半が急に難しくなる掛ける割合を小さくするか、同じ量を足して上げる。数値と遊んだときの難しさは比例しないので、変えた後に遊んで確かめる。
新しい要素が出る面でやられ続ける新しい要素を入れる面では、ほかの難しさ(敵の数や速さなど)を上げずにおくか少し下げる。
上手な人には簡単すぎ、慣れていない人には難しすぎる難易度を選べるようにするか、「動的難易度調整」でやられ続けたときに少し易しくする。上手な人向けの難しい挑戦は寄り道や追加の目標に置く。

遊んでこう感じたら

指示の例

  • 9 面目から敵が急に倍に増えて、何度やっても先へ進めない。難易度曲線を見直して、9 面目で一度に増やしている敵を 5 面目から 12 面目にかけて 1 面に 1 体ずつ増やして

  • 最初の 5 面は敵が遅く、簡単すぎて退屈。難易度曲線の出だしを変えて、2 面目から敵の速さを 1 面ごとに 5% ずつ上げて

  • 難しさが同じ調子で上がるだけで、同じことの繰り返しで飽きる。難易度曲線を上下を繰り返す形にして、4 面ごとに新しい敵を入れた山場の面を置き、その次の面は敵の数を 2 割減らして

  • 後半の面になると敵が急に倒せなくなる。難易度曲線の後半が急なので、敵の体力を面ごとに掛けて増やすのをやめて、1 面ごとに最初の体力の 1 割ずつ足して増やして

  • 慣れていない人は途中で詰まり、上手な人は退屈している。難易度曲線はそのままにして、始めるときに易しい、ふつう、難しいを選べるようにし、易しいでは敵の数を 3 割減らして

詳細

面ごとの難しさを並べた線

面が順に並ぶゲームでは、プレイヤーは 1 面目から順に面を越えていく。面ごとに敵の数や速さ、攻撃をよけられる時間の短さが違い、越えるのに要る腕前も違う。この難しさを面ごとの高さで表し、面の順に並べると、ゲーム全体の難しさの上がり方が一本の線になる。この線を難易度曲線と呼ぶ。

プレイヤーは遊ぶうちに上達する。1 面目と同じ難しさの面を並べ続けると、後の面ほど腕前が難しさを上回り、手応えがなくなる。反対に、上達より速く難しさを上げると、腕前が追いつかず同じ面でやられ続ける。そのため、難易度曲線は難しさの線だけでは決められず、プレイヤーの腕前がどう上がるかと比べて決める。

デモのプレイヤーのモデル

デモの 2 つの段はどちらも 20 面のゲームで、違うのは面ごとの難しさの付け方だけである。上の段は 1 面目の 1 から 20 面目の 7 まで同じ幅ずつ上げる。下の段は操作パネルで選んだ形で上げる。

白い腕前の線は、同じ規則で上達するプレイヤーのモデルに段ごとに遊ばせて描いている。モデルの規則は次のとおりである。値はこのデモで決めたもので、遊んだ人を測ったものではない。

  • 難しさと腕前:同じ目盛りの値で表す。1 面目の難しさとモデルの最初の腕前は、どちらも 1 である。
  • 越える確率:1 回挑んで面を越える確率は難しさから腕前を引いた差で決まる。差が 0 なら 73%、0.5 なら 50%、1 なら 27%、2 なら 5% である。腕前が難しさを 1 上回っていれば 95% になる。
  • 上達:越えてもやられても、1 回挑むごとに腕前が 0.2 上がる(操作パネルの上達の速さが「ふつう」のとき。「ゆっくり」は 0.12、「速い」は 0.35)。やられたら同じ面に挑み直し、途中でやめない。
  • 乱数:面ごとに別のシード付きの乱数を使い、2 つの段で同じ列を使う。同じ人が同じ面に n 回目に挑むとき、どちらの段でも同じ値を引く。越えるかどうかは、その値と、その段での難しさと腕前の差で決まる。

段の帯はモデルの遊び方から次のように決めている。

  • やられ続けた面:3 回以上やられた面。赤い帯を敷く。
  • 手応えのない面:着いたときの腕前が難しさを 1 以上上回っていた面。1 回で越える確率が 95% 以上になる。灰色の帯を敷く。

下のグラフは同じモデルで 300 人が遊んだときの、20 面を越えるまでの挑戦の回数の分布である。自動再生で見せているのは、この 300 人のうちの 3 人である。その人が 20 面を越えると、グラフの ▼ がその人の回数を指す。以下の数値は操作パネルが既定のとき(下の段は「途中で急」で、最後の面の難しさは 7、上達の速さは「ふつう」)のものである。

難しさを上げない場合

操作パネルで下の段を「上げない」にすると、20 面すべての難しさが 1 のままになる。モデルの腕前は挑むたびに上がるので、7 面目からは 300 人の全員で手応えのない面になる。手応えのない面は 1 人あたり 14.8 面である。20 面を越えるまでの挑戦の回数は平均 20.9 回で、ほとんどの面を 1 回で越えている。

プレイヤーが上達する限り、難しさを上げない面の並びは後になるほど簡単になる。「簡単すぎて退屈」という感想が後半の面に集まるなら、後半の難しさが上がっていないか、上げ幅が上達に追いついていない。

上達に合わせて上げる

上の段では難しさが 1 面ごとに約 0.32 上がる。モデルの腕前は 1 回挑むごとに 0.2 上がるので、離されずについていくには 1 面あたり 1.6 回ほど挑むことになる。300 人の平均では 20 面を越えるまでに 30.1 回挑んでいて、1 面あたり 1.5 回である。着いたときの難しさと腕前の差は、どの面でも平均 0〜0.3 にとどまる。腕前の線は難しさの線のすぐ下を追いかける。やられ続けた面は 1 人あたり 0.6 面、手応えのない面は 0 面である。

なだらかに上げても、運が悪ければやられ続ける面は出る。自動再生の 3 人目は上の段の 11 面目で 3 回やられる。

上げる量は上達の速さに合わせて決める。操作パネルで下の段を「なだらか」にして最後の面の難しさを変えてみると、帯がほとんど出ないのは 5〜7 のあいだ(1 面ごとの上げ幅は 0.21〜0.32)である。この範囲では、やられ続けた面も手応えのない面も 1 人あたり 0.6 面以下になる。3 にすると手応えのない面が 11.5 面、10 にするとやられ続けた面が 3.1 面になる。実際のゲームでどれだけ上げれば上達に合うかは、ゲームと遊ぶ人によって変わるので、遊んだ人の記録で確かめる(後の「線の描き方と確かめ方」を参照)。

途中で急に上げる場合

下の段の「途中で急」は、8 面目までは難しさを 1 のままにする。9 面目から 12 面目までの 4 面で、1 面ごとに 1.5 ずつ上げて 7 にする。最後の面の難しさは上の段と同じ 7 で、違うのは上げ方だけである。

8 面目までは難しさが上がらないので、モデルの腕前が先に上がる。7 面目と 8 面目は 300 人の全員で手応えのない面になる。

9 面目からは難しさが 1 面ごとに 1.5 上がり、1 回挑むごとに 0.2 しか上がらない腕前を引き離す。着いたときの差は平均で 11 面目が 2.0、12 面目が 2.3 まで開く。差が 2 のとき、1 回で越える確率は 5% である。モデルはやられるたびに少しずつ上達して、何度目かで越える。1 人あたりのやられた回数の平均は 11 面目で 4.9 回、12 面目で 6.1 回になる。自動再生の 1 人目は 11 面目で 7 回、13 面目で 5 回やられ、2 人目は 12 面目で 9 回やられる。

急な所を越えた後は難しさが 7 のまま上がらないので、また腕前が難しさを上回る。20 面目は 300 人のうち 237 人で手応えのない面になる。300 人の平均で、やられ続けた面は 2.2 面、手応えのない面は 4.6 面である。どちらも上の段(0.6 面と 0 面)より多い。300 人の挑戦の回数は上の段が 26〜34 回、下の段が 32〜41 回である。

上げる量が同じでも上げる所が偏ると、手前では手応えがなく、急な所ではやられ続け、越えた後はまた手応えがなくなる。「急に難しくなって先へ進めない」という感想が出たら、面ごとの難しさを並べて線を描き、前の面との差がほかより大きい所を探す。見つけた上げ幅は手前の面に分けて少しずつ上げる。

上達の速さの違い

同じ難易度曲線でも、上達の速さが違えば帯の出方が変わる。操作パネルで上達の速さを「ゆっくり」にすると、上の段のなだらかな線でもやられ続けた面が 1 人あたり 3.7 面になり、挑戦の回数は平均 45.3 回に増える。「速い」にすると、手応えのない面が 7.5 面になる。挑戦の回数は平均 22.1 回で、ほとんどの面を 1 回で越える。

1 本の線をどの人の上達にも合わせることはできない。上達の速さの違いは難易度の選択と「動的難易度調整」で補う。難易度の選択では、易しい、ふつう、難しいのように段階を用意する。段階ごとに難しさの線を 1 本ずつ引く。「動的難易度調整」は同じ面でやられ続けたら少し易しくするように、遊んでいる様子に合わせて難しさを変える。上手な人向けの難しい挑戦は、先へ進むのに越えなければならない面ではなく、寄り道や追加の目標に置く。そうすれば、慣れていない人は避けて先へ進める。

上下を繰り返す形

操作パネルの「上下を繰り返す」は、上の段と同じなだらかな線を基にする。4 面ごとに難しさを 1 だけ高くした山場の面を置き、その次の面を 1 だけ低くする。4、8、12、16 面目が山場で、5、9、13、17 面目が易しい面である。

300 人の平均で、やられ続けた面は 1.4 面、手応えのない面は 3.0 面である。どちらもなだらかな線より多い。やられ続けた面の 9 割近くは山場の面で、手応えのない面のほとんどは山場の次の易しい面である。山場でやられた分だけ腕前が上がっているので、次の易しい面は 300 人の 96% が 1 回で越える。

このモデルが数えているのは難しさと腕前の差だけである。山場で新しい要素や組み合わせに挑み、次の易しい面で覚えたことを失敗を気にせずに使う。こうした起伏の効き目はモデルの数には表れない。難しさが同じ調子で上がるだけの並びで「同じことの繰り返しで飽きる」という感想が出たら、数面ごとに山場の面を置き、その次の面を少し易しくする。デモで見えるとおり、山場ではやられる回数が増え、次の易しい面は手応えのない面になる。そのため、山場と易しい面は次のように置く。

  • 山場は前後の面より少し高い程度にする。山場でやられ続けるなら、山場の難しさを下げるか、山場の手前に「チェックポイント」を置く。
  • 易しくするのは山場の直後の 1 面にとどめ、その次の面からは元の線に戻す。

難しさを何で上げるか

デモでは難しさを 1 つの値で表したが、実際のゲームではいくつかの要素を組み合わせて上げる。

  • 敵の数:同時に相手にする敵を増やす。
  • 速さ:敵や弾の速さ、足場の動く速さを上げる。
  • 猶予の短さ:攻撃をよけられる時間、足場が崩れるまでの時間、制限時間を短くする。
  • 組み合わせ:別々の面で出していた敵や仕掛けを同じ場所に出す。

新しい要素を入れた面では、その要素に慣れること自体が難しさになる。そのため、新しい要素を入れる面では、ほかの要素を上げずにおくか少し下げる。新しい要素の見せ方は「起承転結の面構成」と「チュートリアル」で扱う。

いくつもの要素を同じ面で一度に上げると、1 面あたりの上げ幅が大きくなり、デモの「途中で急」のような段差ができる。章の変わり目で敵の数と速さと体力をまとめて上げる作りが、その例である。1 面で上げる要素は 1 つか 2 つにし、ほかの要素は前後の面に分けて上げる。

数値を掛け算で上げると、後の面ほど 1 面あたりの上げ幅が大きくなる。敵の体力を 1 面ごとに 1.2 倍にすると、20 面目の体力は 1 面目の約 32 倍になる。19 面目から 20 面目の 1 面だけで、1 面目の体力の 5 倍以上増える。1 面ごとに 1 面目の体力の 2 割ずつ足すと、20 面目の体力は 1 面目の 4.8 倍で、1 面あたりの増え方は最後まで同じである。ただし、数値の大きさと遊んだときの難しさは比例しない。体力を 2 倍にすると、同じ攻撃で倒すまでの時間は 2 倍になるが、やられる回数がどれだけ増えるかは敵の攻撃の強さや数によって変わる。数値を変えたら、遊んで確かめる。

線の描き方と確かめ方

AI に作らせたゲームでは、面ごとに難しさを決めている数値(敵の数、速さ、猶予、体力など)を面の順に一覧にさせる。一覧を線にすると、上げ幅がほかより大きい所や、上がらないまま続く所が見える。

ただし、一覧からわかるのは難しさの線だけで、プレイヤーの腕前の線はわからない。腕前との差は遊んだ人の記録から数える。面ごとに越えるまでに挑んだ回数を記録しておく。デモと同じ数え方で、やられ続けた人と、1 回で越えた人の割合を出す。やられ続けた人が急に増える面は、難しさの線が上達を追い越した所である。1 回で越えた人がほとんどの面が続く所は、上達が難しさの線を追い越した所である。

// tries[player][stage] は、その人がその面を越えるまでに挑んだ回数(越えていなければ undefined)
const WALL_FAILS = 3; // デモと同じく、3 回以上やられた面を、やられ続けた面として数える

for (let stage = 0; stage < stageCount; stage++) {
  const counts = tries.map((t) => t[stage]).filter((n) => n !== undefined);
  const stuck = counts.filter((n) => n - 1 >= WALL_FAILS).length / counts.length; // やられ続けた人の割合
  const firstTry = counts.filter((n) => n === 1).length / counts.length; // 1 回で越えた人の割合
  console.log(`${stage + 1} 面目`, stuck, firstTry);
}

途中でやめた人はやめた面を越えていないので、この数には入らない。やめた面も記録して、面ごとにやめた人の数を数える。

ほかの用語との関係

「ペース配分」は、一つの面の中で緊張の高い場面と休める場面をどう並べるかである。難易度曲線は、面を並べたゲーム全体で難しさをどう上げていくかである。上下を繰り返す形は山の後に休む所を置く点でペース配分と似ているが、比べているのは緊張の高さではなく難しさと腕前の差である。

「チェックポイント」はやられたときに戻る位置である。難しさを上げる面ではやられる回数が増えるので、チェックポイントの間隔を詰める。

「成長曲線」のようにレベルや装備でキャラクターが強くなるゲームでは、プレイヤーの腕前に加えてキャラクターの強さも上がる。難しさの線は、プレイヤーの腕前と、その面に着くころのキャラクターの強さを合わせたものと比べる。

関連項目