Minecraft【作るゲーム】1vs1PVPバトル。No.9

2024-09-10

Java版1.21、統合版はv1.21.2で動作確認。

ランダムに出現する、6つの職業ガチャで戦う! 1対1のプレイヤー対戦ゲームを作ります。

1vs1PVPバトルv1.20。

1vs1バトルに必要な機能はそのまま、装置を簡略化しました。コマンドも分かりやすように再配置。ステージや装備ガチャも増設可能な回路にしました。初期設定では、鬼ごっこにならないよう小さめのステージにしています。装備ガチャでは、アイテムや地形を使ったテクニックバトルが出来るよう調整しました。難しいコマンドは使っていませんが、制作手順が多いため上級者向けの装置となります。同じ操作方法での対戦を推奨。

※記事内容を大幅に変更しました。うまく表示されない場合は、ブラウザのキャッシュをクリアしてください。

 

◻︎装置の特徴
・tagを使ったプレイヤー管理。
・ストラクチャーブロックを使ったステージ復元。
・増設可能な回路。
・中身が変わる装備ガチャ。

 

更新履歴
2024-7-2/装置の簡略化とコマンドの再配置。ステージも追加しました。
2023-3-2/新設計!コマンドブロックを大幅に減らし、統合版の新コマンドにも対応しました。

 

完成動画。v1.20

旧式/ v1.0はこちら。 v1.1はこちら

 

 

目次

1.作成準備
・ログの非表示。
2.コマンドブロックの設置
3.1vs1PVPバトル装置全体図
・防具立ての設置。・スコアボードの作成。
4.バトルステージ
・バリアブロック・バトルエリアの検知。・ステージの土台。・Java版専用。
5.ロビー
・ホーム、エントリーポイント。
6.プレイヤー検知
・赤と青。・時間切れ。
7.タイマーと装備ガチャ
・タイマー。・装備ガチャ。・樽の中身。
8.リセット装置
・クリアと復元。
9.エントリー装置
・ゲーム開始。
10.勝敗判定
・結果を表示。
11.仕上げ
・ステージ作り。
12.遊び方
・操作方法。
13.ワールドデータとスキン
・完成データのダウンロード。

 

※「as」や「minecraft:」などのコマンドは簡略化しています。一部のコマンド、マルチプレイやサーバーでは必要な場合があります。

 

作成準備

ログの非表示。

◻︎ログの非表示と各種ブロックを入手。

/gamerule commandBlockOutput false
/give @s command_block
/give @s structure_block

 

コマンドブロックの設置

コマンドブロックは画像に合わせて配置。「ブロック種類」「レッドストーン」を変更します。 変更がある場合は、個別に解説していきます。

◎配置したコマンドブロックの状態/すべて無条件。

コマンドブロックの色 ブロックの種類 レッドストーン
黄色 インパルス 動力が必要
青色 チェーン 常時実行
紫色 リピート 常時実行

 

1vs1PVPバトル装置全体図

大きく分けると3つのエリアがあり、コマンドブロックは解説しやすいように広げてあります。装置は開始点座標(0 -60 0)を基準に、南が正面がになるよう設置にしています。座標を合わせてブロックを設置していくと、コマンドはコピー&ペーストで作れます。

開始点は座標(0 -60 0)。※ストラクチャーブロックは目安。

❶バトルステージ ❷ロビー ❸ゲーム回路

1vs1PVPバトル装置を3つのエリアに分けて作ります。

 

「あ」は座標(24 -60 20)。※ストラクチャーブロックは目安。

◻︎ゲーム回路

❹プレイヤー検知 ❺タイマーと装備ガチャ ❻リセット装置 ❼エントリー装置 ❽勝敗判定

ゲーム回路は5つの装置に分けて作ります。

 

◻︎南向きを確認するには
ストラクチャーブロックを設置して、境界線の青い線が伸びる方が南。※赤い線は東。

 

防具立ての設置。

❹プレイヤー検知に「1vs1」と名前を付けた防具立てを設置。※タグを使ってもOKです。

【Java版】

/summon armor_stand 24 -60 20 {CustomName:"\"1vs1\""}

【統合版】

/summon armor_stand 1vs1 24 -60 20

 

スコアボードの作成。

2種類のスコアボードを作成。「count」は、タイマー、勝敗装置、装備ガチャ、ステージ選択に使用。「Time」は残り時間をサイドバーに表示します。さらにモブがアイテムを落としたり、即時リスポーン、リスポーン位置がずれないように、ゲームルールを変更します。

【Java版/統合版 共通】

/scoreboard objectives add count dummy
/scoreboard objectives add Time dummy
/scoreboard objectives setdisplay sidebar Time
------
/gamerule doImmediateRespawn true
/gamerule doMobLoot false
/gamerule spawnRadius 0

 

バトルステージ

バリアブロック。

バリアブロックを使って地面と壁を作成。中を空洞にしてステージにします。

「A」は座標(0 -62 0)。

【Java版/統合版】共通

①/fill 0 -62 0 16 -41 41 barrier
②/fill -1 -60 -1 17 -58 42 barrier
③/fill 1 -60 1 15 -41 40 air
④/fill 0 -61 0 16 -61 41 polished_andesite

バトルステージの大きさは、X:(17)、 Y:(22)、 Z:(42)。※②地面から高さ3ブロック分の壁を増設。検知範囲が広い統合版で誤作動を防ぐため。 座標(0 -60 0)に開花したツツジの葉を設置。

 

バトルエリアの検知。

❶バトルステージ内のプレイヤー検知するため、引数を使用します。高さ(dy=)は24ブロック。xとy軸の座標を確認(バリアブロックを含む)。

❷散布エリア
「A」の座標1ブロック下から、16×41ブロックの範囲(引数)。
@a[x=0,y=-63,z=0,dx=16,dy=24,dz=41]

 

ステージの土台。

バトル開始時にプレイヤーをテレポート。装備ガチャの棚を作ります。色付きコンクリートを設置。

「T1」は座標(8 -61 39)。「赤」は座標(6 -59 35)。「T2」は座標(8 -61 2)。「赤」は座標(10 -59 6)。

◎土台の保存

「A」の座標(0 -62 0)に設置したストラクチャーブロックを、セーブモードに変更。サイズを「X:(17)、Y:(22)、Z:(42)」。名前を「stage1」にして保存します。

 

Java版専用。

ストラクチャーブロックの読み込みに動力が必要なので、コマンドブロックを追加します。

「A」は座標(0 -62 0)。①は座標(0 -62 -2)。②は座標(0 -62 1)。②は動力が必要。

【Java版】

①execute if block 0 -62 0 structure_block
②setblock 0 -62 0 barrier replace

①「A」の座標にストラクチャーブロックがある時、信号を出す。
②信号がある時、「A」の座標をバリアブロックに置き換え。

②のコマンドを入力後、名前を「stage1」で保存します。※①横のコンパレータは、バトルステージが完成したら設置。

 

ロビー

ホーム、エントリーポイント。

バトルにエントリーしたり、終了後に戻ってくる場所(ロビー)を作ります。

「B」は座標(24 -59 39)。「P1」は座標(22 -60 30)、「P2」は座標(26 -60 30)。「い」は範囲座標(19 -61 27)、(29 -61 33)。「う」は範囲座標(22 -60 30)、(26 -59 30)。

「B」を中心に3×3ブロック、高さ2ブロックの足場。「い」は地面下、滑らかな石を設置。

 

◎解説

「B」はホームポイント。装置のリセットに使用。
「P1、P2」はエントリーポイント。プレイヤーが乗った時、タグを付ける。
「い」はキャンセルポイント。タグ付きプレイヤーを「B」へテレポート。

「う」は「P1、P2」にブロックをクローン。バトル中にエントリー出来ないようにします。バトル終了後は2段目だけを削除。範囲座標(22 -59 30)、(26 -59 30)。

それぞれ座標を確認。※ロビーに、スポーンポイントやワールドスポーンも設定しておきます。

 

プレイヤー検知

赤と青。

エントリーポイントや、バトルステージのプレイヤーを検知。

③は座標(20 -60 20)。「え、お」にはレッドストーントーチ。

「え」の上に錆止めされた銅の格子、「お」の上に錆止めされた酸化した銅の格子を設置。

 

【Java版/統合版】共通 1P(赤)

①tag @p[x=22,y=-58,z=30,dx=0,dy=0,dz=0] add aka
②execute at @a[tag=aka,x=19,y=-60,z=27,dx=10,dy=0,dz=6] run tp @a[tag=aka] 24 -58 39 180 0
------
③execute if entity @p[tag=aka,x=0,y=-63,z=0,dx=16,dy=20,dz=41]
④scoreboard players set 勝敗 count 1
⑤tp @a[x=0,y=-63,z=0,dx=16,dy=24,dz=41] 24 -58 39 180 0

【Java版/統合版】共通 2P(青)

⑥tag @p[x=26,y=-58,z=30,dx=0,dy=0,dz=0] add ao
⑦execute at @a[tag=ao,x=19,y=-60,z=27,dx=10,dy=0,dz=6] run tp @a[tag=ao] 24 -58 39 180 0
------
⑧execute if entity @a[tag=ao,x=0,y=-63,z=0,dx=16,dy=20,dz=41]
⑨scoreboard players set 勝敗 count 2
⑩tp @a[x=0,y=-63,z=0,dx=16,dy=24,dz=41] 24 -58 39 180 0

◻︎バトルステージロビー参照。
①⑥ロビー「P1、P2」の上にプレイヤーがいる時、タグ「aka」または「ao」を付ける。
②⑦ロビー「い」の範囲座標にタグ付きプレイヤーがいる時、「B」にテレポート(北向き)。
------
③⑧バトルステージにタグ付きプレイヤーがいる時、信号を出す。
④⑨タグ付きプレイヤーがバトルステージから出た時、「count」の勝敗にスコアをセット。
⑤⑩バトルステージ内のプレイヤーを、ロビー「B」へテレポート(北向き)。

※バトルステージを、後から出た方が勝ち。

 

時間切れ。

残り時間が0になった時、プレイヤーをロビーに戻します。

②③は条件付き。「か」は範囲座標(22 -60 20)、(26 -59 20)。

【Java版/統合版】共通

①execute if score 残り時間 Time matches 0..0
②tp @a[x=0,y=-63,z=0,dx=16,dy=24,dz=41] 24 -58 39 180 0
③scoreboard players set 勝敗 count 3

◻︎バトルステージロビー参照。
①「Time」の残り時間が0になった時、信号を出す。
②バトルステージ内のプレイヤーを、ロビー「B」へテレポート(北向き)。
③「count」の勝敗にスコア3をセット。※時間切れは引き分け。

 

タイマーと装備ガチャ

タイマー。

バトルステージにプレイヤーがいる時、タイマーを起動。

③④は条件付き。

【Java版/統合版】共通

①execute if entity @a[x=0,y=-63,z=0,dx=16,dy=20,dz=41]
------
②execute at @e[name=1vs1] run tp @e[name=1vs1] ~ ~ ~ 0 ~
③scoreboard players set 残り時間 Time 300
④title @a title "START!"
------
⑤execute at @e[name=1vs1] run tp @e[name=1vs1] ~ ~ ~ ~18 ~
⑥execute if entity @e[name=1vs1,y_rotation=0] run scoreboard players remove 残り時間 Time 1
⑦clone 22 -60 20 26 -59 20 22 -60 30

【統合版】④⑤以外はJava版と同じ。

④title @a title START!
⑤execute if entity @e[name=1vs1,rym=0,ry=0] run scoreboard players remove 残り時間 Time 1

◻︎バトルステージ参照。
①バトルステージ内にプレイヤーがいる時、信号を出す。
------
②防具立て「1vs1」の向きを0度(南向き)に回転。
③「Time」残り時間にスコア300をセット。
④タイトルに「START!」と表示。
------
⑤防具立て「1vs1」を1ティックで18度回転。
⑥防具立て「1vs1」の向きが0度(南向き)になった時、「Time」の残り時間を1引く。

◻︎ロビープレイヤー検知(時間切れ)参照。
⑦「か」の範囲座標を、ロビー「う」にクローン。※バトル中は「P1、P2」に乗れないようにします。

 

装備ガチャ。

バトル開始時、ステージに装備の入った樽をランダムに設置します。

樽「C〜H」の座標はコマンド内に記載。

【Java版】

①execute store result score 赤 count run random value 1..3
②execute store result score 青 count run random value 1..3
------
③execute if score 赤 count matches 1..1 run clone 23 -60 15 23 -60 15 6 -58 34
④execute if score 赤 count matches 2..2 run clone 24 -60 15 24 -60 15 6 -58 34
⑤execute if score 赤 count matches 3..3 run clone 25 -60 15 25 -60 15 6 -58 34
------
⑥execute if score 青 count matches 1..1 run clone 26 -60 14 26 -60 14 10 -58 7
⑦execute if score 青 count matches 2..2 run clone 27 -60 14 27 -60 14 10 -58 7
⑧execute if score 青 count matches 3..3 run clone 28 -60 14 28 -60 14 10 -58 7

【統合版】①②以外はJava版と同じ。

①scoreboard players random 赤 count 1 3
②scoreboard players random 青 count 1 3

◻︎バトルステージ(ステージの土台)を参照。
①②「count」の赤、青のスコアを1〜3の範囲でランダムに選ぶ。
③④⑤「count」赤のスコアに合わせて「C、D、E」の樽をステージの土台「赤」の上にクローン。
⑥⑦⑧「count」青のスコアに合わせて「F、G、H」の樽をステージの土台「青」の上にクローン。

 

樽の中身。

樽の中に装備を入れます。バトルが面白くなるように、装備の組み合わせを調整してください。例として、配布ワールドに入れてあるものを紹介します。

◎6種類のマスター装備。

【ソードマスター】攻撃力は高いが守備力は弱い。(溶岩と肉と草ブロック)
【ボウマスター】遠距離戦は強いが接近戦は弱い。(毒矢と移動速度上昇ポーション)
【TNTマスター】当たれば破壊力最強。攻撃手段が少ない。(ガラスと釣竿)
【ガードマスター】守備力が高いが攻撃力は弱い。(弱体化ポーションとクモの巣)
【ポーションマスター】毒ポーションが勝敗を決める!? 操作が難しい。(治癒、力、跳躍ポーション)
【エッグマスター】モブの使い方が勝敗のカギ!? 装備は弱い。(ブロックとツルハシ)

 

リセット装置

クリアと復元。

タグやエフェクトをクリアし、ステージを復元します。

【Java版/統合版】共通 クリア

①execute if entity @a[x=23,y=-59,z=38,dx=2,dy=2,dz=2]
------
②fill 22 -59 30 26 -59 30 air
③tag @a remove aka
④tag @a remove ao
------
⑤gamemode adventure @a
⑥effect clear @a
⑦clear @a

◻︎ロビー参照。
①ロビー「B」にプレイヤーがいる時、信号を出す。
------
②ロビー「う」の範囲座標(2段目)に、空気ブロックを設置。
③④プレイヤーからタグを削除。
------
⑤ゲームモードをアドベンチャーに変更。
⑥⑦エフェクト、持ち物をクリア。

 

【Java版】 復元

⑧scoreboard players set ステージ count 1
⑨execute if score ステージ count matches 1..1 run setblock 0 -62 0 structure_block{mode:"LOAD",name:"stage1"}
------
⑩effect give @a instant_health 1 20
⑪effect give @a saturation 1 20
⑫kill @e[type=!armor_stand,type=!player]

【統合版】 復元 ⑧⑫はJava版と同じ。

⑨execute if score ステージ count matches 1..1 run structure load "stage1" 0 -62 0
------
⑩effect @a instant_health 1 20
⑪effect @a saturation 1 20

◻︎バトルステージ参照。
⑧「count」のステージにスコア1をセット。※乱数コマンドに変更可。
⑨「count」ステージのスコアが1の時、ロードモード「stage1」のストラクチャーブロックを設置。
------
⑩⑪体力、満腹度を回復。
⑫プレイヤーと防具立て以外のエンティティをキル。※スライムなど、一部のエンティティは全て消えません。

 

エントリー装置

ゲーム開始。

タグ付きプレイヤーを検知して、バトルゲームを開始します。

【Java版/統合版】共通

①execute if entity @a[tag=aka]
②execute if entity @a[tag=ao]
------
③tp @a[tag=aka] 8 -60 39 180 0
④tp @a[tag=ao] 8 -60 2 0 0
------
⑤gamemode survival @a[tag=aka]
⑥gamemode survival @a[tag=ao]
⑦kill @e[type=item]

◻︎ロビー参照。
①タグ「aka」の付いたプレイヤーがいる時、信号を出す。
②タグ「ao」の付いたプレイヤーがいる時、信号を出す。
------
◻︎バトルステージ(ステージの土台)参照。
③④タグ付きプレイヤーを「T1、T2」へテレポート(北、または南向き)。
------
⑤⑥タグ付きプレイヤーのゲームモードを、サバイバルに変更。
⑦落ちているアイテムを削除。

 

勝敗判定

結果を表示。

勝敗結果をタイトルに表示します。※引き分けは表示無し。

②④⑥は動力が必要。

【Java版/統合版】共通

①execute if score 勝敗 count matches 1..
------
②execute if score 勝敗 count matches 1
③title @a title "RED WIN!"
------
④execute if score 勝敗 count matches 2
⑤title @a title "BLUE WIN!"
------
⑥scoreboard players set 勝敗 count 0
⑦scoreboard players reset 残り時間 Time

③⑤統合版はダブルクォーテーションマーク「"」無し。

 

①「count」勝敗のスコアが1以上の時、信号を出す。
------
②「count」勝敗のスコアが1の時、信号を出す。
③タイトルに「RED WIN!」を表示。
④「count」勝敗のスコアが2の時、信号を出す。
⑤タイトルに「BLUE WIN!」を表示。
------
⑥「count」勝敗のスコアを0にセット。
⑦「Time」の残り時間をリセット。

 

仕上げ

ステージ作り。

コマンドブロックの動作を確認し、ステージを作り仕上げます。

例)和風ミニ庭園ステージ。

 

左:渓谷。中:ジャングル。右:タイガ。

◎作成ポイント

コマンドブロックは1本のチェーンで繋いでも動作しますが、数が多いと記入したコマンドを探すのにも手間がかかります。修正や変更にも不便なので、分けて作るのがおすすめです。ただし、リピーターやコンパレータを使うと遅延があるので、コマンドの順序には注意が必要です。

※配布ワールドでは一部のコマンドを変更し、地形を生かした3つのステージを追加しました。

 

遊び方

地形やアイテムを使って、1対1でプレイヤー同士が戦うバトルゲームです。

エントリーポイントに、2人が揃うとバトル開始。

 

 

操作方法。

1.赤色、または空色のコンクリートブロックに乗る。※降りるとキャンセル。
2.2人が揃うとバトル開始。ステージに移動します。
3.樽の中のアイテムを使って、5分以内に相手を倒します。
4.相手を倒すか、ステージから出るとバトル終了。

装置はマルチプレイ用です。シングルプレイでは遊べません。

 

ワールドデータ

完成データのダウンロード。

ワールドデータはステージを増やし、コマンドも追加してあります。コマンド入力不要。「開始レバー」を下げると装置が起動します。

◎ダウンロード先/1vs1PVPバトルv1.20

【統合版】1vs1PVPバトルv1.20.mcworld
iOS、Android/Minecraftで開く。Windows/ダブルクリックでインポート。

【Java版】1vs1PVPバトルv1.20.zip
解凍後、ワールド内の「saves」フォルダに入れる。

※二次配布は禁止です。

 

ATERNOSで作るPVPサーバーの紹介ですが、コマンドを使った最小のバトルシステムも紹介しています。ワールドも配布中。