質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

Q&A

解決済

3回答

2709閲覧

ゲームにおいて、ランダムに手を配る手法の妥当性

fuyu

総合スコア7

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

0グッド

0クリップ

投稿2015/06/18 05:34

現在、ランダムに手が配られるゲームを作成しているのですが、そのランダムにの部分が偏りのない方法なのかが不安になり、質問しています。
例をあげると、52枚のトランプがあり、4人プレイヤーに13枚ずつ配るという処理と同じです。


現在は、次の手順で配る処理を行っています。

  1. 全てのカードを配列に入れる
  2. 0~配列の大きさの間の乱数を生成する
  3. その乱数が指すインデックスの要素を配列から一つ取り出す
  4. 1~3を配列の大きさが0になるまで繰り返す

もっとよい振り分け方をご存じであれば教えていただく、よろしくお願いします。

具体的なコードは以下です。

lang

1 var src = Util.komaStrToArray("11111111112222333344445555667789"); 2 var dest = []; 3 4 for(var i=0;i<32;i++){ 5 var index = Math.floor(this.RNG.random()*src.length); 6 var temp = src.splice(index, 1); 7 dest.push(temp[0]); 8 } 9 return dest.join("");

9種類の駒があるので、数字1文字で駒を表しています。駒の合計が全体で32です。
this.RNGは乱数生成器で、中身はメルセンヌツイスタです。
Util.komaStrToArrayは、単に文字列を1文字ずつ配列に入れなおすだけです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

それで大丈夫だと思います。
配列がひとつしか必要ないFisher-Yatesアルゴリズムもありますが、
やってることは同じだと思います。

投稿2015/06/18 06:11

naga3

総合スコア1293

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fuyu

2015/06/19 05:15

回答ありがとうございました
guest

0

ベストアンサー

その方法で、問題ないと思います。
配列をシャフルする方法については、
下手に自分で考えると乱数とつかっていても偏ったものになってしまうことがあります。

参考情報:

投稿2015/06/18 13:50

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fuyu

2015/06/19 05:14

参考情報ありがとうございました!
guest

0

これで良いと思いますけど・・・?

投稿2015/06/18 05:41

MasaakiIrie

総合スコア1021

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問