【解決済み!】現在座標の周囲48マスの中からランダムで値を取得したい

アバター
ピータンパン
記事: 76
登録日時: 2020年1月15日(水) 22:40

【解決済み!】現在座標の周囲48マスの中からランダムで値を取得したい

投稿記事by ピータンパン » 2021年5月30日(日) 12:43

お世話サマです!

プレイヤーの現在マップ座標の周囲48マスの中から
乱数で値を取得したいです!

でも、Math.random()の計算式がいまいちよく分かりません!

コード: 全て選択

var x = this.character(-1).x;
var y = this.character(-1).y;

($gameVariables.setValue(3,Math.floor( Math.random() * x)+6) + (x-6));
($gameVariables.setValue(4,Math.floor( Math.random() * y)+6) + (y-6));


プレイヤーの周囲48マスの中からランダムで座標を取得する方法をどうか教えてください!
最後に編集したユーザー ピータンパン on 2021年5月30日(日) 15:07 [ 編集 1 回目 ]

ecf5DTTzl6h6lJj02
記事: 477
登録日時: 2018年12月23日(日) 13:55

Re: 現在座標の周囲48マスの中からランダムで値を取得したい

投稿記事by ecf5DTTzl6h6lJj02 » 2021年5月30日(日) 14:30

こんにちは。
ピータンパン さんが書きました:お世話サマです!

プレイヤーの現在マップ座標の周囲48マスの中から
乱数で値を取得したいです!

でも、Math.random()の計算式がいまいちよく分かりません!

コード: 全て選択

var x = this.character(-1).x;
var y = this.character(-1).y;

($gameVariables.setValue(3,Math.floor( Math.random() * x)+6) + (x-6));
($gameVariables.setValue(4,Math.floor( Math.random() * y)+6) + (y-6));


プレイヤーの周囲48マスの中からランダムで座標を取得する方法をどうか教えてください!

乱数で指定した範囲の値を取りたい場合、Math.floor を使用する場合は、

コード: 全て選択

Math.floor(Math.random() * (最大値 + 1 - 最小値)) + 最小値

で取得することができるはずです。

±6というのであれば、

コード: 全て選択

Math.floor(Math.random() * ( 6 + 1 - (-6)) + (-6));


コード: 全て選択

Math.floor(Math.random() * 13) - 6)

となります。

なので、

コード: 全て選択

let x = this.character(-1).x;
let y = this.character(-1).y;

x = (x + Math.floor(Math.random() * 13) - 6).clamp(0, $gameMap.width() - 1);
y = (y + Math.floor(Math.random() * 13) - 6).clamp(0, $gameMap.height() - 1);

($gameVariables.setValue(3, x);
($gameVariables.setValue(4, y);

のように変更すれば、プレイヤーを中心に、上下左右6マス以内の座標を取得できると思います。
上記のコードでは、ついでにマップ範囲からはみ出さないように値を丸めています。

ご確認ください。
アバター
ピータンパン
記事: 76
登録日時: 2020年1月15日(水) 22:40

Re: 現在座標の周囲48マスの中からランダムで値を取得したい

投稿記事by ピータンパン » 2021年5月30日(日) 15:07

ecf5DTTzl6h6lJj02 様!

できました!! すごい!!
なるほどー! (最大値 + 1 - 最小値)) + 最小値なんですね! 
データベースの設定画面からして、てっきり範囲をそのまま割り当てるものと思ってました!

しかもメチャクチャ分かりやすく説明してくださって
ホントにありがとうございます!!

clamp関数でマップの最大を取って範囲からはみ出さないようにすることもできるんですね!
こんなに行き届いたコードをパパっと書いてくださって
繰り返しホントにありがとうございます!!

ツクマテと、ecf5DTTzl6h6lJj02様をはじめとするエンジニアさんの存在に心から感謝です!!

“MV:質問” へ戻る