dポイントプレゼントキャンペーン実施中!

Flashの勉強をし始めた者です。ソフトはSuzukaを使っております。
トランプの簡単なゲームを作りたいと思っております。

52枚から自分の手札としてランダムで5枚のカードを引きます。
その時に、2枚目以降のカードは前に引いたカードと重複させたくないのですが
どのようにしたら良いのでしょうか。

1枚目のカードをランダムにひくASは以下の様に記述しました。
カードをランダムに配るスプライトのアクションレイヤーに記述。
------------------------------------------------------
//カードを配りたいタイミングで21~72の間にフレームを飛ばす。
Array=["21","22"  ~省略~ ,"71","72"];
frameName=Array[Math.floor(Math.random()*52)];
gotoAndPlay(frameName);
------------------------------------------------------
"21" ~~~~ "72"
で52枚のカードをランダムに出すようしてあります。

ここまでは問題無いのですが、次 2枚目以降はどうしたらよいのでしょうか?
1枚目と全く同じようにアクションスクリプトを記述してしまうと、
重複したカードが出てしまう可能性があります。


お詳しい方いらっしゃいましたら、ご教授宜しくお願い致します。

A 回答 (1件)

「マスクでトランジション」


マスクを使った画面転換の例と,重複しない乱数の列挙。
http://suzupara.iinaa.net/kiso121.html

ココ↑にもかいてありますが
中身をシャッフルした配列を作成しておいて
配列要素を先頭から順に引いていくと重複は起こりませんよ。

21,22,23,24,…,71,72
からランダム要素を引くのではなくて
あらかじめランダムシャッフルされた配列
55,30,26,65,…,22,45
の先頭要素から順に引くということですね。


--- --- ---

あと配列 Arrayクラス にはsplice メソッドがあります。

Flashドキュメンテーション splice (Array.splice メソッド)
http://livedocs.adobe.com/flash/8_jp/main/000019 …
(使用できるバージョン : ActionScript 1.0、Flash Player 5)

これで
21,22,23,24,…,71,72
からランダムに引いては、その要素を消す
ということをしても重複は起こりません。
「だるま落とし」の積み木をランダムに叩いてはじき飛ばすような方法です。

ただこれを使った場合配列の要素がだんだん減って行くわけですから、
つまり元の配列自体が壊れてしまうので、
再使用したい場合は配列を再作成しなおすような必要があります。
また「引いた履歴」が配列には残りませんから
もし履歴を残したい場合は
引いた要素と引いた順などを別に記録しておく必要が出てきます。
    • good
    • 0
この回答へのお礼

お礼のレスが遅れてしまい申し訳ありません。
事情でFLASHの勉強ができずにいたのですが、最近再開いたしました。

回答で頂いたページのASを使ってみたところ、重複しない乱数の生成とArrayからの数値呼び出しが上手く出来ました。

ありがとうございました。
今度またご指導いただけましたら幸いです<(__)>

お礼日時:2010/08/23 17:34

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!