FileMakerで行う抽選処理


どうも、にゃん太です
誰かを選ぶシチュエーションってありますよね
グループ討論の発表を誰がするかだったり、一つだけ残ったおやつを誰が食べるかだったり……
公平に決めるために、ジャンケンを行ったり、即席のクジを作ったりする事が多いのではないでしょうか
今回のメモでは、汎用的に使える抽選アプリをFileMakerで作ってみます
汎用的な抽選アプリを作ろう!
- 画面サイズ
-
抽選という処理は公平性が求められます
内部処理は見えなくとも、抽選している様子が見えている事が結構重要だったりします
みんなで見られるようにPCかタブレット程度の画面サイズは必要でしょう
共用で使える様、タブレットサイズで作成する事にします
- 抽選対象人数
-
人数固定では流石に使い勝手が悪いので、対象人数は自由とします
自由に登録・削除ができ、抽選時点の人数で処理できる様にしましょう
- 当選人数
-
先ほどの何人から選ぶかは難しくないのですが、何人を選ぶかはちょっと難しそうです
いや、選ぶこと自体は問題ないのですが、どうやって見せるかという点を考えると良い方法が思いつきません
仕方ないので、当選人数は1人だけとします
その代わり当選フラグを立て、続けて抽選を行ったときに非当選者から選ぶようにすれば、当選人数の分だけ繰り返せば解決です
若干時間が掛かりますが、次は誰が当たるかとのドキドキ感があって盛り上がるかもしれません
- 抽選エフェクト
-
FileMakerで動きを表現する場合はWEBビューアを使うのが一番自由にできますが、それではFileMakerでやる意味がありません
勉強がてら、FileMakerの標準機能で実現したい所です
画面いっぱいのテキストフィールドに抽選対象を次々に切り替えて表示する様なエフェクトであれば、FileMakerの標準機能で実現可能ですし、抽選イメージとしても良さそうです
他には、オリンピック柔道で使用されていた抽選ルーレットも何とか再現できそうです
抽選エフェクトの試作(1)





スクリプト
# ################################################## # 抽選エフェクト試作1 # ################################################## 変数を設定 [$抽選人数; 値: Get ( 対象レコード数 )] # BGM再生 フィールド設定 [lottery::BGM; sound::sound] 変数を設定 [$i; 値: 1] Loop [フラッシュ: 常に] # 対象レコードを乱数で決定 変数を設定 [$targetID; 値: Int ( Random * $抽選人数 ) + 1] フィールド設定 [lottery::viewNo; $targetID] フィールド設定 [lottery::viewText; getText::text] # 表示間隔 最後は遅くする 変数を設定 [$sec: 値: Case ( $i > 49; .5; $i > 48; .3; .1 )] スクリプト一時停止/続行 [間隔(秒): $sec] 変数を設定 [$i; 値: $i + 1] Exit Loop If [$i > 50] End Loop #BGM終了 フィールド設定 [lottery::BGM; ""]
抽選エフェクトの試作(2)



スクリプト
# ################################################## # 抽選エフェクト試作2 # ################################################## # BGM再生 フィールド設定 [lottery::BGM; sound::sound] 変数を設定 [$i; 値: 1] Loop [フラッシュ: 常に] # 表示テキストをスライド フィールド設定 [roulette::viewText[9]; roulette::viewText[8] ] フィールド設定 [roulette::viewText[8]; roulette::viewText[7] ] フィールド設定 [roulette::viewText[7]; roulette::viewText[6] ] フィールド設定 [roulette::viewText[6]; roulette::viewText[5] ] フィールド設定 [roulette::viewText[5]; roulette::viewText[4] ] フィールド設定 [roulette::viewText[4]; roulette::viewText[3] ] フィールド設定 [roulette::viewText[3]; roulette::viewText[2] ] フィールド設定 [roulette::viewText[2]; roulette::viewText[1] ] If [Mod ( $i; 3 ) = 1] 変数を設定 [$targetID[3]; 値: $targetID[2] ] 変数を設定 [$targetID[2]; 値: $targetID[1] ] 変数を設定 [$targetID; 値: Int ( Random * $抽出人数 ) + 1] フィールド設定 [roulette::viewNo; $targetID] フィールド設定 [roulette::viewText; getText2::text] Else If [Mod ( $i; 3 ) = 2] フィールド設定 [roulette::viewText; ""] End If スクリプト一時停止/続行 [間隔(秒): .1] 変数を設定 [$i; 値: $i + 1] Exit Loop If [$i > 50] End Loop
サンプルファイル

以上で今日のメモ書きは終了です
内容はいかがでしたか?
もしご意見やご要望、誤りの指摘などありましたら、下記フォームよりお気軽にご連絡ください