時間のカウントダウンをやりたい【コマンドブロック】

Minecraftのゲームプレイ全般の質問はこちらへどうぞ。
mishita3
ID: 4U3ITJO8DU
記事: 3
登録日時: 2020年11月29日(日) 15:32

時間のカウントダウンをやりたい【コマンドブロック】

投稿記事 by mishita3 » 2020年11月29日(日) 23:54

1.16.4でゲームを作っています。
制限時間を設けたいのですが、調べてもコマンド初心者には難しく理解ができませんでした・・・

①制限時間(カウントダウン方式)でコマンドを組む方法
②制限時間をホットバーに表示させる方法
③特定の時間ごとに何かを付与する(デバフ、バフ、アイテムなど)方法
④制限時間が0になったときに文字(ゲームオーバーなど)を表示させる方法

上記4つのうち分かるものだけでもいいので教えてもらえると嬉しいです。
初心者なので細かく教えてもらえるとありがたいです。
0



Tags:

アバター
CKenJa
ID: 27DODI8C4C
記事: 25
登録日時: 2019年11月01日(金) 22:11
Minecraft ID: CKenJa
いいね: 1回
いいねされた回数: 3回
連絡する:

Re: 時間のカウントダウンをやりたい【コマンドブロック】

投稿記事 by CKenJa » 2020年11月30日(月) 19:42

コマンドに限らずプログラムは色んな実装方法があります。これが一番軽いわけではありません。初心者でわかりやすそうな例を選びました。
...でも①はちょっとわかりにくいかも。うまくできなかったら別の方法考えてみてください。
①制限時間(カウントダウン方式)でコマンドを組む方法
まず開始時にスコアボード1に、制限時間(秒)の20倍(tick)を入れます。
リピートコマンドブロック等で毎tickスコアボードその1を20ずつ減らし、スコアボード2はスコアボード1を20で割ったものにするとよいかと思います。
スコアボードは整数しか扱えず答えが少数になると切り捨てされるのでうまく表示されるはず。
②制限時間をホットバーに表示させる方法
ホットバーがどこかはわかりませんが、Chuzume氏のデータパックのようにホットバーの上に文字を表示する場合はtitileコマンドを使います。使い方はググってください。
スコアボードを表示させるときはここ↓が参考になると思います。
https://ch.nicovideo.jp/akaishi_ai/blomaga/ar857358
ホットバーのアイテムに表示させる場合は、カスタムフォントやカスタムモデルデータを使うか、耐久値バーを使うといいと思いますが初心者にはハードルが高いからおすすめしません。
③特定の時間ごとに何かを付与する(デバフ、バフ、アイテムなど)方法
これもスコアボード案件かな?
1.スコアボードを用意して
2.毎tick、スコアボードを1ずつ増やす
3.スコアボードが設定した時間(秒の20倍=tick)の時にバフを与えるコマンドを実行するようにする。
4.コマンドを実行するとき、ついでにスコアボードを0にする。
④制限時間が0になったときに文字(ゲームオーバーなど)を表示させる方法
これは①と②と③の応用です。自分で考えてみてください。

あえてコマンド例は書きませんでした。
コマンド初心者はググり力=コマンド力なので、自分で調べてみてください。
minecraftの英語wikiがおすすめです。Google翻訳を使えば割と読めます。
ヒント
Show
①はscoreboard players removeとscoreboard players operationを使います。
また、20で割る処理では20をセットしたスコアボードが必要です。
② titleコマンドは日本語の解説が多いのでヒントなしで。
③executeコマンドというちょっと難しいコマンドを使います。今回はexecute if scoreとexecute asの使い方を調べてみてください。
0
建築エンジョイ勢からコマンド勢になりたい。にわかPVPコマンド勢です。

アバター
UT-X
ID: 5HJXERK9A7
記事: 142
登録日時: 2019年8月06日(火) 01:50
Minecraft ID: UTX1948

Re: 時間のカウントダウンをやりたい【コマンドブロック】

投稿記事 by UT-X » 2020年12月01日(火) 21:53

色々調べてみたが結局わからないときに見ること
Show
一応別解を記しておきます。
(以下の情報は主にBedrock Editionでの私の経験を基にしています。Java Editonにはこれよりも良い方法があるかもしれません。)
これらのやり方は一例であり、別のやり方も存在するかもしれないということを覚えておいてください。

Rtはレッドストーンチック、Gtはゲームチックを示します。
EX内にあるコマンドの引数は自分が使う値に書き換えてもよいです。(チーム名や制限時間の値など)
  1. 制限時間(カウントダウン方式)でコマンドを組む方法
    まず、スコアボードに新しいオブジェクトを追加します。これは回路を組むときに1回行うだけでOKです。
    EX:「/scoreboard objectives add time dummy 残り時間」
    そのうえで、スタート時に実行するコマンドブロックに参加者のスコアを制限時間にセットするコマンドを入力します。
    単位に気を付けてください。(1秒=10Rt=20Gt)
    EX:60秒を
    • 秒で計測「/scoreboard players set @a[team=A] time 60」
    • Rtで計測「/scoreboard players set @a[team=A] time 600」
    • Gtで計測「/scoreboard players set @a[team=A] time 1200」
    次に、ゲーム中に常時実行されるコマンドブロックに参加者のスコアを一定時間で減少させるように回路を組みます。
    EX 長いのでスポイラー
    Show
    • 秒で計測
      リピーター(上下左右)、コンパレーター(▽)、
      そしてコマンドブロック(◇)を以下のように接続します。
      ┏右▽
      ┃ ◇
      ┗━┛
      コンパレーターを通すと1Rtの遅延が生じます。
      リピーターの遅延は4Rtにしておきます。
      こうすることで4+1=5Rt=0.5秒となります。
      この回路は一周するのに設定した遅延の2倍時間がかかります。
      よってコマンドが実行される間隔は0.5*2=1秒となります。
      コンパレーターはランプがついた状態(減算モード)にしておいてください。
      コマンドブロックには「/scoreboard players remove @a[team=A] time 1」と入力します。
    • Rtで計測
      コンパレーター(▽)、コマンドブロック(◇)を以下のように接続します。
      ┏▽ 
      ┗┻━━◇
      コマンドブロックはコンパレーターの出力部から3つ以上離してください。
      コンパレーターはランプがついた状態(減算モード)にしておいてください。
      この回路は2Rtで1周するので、
      コマンドブロックには「/scoreboard players remove @a[team=A] time 2」と入力します。
    • Gtで計測
      リピートのコマンドブロックを使ってください。
      コマンドブロックには「/scoreboard players remove @a[team=A] time 1」と入力します。
  2. 制限時間をホットバーに表示させる方法
    titleコマンドを使用します。リピートのコマンドブロックを使って時間計測の回路につなげるといいでしょう。
    EX:「/title @a[team=A] actionbar ["残り時間:",{"score":{"name":"*","objective":"time"}}]」
  3. 特定の時間ごとに何かを付与する(デバフ、バフ、アイテムなど)方法
    チェーンのコマンドブロックを使い、時間を計測しているコマンドブロックに接続させます。
    EX:「/give @a[team=A,scores={time=300}] diamond」
  4. 制限時間が0になったときに文字(ゲームオーバーなど)を表示させる方法
    リピートのコマンドブロックでexecuteを行い、それで出力されるRS信号で管理します。
    0でないときは時間計測を行い、0になった時はそれをすぐに切るようにするといいでしょう。
    EX 長いのでスポイラー
    Show
    • レバーなどの動力源(動)、リピーター(上下左右)、コンパレーター(▽)、
      RSトーチ(i)、時間計測の回路(回)、任意のブロック(ロ)、
      そしてexecuteコマンドブロック(◆)とその他のコマンドブロック(◇)を以下のように接続します。




      ┣ロi━◇

      このとき、iはロの側面に設置してください。
      ◆には「/execute if entity @a[team=A,scores={time=1..}] help」と入力します。
      こうすることで、制限時間が0になった時に様々な処理を行えるようにします。
      ◇に制限時間が0になった時のコマンドを設定します。
      EX:「/title @a[team=A] actionbar "TIME UP!"」
      (Bedrock Editionと以前のJava Editionには、testforというexecute ifとほぼ同じ機能を有するコマンドが存在します)
1
1 画像
主にBedrock Editionの最新バージョンで活動中。
Java Editionは過去にやっていましたが現在は離れています。

旧フォーラムに存在したマイクラのブロックとかのスマイリーが欲しいが、
ブロックの数が膨大になった今ではもはや無理か…?

アバター
UT-X
ID: 3GGFWGK8Z9
記事: 142
登録日時: 2019年8月06日(火) 01:50
Minecraft ID: UTX1948

Re: 時間のカウントダウンをやりたい【コマンドブロック】

投稿記事 by UT-X » 2020年12月04日(金) 17:28

上の投稿に誤りがあったので追記
Show
《誤》
秒で計測
リピーター(上下左右)、コンパレーター(▽)、
そしてコマンドブロック(◇)を以下のように接続します。
┏右▽
上 ◇
┗左┛
リピーターの遅延はそれぞれ4Rt、4Rt、2Rtにしておきます。
こうすることで4+4+2=10Rt=1秒となります。
コンパレーターはランプがついた状態(減算モード)にしておいてください。
《正》
秒で計測
リピーター(上下左右)、コンパレーター(▽)、
そしてコマンドブロック(◇)を以下のように接続します。
┏右▽
┃ ◇
┗━┛
コンパレーターを通すと1Rtの遅延が生じます。
リピーターの遅延は4Rtにしておきます。
こうすることで4+1=5Rt=0.5秒となります。
この回路は一周するのに設定した遅延の2倍時間がかかります。
よってコマンドが実行される間隔は0.5*2=1秒となります。
コンパレーターはランプがついた状態(減算モード)にしておいてください。

上の投稿ではすでに修正済みですが、編集だと気づかない可能性があるので新しく投稿しました。
0
主にBedrock Editionの最新バージョンで活動中。
Java Editionは過去にやっていましたが現在は離れています。

旧フォーラムに存在したマイクラのブロックとかのスマイリーが欲しいが、
ブロックの数が膨大になった今ではもはや無理か…?

返信する