更新日:
1. ○と×の床を作る
/fill 0 63 0 9 63 9 minecraft:lime_concrete
/fill 11 63 0 20 63 9 minecraft:red_concrete
左(Xが0〜9)を緑の○の床、右(Xが11〜20)を赤の×の床にします。間を1マス空けておくと、どちらに立っているか分かりやすくなります。座標は自分の場所に合わせて変えます。
2. 問題を出す
/title @a times 10 100 10
/title @a subtitle {"text":"○か×の床に移動してください"}
/title @a title {"text":"クリーパーは雷に打たれると強くなる"}
1行目で表示する時間を決め、2行目で下の小さい文字、3行目で問題を出します。subtitle は title より先に実行します(titleとtellrawで画面表示を作る基本)。
3. 正解の床にいる人にポイントを付ける
/scoreboard objectives add quiz dummy "正解数"
/scoreboard objectives setdisplay sidebar quiz
/scoreboard players add @a[x=0,y=64,z=0,dx=9,dy=3,dz=9] quiz 1
正解が○なら、○の床の上にいる人の正解数を1増やします。x=0,y=64,z=0,dx=9,dy=3,dz=9 は、床の上の空間を表す範囲です。正解が×のときは x=11 にします。範囲の決め方は 決まった範囲に入ったら発動するコマンド にまとめています。
4. まちがえた人を脱落させる
/gamemode spectator @a[x=11,y=64,z=0,dx=9,dy=3,dz=9]
勝ち残り方式にするときは、不正解の床にいる人をスペクテイターモードにします。観戦しながら最後まで見られます。どちらの床にもいない人も脱落にしたいときは、床の外の範囲も同じように調べます。
5. 次の問題の前にリセットする
/tp @a[gamemode=adventure] 10 64 -3
残っている人を両方の床の間の手前にもどしてから、次の問題を出します。ゲーム全体の流れは ミニゲームの作り方 も参考にしてください。
6. ゲームを始める前の準備
/gamemode adventure @a
/scoreboard players reset @a quiz
/tp @a 10 64 -3
全員をアドベンチャーモードにして、前回の正解数を消してからスタート地点に集めます。5のリセットは gamemode=adventure の人だけを戻すので、最初にアドベンチャーモードにしておくのが大事です。
7. 制限時間を付ける
/scoreboard objectives add qtimer dummy
/scoreboard players set #q qtimer 200
問題を出すときに、タイマーを200(20ティック=1秒なので10秒)にします。名前が # で始まるスコアはサイドバーに表示されません。次の3つは、反復・常時実行のコマンドブロックと、その後ろにつないだチェーンコマンドブロックに入れます。
# 反復コマンドブロック
execute if score #q qtimer matches 1.. run scoreboard players remove #q qtimer 1
# チェーン1
execute if score #q qtimer matches 0 run scoreboard players add @a[x=0,y=64,z=0,dx=9,dy=3,dz=9] quiz 1
# チェーン2
execute if score #q qtimer matches 0 run gamemode spectator @a[x=11,y=64,z=0,dx=9,dy=3,dz=9]
# チェーン3
execute if score #q qtimer matches 0 run scoreboard players set #q qtimer -1
タイマーが0になった瞬間に1回だけ判定し、最後に-1にして止めます。正解が×の問題では、チェーン1とチェーン2の x=0 と x=11 を入れ替えます。残り秒数を画面に出したいときは カウントダウンを表示するコマンド を組み合わせます。
8. どちらの床にもいない人も脱落させる
/tag @a remove onfloor
/tag @a[x=0,y=64,z=0,dx=9,dy=3,dz=9] add onfloor
/tag @a[x=11,y=64,z=0,dx=9,dy=3,dz=9] add onfloor
/gamemode spectator @a[gamemode=adventure,tag=!onfloor]
床の間や外に立って答えをごまかす人を防ぎます。いったん全員のタグを外し、どちらかの床にいる人だけにタグを付けて、タグがない人を脱落にします。判定(3と4)の直前に実行します。タグの使い方は tagコマンドの使い方 にまとめています。
9. 正解を発表して優勝者を決める
/title @a title {"text":"正解は ○","color":"green"}
/playsound minecraft:entity.player.levelup master @a[x=0,y=64,z=0,dx=9,dy=3,dz=9]
execute store result score #alive quiz if entity @a[gamemode=adventure]
execute if score #alive quiz matches 1 run tellraw @a [{"selector":"@a[gamemode=adventure]"},{"text":" の優勝!","color":"gold"}]
正解を大きく表示し、正解した人にだけ音を鳴らします。3行目で残っている人数を数え、1人になったら名前をチャットで発表します。勝ち残りではなく正解数で決めるときは、サイドバーの一番上の人が1位です。
うまくいかないときの確認ポイント
- 正解しても点が入らない:範囲のYが床の上(床のY+1)から始まっているか確認します。
- タイトルが出ない:
titleの行を最後に実行しているか確認します。subtitleだけでは表示されません。 - 統合版で使いたい:統合版では、タイトルの文字を
/title @a title 問題文のようにそのまま書きます。範囲の書き方は同じです。
よくある質問
制限時間を付けるには?
問題を出してから決まった時間がたったら判定のコマンドを動かします。リピーターの遅延や、bossbarのタイマーを使います。
正解数が一番多い人を表示できますか?
サイドバーに正解数が並ぶので、一番上の人が1位です。チャットで発表したいときは tellraw で名前とスコアを表示します。
統合版でも作れますか?
床の範囲で判定するしくみは統合版でも同じです。タイトルの書き方だけ違います。