トランプのカードシャッフル

ホーム フォーラム CF2.5使用法全般 トランプのカードシャッフル

  • このトピックには6件の返信、2人の参加者があり、最後にMOKUZUにより5年、 3ヶ月前に更新されました。
7件の投稿を表示中 - 1 - 7件目 (全7件中)
  • 投稿者
    投稿
  • #16005
    MOKUZU
    参加者

    お世話になっております。

    トランプの「神経衰弱」を作ってます。
    行き当たりばったりで作ったので
    大変雑ではありますが、とりあえずシステムは
    完成しました。宜しければ添付ファイルを
    ご覧ください。

    ここまではそんなに難しくなかったのですが、
    問題は最初の処理、ゲーム開始と同時に
    トランプをシャッフルする動作が上手く作れません。

    当初の予定では「オブジェクトの位置を入れ替える」という
    機能があるのでこれを使ってみようと思ったのです。
    スタート時にこれを100回とか繰り返せば簡単にシャッフルできるのでは?
    などと気楽に考えていたのですが実行しても全然混ざってくれないし、
    そもそも設定項目も何もなく何のための機能なのかもよく分かりません。
    (こういう時に使う機能ではないのでしょうか?)

    なら乱数を使ってなんとか…等といろいろ無い知恵を絞ったのですが
    この状態からバラバラにカードの位置を入れ替える良い方法が思いつきません。
    どうかお助けくださいませ。
    (左の空白部分にイラストが入るので出来ればレイアウトはそのままで
    お願い出来ると有難いです)

    #16006
    MOKUZU
    参加者

    あれ?Upload Errors?

    Attachments:
    You must be logged in to view attached files.
    #16008
    MYTH
    参加者

    >>MOZUKUさん

    こんにちは。
    オブジェクトに値を割り振ってランダムに並び替えるのは難しいですよね。
    そこでここは発想の逆転で、最初で配置されているオブジェクトにランダムな値を与えよう!ということになります。
    かといって通常の乱数生成だと値が被ったりしてかなり面倒だったりします。
    そこで便利なのが、範囲を指定した乱数のプールを作り、そこから重複しない値を取り出してくれる「Random Multipool object」です。

    サンプルにおいて各トランプにはフレーム開始時にこのプールからforeachループで番号を与え、トランプの数字はそれに連動して変更されます。
    また、表向きにしたトランプ同士の数字の比較はそのままだと難しいので、それぞれカードを表向きにした時に番号をグローバル変数に記録し、比較の際はそれを利用しています。
    この乱数生成のエクステンションは存在自体は知っていたものの、私自身今回で初めて使ったものなのであまりまとまってはいないイベントですが、ちゃんと動作はします!
    それから、クローバーとハートの位置は入れ替わっていませんが同様のエクステンションでトランプを一つのオブジェクトにまとめて応用すればできると思います(´・ω・`)

    Attachments:
    You must be logged in to view attached files.
    #16010
    MYTH
    参加者

    全て並べ替える方も作りました。

    トランプは一つのオブジェクトにまとめられ、乱数のプールも一つになっています。
    ここでアニメーションフレーム13以降のハートの番号は13~25になりますので、比較時には二値の差が13である場合を同じ数字として判定しています。
    トランプのマークが三つや四つになる場合はそのままではいけないので、更に条件に差の値を26、39と適宜追加すると適用できると思います。
    また、トランプクリック時のイベントの条件に「フラグ0がオフの時」と追加されていますが、これはクリック数が0の時に一度選択しただけで2に増加するのを防ぐためです。クリック数の増加と同時にフラグはオンに、一度左クリックから手を離すことでフラグはオフになり二枚目を選択可能になります。このイベントは異なるトランプを区別するのに必要となります。

    サンプルが二つありますが差の計算方法を改善したものが1.zipです。

    変更点は以上の通りです。ご確認願います(^^ゞ

    • この返信は5年、 3ヶ月前にMYTHが編集しました。
    • この返信は5年、 3ヶ月前にMYTHが編集しました。
    Attachments:
    You must be logged in to view attached files.
    #16016
    MOKUZU
    参加者

    >>MYTH様

    ご教示ありがとうございました。

    標準機能では乱数にダブリが出るので
    うまく行きませんでしたが、なるほど…エクステンションを
    使うのですね。これは私も使ったことがなかったし、
    位置のほうを入れ替えることに固執してしまったので
    思いつきませんでした(汗)
    工夫すればいろいろ応用が利きそうなエクステンションですね。

    システムのほうも効率化&簡略化して頂きありがとうございます。
    未だに高速ループの使いどころさえよくわからない半端者です。

    数式の類が極端に苦手なのでひとつひとつチマチマ計算しないと
    何をやっているのか自分でもよく分からなくなるのです。

    トランプを一つにまとめると計算が複雑になり、理解を超えてしまう
    恐れがあったので2つに分けざるを得なかったという体たらくです。

    (それでもとりあえず作れてしまうのがCF2.5の凄さだと思うのですが)

    (可能であれば一つにまとめたかったので大変勉強になりました)

    ご指導ご鞭撻頂き感謝いたします。

    #16040
    MYTH
    参加者

    >>MOKUZUさん

    蛇足になるかもしれませんが、高速ループは本当に応用の幅が広く、今回のようにトランプを配置するのにも使えます。

    フレームでトランプを配置するとき、26枚のカードを正確な座標に置くのは骨の折れる作業になりますが、26枚分の生成イベントを作るのも手間ですよね。
    そんな時、高速ループで26回生成と座標決定を行えば、かなり楽になります。
    26枚のカードは処理上同時に配置されるので、フレーム開始時に発動すればあたかも最初からフレームに置いてあったかのようになります。
    (高速ループ考えた人ほんとすごい…)

    是非サンプルをご覧ください(^O^)

    Attachments:
    You must be logged in to view attached files.
    #16043
    MOKUZU
    参加者

    >>MYTH様

    本当に度し難いですが
    後から指摘されれば納得は出来るんです。

    「ああ、言われてみれば確かにトランプの配置みたいな動作は
    高速ループの使用例としては絶好だし絶対効率的だよなあ」

    でも最初から高速ループで作ろうという発想が湧かない。
    めんどくさいので考えない。

    これってもう掛け算九九をめんどくさがって覚えようとせず
    いつまでも足し算で計算してる馬鹿な小学生の図ですよね。

    そんなところで思考停止していては高度な数学など学びようがないし
    自分でも不条理な悪癖としか言いようがないです。

    最初の苦労を厭わずに積極的に使っていく以外、
    慣れる方法なんか有り得ないですから、
    頑張って無理にでも使うようにするしかないんですよね。

    そのうち高速ループの有用性に気が付き
    意固地に使おうとしなかった自分の愚かしさを笑えるように
    努力するしかないと思います。

    …今年の目標かな。よし!今後何か作る時は高速ループの使用を
    真っ先に考えるようにしよう…!

    最初からトランプを手作業で並べたほうが早いじゃん?
    とかアナログ脳で考えるのはやめよう!

    ご教示本当にありがとうございました。

7件の投稿を表示中 - 1 - 7件目 (全7件中)
  • このトピックに返信するにはログインが必要です。