レベルは表にすると調整しやすい
レベルデザインは、ゲームが少しずつ難しくなるように、場面を組み立てる仕事です。レベルをコードではなくデータの表で持つと、数字を変えるだけで、難しさを調整できます。
ラボのゲームも、4つのレベルを1つの表で持っています。
このレッスンのゴール
メモ
レベルをデータの表として表し、星の出現の予定を作れる。
重要な言葉
| ことば | いみ | れい |
|---|---|---|
| レベル | 難しさが同じ、ゲームの1つの段階 | |
| 出現 | 星や敵が、画面に現れること | |
| 倍率 | 元の数に掛ける数 | 1.25 |
| 出現の予定 | どのフレームで何が出るかの一覧 | |
| 難易度曲線 | ゲームが難しくなっていく様子 |
学生が入力するセルは、このプレビューでは空白です。
レベルは表の1行になる
ラボのゲームの LEVELS は、4行の表です。各行に、名前、始まる点数、重力の倍率、出現の倍率が入っています。
今のレベルは、点数が届いた行のうち、いちばん後ろの行です。点数が増えると、次の行に切り替わります。
例: ラボの4つのレベル
| レベル | 始まる点数 | 重力 | 星が出る間隔 |
|---|---|---|---|
| Drizzle | 0 | 0.150 | 50フレームごと |
| Shower | 5 | 0.210 | 40フレームごと |
| Storm | 12 | 0.270 | 31フレームごと |
| Meteors | 20 | 0.360 | 25フレームごと |
学生が入力するセルは、このプレビューでは空白です。
ラボで、4つのレベルを計算する
ラボのスクリプト levels.py は、game.js の表と基準の数を読み、各レベルの重力と間隔を計算します。スクリプトが出す言葉は英語です。
Drizzle from score 0 gravity 0.150 a star every 50 frames のような行が、4つ出ます。
4つのレベルを計算する
docker exec jupyter python3 steps/levels.pyここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
例: 点数からレベルを選ぶ
<p id="out"></p>
出現の間隔は基準を倍率で割る
ゲームは、フレームの番号を間隔で割った余りが0のとき、星を出します。間隔は、基準の50を、出現の倍率で割って、四捨五入した数です。
倍率1.25なら40、1.6なら31、2なら25です。レベルが上がると、間隔が短くなり、星が増えます。
例: 60 fps で1分に出る星の数
| レベル | 間隔 | 1分(3600フレーム)で出る数 |
|---|---|---|
| Drizzle | 50 | 72 |
| Shower | 40 | 90 |
| Storm | 31 | 116 |
| Meteors | 25 | 144 |
学生が入力するセルは、このプレビューでは空白です。
難しさは少しずつ上げる
難易度曲線は、遊んでいる人にとって、ちょうどよい難しさで進むのが理想です。ラボの重力は、0.150、0.210、0.270、0.360と、少しずつ上がります。
出現の予定を、先に表にしておくと、どこで急に難しくなるかが、遊ぶ前に見えます。
よくある間違い
注意
レベルが上がるたびに、すべての数を大きくすればよいと考える人がいます。重力と出現の数を同時に上げると、反応が追いつかない急な坂になります。数は1つずつ上げ、遊んで確かめます。