クリック画像の実寸表示

段ボール箱を机にした猫 ファイルメーカー(filemaker)のちらしの裏のメモ書き

TOP  >  FileMakerで行う抽選処理
作成日:2025年01月13日

FileMakerで行う抽選処理

イメージイラスト
にゃん太

どうも、にゃん太です

誰かを選ぶシチュエーションってありますよね

グループ討論の発表を誰がするかだったり、一つだけ残ったおやつを誰が食べるかだったり……

公平に決めるために、ジャンケンを行ったり、即席のクジを作ったりする事が多いのではないでしょうか

今回のメモでは、汎用的に使える抽選アプリをFileMakerで作ってみます


汎用的な抽選アプリを作ろう!

抽選アプリを作成するにあたり、どんなアプリにするかを考えてみましょう

画面サイズ

抽選という処理は公平性が求められます

内部処理は見えなくとも、抽選している様子が見えている事が結構重要だったりします

みんなで見られるようにPCかタブレット程度の画面サイズは必要でしょう

共用で使える様、タブレットサイズで作成する事にします

抽選対象人数

人数固定では流石に使い勝手が悪いので、対象人数は自由とします

自由に登録・削除ができ、抽選時点の人数で処理できる様にしましょう

当選人数

先ほどの何人から選ぶかは難しくないのですが、何人を選ぶかはちょっと難しそうです

いや、選ぶこと自体は問題ないのですが、どうやって見せるかという点を考えると良い方法が思いつきません

仕方ないので、当選人数は1人だけとします

その代わり当選フラグを立て、続けて抽選を行ったときに非当選者から選ぶようにすれば、当選人数の分だけ繰り返せば解決です

若干時間が掛かりますが、次は誰が当たるかとのドキドキ感があって盛り上がるかもしれません

抽選エフェクト

FileMakerで動きを表現する場合はWEBビューアを使うのが一番自由にできますが、それではFileMakerでやる意味がありません

勉強がてら、FileMakerの標準機能で実現したい所です

画面いっぱいのテキストフィールドに抽選対象を次々に切り替えて表示する様なエフェクトであれば、FileMakerの標準機能で実現可能ですし、抽選イメージとしても良さそうです

他には、オリンピック柔道で使用されていた抽選ルーレットも何とか再現できそうです


抽選エフェクトの試作(1)

では、抽選エフェクトを試作してみましょう
まずは全面テキストを切り替えて表示するタイプを作成します
方法は色々とあるかと思いますが、抽選対象をリストで保持してグローバルフィールドで切り替えながら表示させる方法でやってみます
とりあえず、上記方法に合わせてテーブルを作成します

抽選対象リストテーブル
抽選対象リストテーブル
BGM用テーブル
BGM用テーブル
リレーション
リレーション設定
抽選対象として以下の様にサンプルデータを入れておきます

抽選対象サンプル
抽選対象サンプル
続いて表示用のレイアウトを作成します

表示用レイアウト
表示用レイアウト
最後に表示用のスクリプトを設計します

スクリプト

# ################################################## # 抽選エフェクト試作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)

次に、抽選ルーレットタイプを試作します
実現方法として、位置を動かす処理は出来ませんので、複数のフィールドを用意して順番にテキストを表示させる事で移動するイメージを作っていこうかと考えています
複数フィールドの表示になりますので、先程とはテーブル構造が若干変わってきます

抽選対象リストテーブル
抽選対象リストテーブル
リレーション
リレーション設定
続いてレイアウトを作成します
テーブル構造では繰り返し10で作成しましたが、対称性を考慮すると9つフィールドを配置するのが良さそうです

表示用レイアウト
表示用レイアウト
最後に表示用のスクリプトを設計します

スクリプト

# ################################################## # 抽選エフェクト試作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

これを動かしてみると、次の様になります

行間隔の調整ができていませんが、動きとしては意外にスムーズに見えるので問題なさそうです

サンプルファイル

以上で抽選処理のメモ書きは終了です
抽選リストの追加などの基本的な部分の説明は省いていますが、完成版も作成しています
ご興味がありましたら是非こちらからダウンロードしてご確認ください

メモ書き終了の案内イラスト

以上で今日のメモ書きは終了です

内容はいかがでしたか?

もしご意見やご要望、誤りの指摘などありましたら、下記フォームよりお気軽にご連絡ください

ご連絡フォーム