PvP作成講座part3 試合開始→カウントダウン→試合終了まで、基本的な流れの作り方【Minecraft】
PvPを自作する講座の第三回です。今回は、試合開始時にプレイヤーをフィールドに配置し、一定時間が経過したら10,9,8…3,2,1とカウントダウンをして、試合が終了したらロビーに戻る、という一連の流れの作り方を解説していきます。以前にカウントダウンタイマーの回路は解説しましたが、あれよりもっとコンパクトで、設定や操作も簡単なので是非お試し下さい。
目次
今回作るPvPの流れやカウントダウンとはどんな物?
前回のPvP作成講座では、簡単にチーム分けできる装置を作りました。今回は、試合を開始してプレイヤーを配置し、一定時間が経過したら試合を終了してロビーに戻る、というPvPの一連の流れを作っていきます。
OPがボタンを押すと試合が始まります。第一回で作った赤/緑/黄/青チームのプレイヤーが、それぞれのチームごとに決まった位置に、バランスよくフィールドに配置されます。と同時に「START!!!」と表示。
一定時間が経過すると、画面中央に「10、9、8、7…」とカウントダウンが表示されます。試合を終了するまでカウントダウンは続きます。もちろん試合の制限時間や文字の色は自由に設定できます。
試合が終了すると、一時的にスペクテイターモードになって戦場を眺めることができます。この間はみんな透明で攻撃することはできません。例えば自分の撃った矢の外れ具合を後から見たりできます。
まずはチームやスコアボードを準備しよう
- PvP作成講座 Part1をお読みになった前提で解説します
//mcthnk.com/display-team-total-killscore/
この記事では、▲のPart1をお読みになった前提で解説を進めていきます。チームを作成したり、スコアをカウントする方法はPart1,2で解説していますので、本格的にPvP制作がしたい方はぜひお読み下さい。
そして今回も新しいスコアボードを作成します。カウントダウン用です。
- 試合の残り時間をカウントするためのオブジェクトを作成するコマンド
- /scoreboard objectives add mcthnkTimer dummy
PvPの基本的な流れを作るのに必要なのは、このスコアボードとチーム4つ[Red,Blue,Green,Yellow]だけです。(キル数の表示など機能を増やすには別途でスコアボードが必要です。)
試合とカウントダウンを開始するコマンド/回路の解説
それでは早速コマンドブロックを配置していきましょう。「A」~「H」までの合計8つのコマンドブロックを、2つづつ分けて設置して回路を繋げます。そして「B」のコマンドブロックにボタンを付けておきましょう。
「A」に入力するコマンド |
---|
/title @a times 5 45 5 ゲームスタート時の「START!」の表示時間を設定します。 |
「B」に入力するコマンド |
/summon armor_stand ~ ~1 ~ {CustomName:”TimerStand”,Marker:1} このコマンドブロックの上に、残り時間をカウントするための防具立てを召喚します。「Marker:1」を付ければクリエイティブモードで叩いても撤去できなくなります。 |
「C」に入力するコマンド |
/title @a title {“text”:”START!!!”,”color”:blue,”bold”:”true”} ゲーム開始の合図の「START!!!」という文章を大きく表示します。 |
「D」に入力するコマンド |
/scoreboard players set @e[type=armor_stand,name=TimerStand,c=1] mcthnkTimer 400 「B」で召喚した「TimerStand」という防具立ての、「mcthnkTimer」スコアを400にセットします。ここで設定した数値÷20が試合時間の秒数になります。 |
「E」に入力するコマンド |
/spreadplayers 赤チームの配置座標x z 0.5 3 false @a[team=Red] 赤チームのプレイヤーをフィールドに配置します。詳細は後述。 |
「F」に入力するコマンド |
/spreadplayers 青チームの配置座標x z 0.5 3 false @a[team=Blue] |
「G」に入力するコマンド |
/spreadplayers 緑チームの配置座標x z 0.5 3 false @a[team=Green] |
「H」に入力するコマンド |
/spreadplayers 黄チームの配置座標x z 0.5 3 false @a[team=Yellow] |
「配置座標x z」と書きましたが、例えばこんなPvP用のフィールドを用意して、赤/青/緑/黄それぞれのスポーン地点を決めます。そこのx座標とz座標だけをspreadplayersコマンドに書くと、指定した座標を中心にプレイヤーがバランスよく配置されます。座標に続いて「0.5 3」と書いていますが、「プレイヤーを0.5ブロック間隔で並べて、最大で3ブロック半径の範囲に配置する」という意味です。
- プレイヤーを配置するspreadplayersコマンドの書き方
- /spreadplayers x座標 z座標 配置間隔 最大半径 チームをまとめるか(true|false) ターゲット
残り時間をカウントダウン→試合終了、ロビーに戻すコマンドの解説
それでは、fillコマンドを使った最速クロックを設置します。今回は横に15ブロックも場所をとるので、東に場所を確保した状態で「X」「Y」のコマンドを入力し、間にレッドストーンブロックを挟んで下さい。
※バージョン1.9以上では、fillクロックは作らずに、fillクロックより下の全てのコマンドをリピート+チェイン(常時実行モード)で実行させて下さい!
「X」に入力するコマンド | /fill ~ ~-1 ~ ~13 ~-1 ~ redstone_block |
---|---|
「Y」に入力するコマンド | /fill ~ ~1 ~ ~13 ~1 ~ stone |
あまりにコマンドブロックの数が多いので、数字を割り振るのは「1」「2」だけにしています。後のピンク色の四角に囲まれたコマンドブロックの内容は、表にまとめたものを次々ペーストしていって下さい。
「1」に入力するコマンド |
---|
/scoreboard players remove @e[type=armor_stand,name=TimerStand,c=1] mcthnkTimer 1 「TimerStand」防具立てが召喚されたら即時に「mcthnkTimer」スコアを減らしていきます。TimerStand防具立てが存在し続ける限り減らし続けます。 |
「2」に入力するコマンド |
/kill @e[type=armor_stand,name=TimerStand,score_mcthnkTimer=-95] mcthnkTimerスコアが-95まで減ったら(つまりゲームが終わった後)防具立てを削除します。 |
以下のコマンドは、スクショでピンクで囲ってあるコマンドブロックに次々貼り付けていって下さい。四角の中ならば順番は動作に関係ありません。 |
/execute @e[type=armor_stand,name=TimerStand,c=1,score_mcthnkTimer_min=206,score_mcthnkTimer=206] ~ ~ ~ title @a times 0 15 5 防具立ての「mcthnkTimer」スコアが206まで減ったら、以降のカウントダウンの表示時間を「START!!!」と違って短めに設定します。 |
/execute @e[type=armor_stand,name=TimerStand,c=1,score_mcthnkTimer_min=205,score_mcthnkTimer=205] ~ ~ ~ title @a title {“text”:”10″,”color”:blue,”bold”:”true”} 表示時間を設定した直後、つまりmcthnkTimerスコアが205まで減ったら「10」と表示。以下は同じようにカウントダウンしていきます。 |
/execute @e[type=armor_stand,name=TimerStand,c=1,score_mcthnkTimer_min=185,score_mcthnkTimer=185] ~ ~ ~ title @a title {“text”:”9″,”color”:blue,”bold”:”true”} |
/execute @e[type=armor_stand,name=TimerStand,c=1,score_mcthnkTimer_min=165,score_mcthnkTimer=165] ~ ~ ~ title @a title {“text”:”8″,”color”:blue,”bold”:”true”} |
/execute @e[type=armor_stand,name=TimerStand,c=1,score_mcthnkTimer_min=145,score_mcthnkTimer=145] ~ ~ ~ title @a title {“text”:”7″,”color”:blue,”bold”:”true”} |
/execute @e[type=armor_stand,name=TimerStand,c=1,score_mcthnkTimer_min=125,score_mcthnkTimer=125] ~ ~ ~ title @a title {“text”:”6″,”color”:blue,”bold”:”true”} |
/execute @e[type=armor_stand,name=TimerStand,c=1,score_mcthnkTimer_min=105,score_mcthnkTimer=105] ~ ~ ~ title @a title {“text”:”5″,”color”:blue,”bold”:”true”} |
/execute @e[type=armor_stand,name=TimerStand,c=1,score_mcthnkTimer_min=85,score_mcthnkTimer=85] ~ ~ ~ title @a title {“text”:”4″,”color”:blue,”bold”:”true”} |
/execute @e[type=armor_stand,name=TimerStand,c=1,score_mcthnkTimer_min=65,score_mcthnkTimer=65] ~ ~ ~ title @a title {“text”:”3″,”color”:yellow,”bold”:”true”} |
/execute @e[type=armor_stand,name=TimerStand,c=1,score_mcthnkTimer_min=45,score_mcthnkTimer=45] ~ ~ ~ title @a title {“text”:”2″,”color”:yellow,”bold”:”true”} |
/execute @e[type=armor_stand,name=TimerStand,c=1,score_mcthnkTimer_min=25,score_mcthnkTimer=25] ~ ~ ~ title @a title {“text”:”1″,”color”:yellow,”bold”:”true”} |
ごめんなさい、一個余分にコマブロを設置してスクショを撮っちゃいました! つまりスクショ通りに作ると一つのコマンドブロックは空白になります。申し訳ないです… |
/execute @e[type=armor_stand,name=TimerStand,c=1,score_mcthnkTimer_min=5,score_mcthnkTimer=5] ~ ~ ~ title @a times 5 45 5 ゲーム終了時の「FINISH!!!」と表示する時間を設定します。 |
/execute @e[type=armor_stand,name=TimerStand,c=1,score_mcthnkTimer_min=5,score_mcthnkTimer=5] ~ ~ ~ title @a title {“text”:”FINISH!”,”color”:green,”bold”:”true”} mcthnkTimerスコアが5まで減ったら「FINISH!!!」と表示します。 |
/execute @e[type=armor_stand,name=TimerStand,c=1,score_mcthnkTimer_min=5,score_mcthnkTimer=5] ~ ~ ~ gamemode 3 @a[team=Red] ゲーム終了時、すなわちmcthnkTimerスコアが5まで減ったら赤チームのプレイヤーをスペクテイターモードに切り替えます。以下、同じように各チームのプレイヤーのモードを変更するコマンドです。 |
/execute @e[type=armor_stand,name=TimerStand,c=1,score_mcthnkTimer_min=5,score_mcthnkTimer=5] ~ ~ ~ gamemode 3 @a[team=Blue] |
/execute @e[type=armor_stand,name=TimerStand,c=1,score_mcthnkTimer_min=5,score_mcthnkTimer=5] ~ ~ ~ gamemode 3 @a[team=Green] |
/execute @e[type=armor_stand,name=TimerStand,c=1,score_mcthnkTimer_min=5,score_mcthnkTimer=5] ~ ~ ~ gamemode 3 @a[team=Yellow] |
/execute @e[type=armor_stand,name=TimerStand,c=1,score_mcthnkTimer=-95] ~ ~ ~ gamemode 2 @a[team=Red] ゲーム終了から5秒経過(=スコアが終了時から100減って-95に) したらアドベンチャーモードに戻します。 |
/execute @e[type=armor_stand,name=TimerStand,c=1,score_mcthnkTimer=-95] ~ ~ ~ gamemode 2 @a[team=Blue] |
/execute @e[type=armor_stand,name=TimerStand,c=1,score_mcthnkTimer=-95] ~ ~ ~ gamemode 2 @a[team=Green] |
/execute @e[type=armor_stand,name=TimerStand,c=1,score_mcthnkTimer=-95] ~ ~ ~ gamemode 2 @a[team=Yellow] |
/execute @e[type=armor_stand,name=TimerStand,c=1,score_mcthnkTimer=-95] ~ ~ ~ spreadplayers ロビーの座標x z 0.2 2 false @a[team=Red] spreadplayersコマンドを使って、今度はロビーにプレイヤーを戻します。 |
/execute @e[type=armor_stand,name=TimerStand,c=1,score_mcthnkTimer=-95] ~ ~ ~ spreadplayers ロビーの座標x z 0.2 2 false @a[team=Blue] |
/execute @e[type=armor_stand,name=TimerStand,c=1,score_mcthnkTimer=-95] ~ ~ ~ spreadplayers ロビーの座標x z 0.2 2 false @a[team=Green] |
/execute @e[type=armor_stand,name=TimerStand,c=1,score_mcthnkTimer=-95] ~ ~ ~ spreadplayers ロビーの座標x z 0.2 2 false @a[team=Yellow] |
最後の方のコマンドで「ロビーの座標x z」が出てきましたが、フィールドにプレイヤーを配置する時のようにx/z座標だけを指定します。前回作ったチーム分け装置の前に戻せばどんどんチーム分けして遊べますね。
試合の制限時間の設定方法とゲーム開始方法
回路の作成お疲れ様でした。ゲームの制限時間を設定する場合は、ゲーム開始回路の「C」のコマンドブロックの後ろの方にある数値を変更して下さい。繰り返しますが、[この数値÷20]秒が制限時間です。
ゲームを開始するには、「B」のコマンドブロックにくっつけたボタンを押します。それでは皆さん、楽しいPvPをお楽しみ下さい。
いかがでしたか。この仕掛けを使った楽しいPvPが沢山作られるのを楽しみにしています。この仕掛けを応用して素晴らしい仕掛けを作ってみてください。また、皆さんがコマンドや回路で気になることなどコメント下さい。
(この記事の公開時点で)最近書いたコマンド解説記事
37件のコメント
-
airu hamutaro2016年1月29日/gamerule commandblockoutput falseが実行されません
-
匿名2016年1月29日/gamerule commandBlockOutput false ▲小文字/大文字に気を付けて下さい。 それとランチャーやサーバー上のログに残したくない時は /gamerule logAdminCommands false を実行します。
-
Misken.s @相互フォローAc.2016年2月25日エンティティがみつかりません。ってでました FEHGのcommandがエンティティがみつかりませんとでます それと15個のcommandブロックが機能しません。
-
匿名2016年2月25日>FEHGのcommandがエンティティがみつかりませんとでます 参加しているチームの名前は「Red」「Blue」「Green」「Yellow」のいずれかに当てはまっているでしょうか? >それと15個のcommandブロックが機能しません。 fillクロックが動いていないということでしょうか? いずれにせよスコアボードとチームが記事内と同じ名前で作成できているかどうか確認してみて下さい。
-
Misken.s @相互フォローAc.2016年2月25日確認しましたが。同じようになっています 15個のこまんどぶろっくについて↑ FEHGのコマンドブロックがエンティティになるのはRed....blueとすべてにあてはまっています
-
riku64602016年2月25日キル数の代わりに時間を表示することはできますか?
-
匿名2016年2月25日ワールド拝見しました、色々修正しました。 詳細はワールド内の本に書いてありますのでダウンロードしてご確認下さい▼ https://www.dropbox.com/s/grzgywg2z819156/PvP%E3%83%AF%E3%83%BC%E3%83%AB%E3%83%89%28%E4%BF%AE%E6%AD%A3%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F%29.zip?dl=1
-
Misken.s @相互フォローAc.2016年2月26日ありがとうございます 確認します
-
Misken.s @相互フォローAc.2016年2月26日ちなみに コマンドブロックにボタンを置いてstartするのではなく チームの横に「上のボタンを押すと開始します」って看板にいれて ボタンを押すと開始されるにはどうすればいいですか? 本じゃなくてボタン形式で行いたいのですが
-
匿名2016年2月26日/setblock 606 89 -1361 redstone_block 0 replace ▲このコマンドを実行すれば色々な方法でゲーム開始できますので、コマンドブロックにこのコマンドを入れて回路を繋げたり、看板にコマンドを設定したりしてお使いください。
-
Misken.s @相互フォローAc.2016年2月27日ちなみに途中参加したい場合はどうすればいいですか? そのままTPでよろしいのですか? たとえば現在ゲームが開始されています。途中参加は可能です。5秒後テレポートします。。ってできます? あと ゲームが開始されていません。。とか
-
匿名2016年2月27日途中参加したい場合は直接テレポートして構いませんが、チームへの参加を忘れずに。 5秒後テレポートします、はチャットにそういうメッセージを流して、単純にリピーターで遅延させてtpすればいいと思います。 ゲームが開始されていないと参加できない、という仕様にするには、途中参加のtpコマンドを /execute @e[name=TimerStand,c=1] ~ ~ ~ tp @a[参加場所x,y,z,参加させる半径] 試合場所x y z とすれば「ゲーム開始時に召喚されているタイマースタンドがtpさせる」仕様になります。 それと開始されていません、はtestforコマンドでTimerStandがいるか判定してNOTでメッセージを流して下さい。
-
Misken.s @相互フォローAc.2016年2月27日エラーになります
-
匿名2016年2月27日TimerStandという名前の防具立てが存在しない場合は常にエラーを吐きます。ゲームを開始すると防具立てが召喚されるので実行できるようになるはずです。
-
Misken.s @相互フォローAc.2016年2月27日タイマースタンドは召喚されていました
-
匿名2016年2月27日/execute @e[name=TimerStand,c=1] ~ ~ ~ tp @a[647,98,-1437,10] x y z です。[]内は空白ではなくコンマを使います。
-
Misken.s @相互フォローAc.2016年2月29日NOT回路とTPする回路がいまいちなので修正をおねがいします。 http://fast-uploader.com/file/7012290134126/
-
匿名2016年2月29日修正しました。 https://www.dropbox.com/s/e78t5cf2n82z17u/pvp_world_edited.zip?dl=0
-
Misken.s @相互フォローAc.2016年2月29日本当にありがとうございます。 また わからないところがあったら聞きたいとおもいます。 しかし,自分で考えることも大切なので人に頼ることよりも自分で考えて,分からなかったら聞きます。その時はご迷惑をかけるかもしれませんが。よろしくお願いします。 コメント 2016/02/29
-
Misken.s @相互フォローAc.2016年2月29日このコマンドを打つとタイマーが表示されるはずですが表示されません /scoreboard objectives setdisplay NapoanTimer /scoreboard listで確認しましたが NapoanTimerはありました。 何が問題ですか? そのほか /scoreboard objectives setdisplay hpと打ち込んだのですがうまくいってません
-
匿名2016年2月29日/scoreboard objectives setdisplay sidebar NapoanTimer /scoreboard objectives setdisplay sidebar hp です。"sidebar"を忘れてますよ!
-
Misken.s @相互フォローAc.2016年2月29日そうでした。忘れてました( ゚д゚) 自分はこれでいける。〜と思ったけどできなかったので聞きました。 ありがとうございます。 ちなみに終了させるコマンドはどれでしたっけ? アイテムをおくと○の勝ちといれて終了されるのをつくりたいと思っているので。
-
Misken.s @相互フォローAc.2016年3月1日ふたつ スコアボードを表示されるにはどうすれば?
-
匿名2016年3月2日スコアボードの値を表示する場所として、sidebar(画面右側)、list(Tabキー押下で表示されるプレイヤー名一覧)、belowName(頭上のプレイヤー名の下)が用意されています。 /scoreboard objectives setdisplay sidebar スコア名 /scoreboard objectives setdisplay list スコア名 /scoreboard objectives setdisplay belowName スコア名 という風に場所を分ければ、最大3種類のスコアボードを表示させることが出来ます。
-
Kai2016年3月7日サイドバーにタイマーを表示させるとUUIDが出てきてしまいます。 UUIDの部分を「残り ??」のように「残り」と表示させたいのですがどうしたら良いでしょうか?
-
KI YUU2016年9月9日無効なjson: malformed JSON at line column 28と出ました
-
名無し2016年11月9日同じく・・・
-
White_cocore2017年2月14日防具建て以外もできませんか?1.7.10で行いたいのですが...
-
Yu Ki2017年5月23日無理ですね
-
soushi532017年6月18日残り時間をカウントダウン→試合終了、ロビーに戻すコマンドの解説 のfillコマンド以外をクロックで実行しても エンティティの種類「armor_stand」は無効です と出てできません…
-
soushi532017年6月18日title @a title {"text":"--","color":--,"bold":"true"} の部分が間違っているようです おそらく{"text":"--","color":"--","bold":"true"} だと思います
-
soushi532017年6月18日4つ質問です 1 ハイピクセルみたいに チーム選択のところで12人入ったら5,4,3,2,1,start(startはわかっています)とする方法がどうすればいいですか? titleでお願いします 2 一つのチームに4人目が入ろうとすると "そのチームは満員です!" とtellrawで表示する方法を教えてください 3 流れを完全自動化するにはどうすればいいですか 4 入っている人(scoreboard teams に所属)を定期的にtellraw で表示するにはどうすればいいですか 長文失礼しました。
-
9610 channel2017年9月11日これには、関係ないんですけど例えば羊に3マスいない近づくと死ぬみたいなコマンドは、どうすればいいんですか
-
匿名2017年9月11日/execute @e[type=sheep] ~ ~ ~ kill @a[r=3] そういうときは発想を逆転させてみてください。「羊が3ブロック以内のプレイヤーを殺す」コマンドを書けば良いんです。
-
もやっしー2017年10月20日もしよければうちの鯖来てもらうことって可能でしょうか?こまんど設定できればお願いしたいです
-
Hayato152018年1月2日1.11以前ではArmorStandですよ
-
gg2024年4月5日ありがとうございます