- ベストアンサー
一日一度の抽選の方法
一日一度ボタンを押し抽選をし、結果を振り分けるようなFLASHを作りたいと考えています。 たとえば、大当たり、あたり、はずれのような結果を用意し、 一度目にはずれが出た場合、日が変わるまでは何度ボタンを押しても結果は固定、 日が変わると、再度抽選が出来るという物を考えていますが、 FLASHのみで作ることは可能でしょうか? 作り方や、こうした方がよいなどのアドバイスがありましたら教えて下さい。 宜しくお願いします。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
> FLASHのみで作ることは可能でしょうか? まず,確認ですが, 先日,他の方がされていたご質問, QNo.2792325 「flashのおみくじのような(4桁の数字)ランダムの表示」 http://oshiete1.goo.ne.jp/qa2792325.html ↑教えて!goo ↓OKWave (同じです) http://okwave.jp/qa2792325.html ~引用~ > 一日毎のHP訪問者のラッキーナンバーみたいな感じです。 > そのラッキーナンバーをお店にて言って頂くと割引を提供する のように, サーバ上に固定の結果を保存しておかなければ, 出た結果が本当に正しいかどうか,お店や外部から確認できない。 というようなものではありませんよね。 上記のように, サーバ上に固定の結果を用意しておかなくても良い物であれば, SharedObject を使えば,FLASHのみで作ることは可能です。 ただし,Flash MX 以上をお持ちの場合です。 ======================= ・具体的な作り方のサンプル まず, 新規ドキュメントを作成します。 そして, ステージ上に結果表示用のダイナミックテキストを用意します。 文字の色はステージの色(白)以外の文字の色にしておいてください。 そのダイナミックテキストフィールドに "インスタンス名" を付けます。 この説明では 「kuji」 (くじの意味) というインスタンス名を付けたとしておきます。 新規レイヤーを追加して, 追加した方のレイヤーを ActionScript 専用のレイヤーと勝手に決めておきます。 □ レイヤー 筆・・|○| ←スクリプトを書く □ レイヤー 筆・・|●| ←テキストフィールド 「kuji」 そして, スクリプトを書くと勝手に決めた方のレイヤーのフレーム1の空白キーフレームを選択し, 下のアクションパネルに次のようなスクリプトを書きます(コピペ可能)。 ///////////////////////////////////////////////////////////////////// // ---結果データの準備--- // 配列 kekka(結果) の作成 var kekka = new Array(); kekka[0] = "大当たり"; kekka[1] = "あたり"; kekka[2] = "はずれ"; // // --- 今日の日付の取得 --- // Dateオブジェクト myDate の作成 var myDate = new Date(); // 年の取得 var yy = myDate.getFullYear(); // 月の取得 (月は0月から始まるが気にしなくて良い) var mm = myDate.getMonth(); // 日の取得 var dd = myDate.getDate(); // // --- SharedObjec関連 --- // SharedObject mySo の作成・読込み var mySo = SharedObject.getLocal("solData"); // // SharedObject の yy,mm,dd の値と, // 上で出した yy,mm,dd の値とのいずれか1つでも違えば if (mySo.data.yy != yy || mySo.data.mm != mm || mySo.data.dd != dd) { // 変数n に 0~2 の整数の乱数を取得 var n = Math.floor(Math.random()*3); // SharedObject の yy,mm,dd,n に値を代入 mySo.data.yy = yy; mySo.data.mm = mm; mySo.data.dd = dd; mySo.data.n = n; } // // --- 結果の表示 --- // テキストフィールド kuji に mySo の n 番要素を表示 _root.kuji.text = kekka[mySo.data.n]; ///////////////////////////////////////////////////////////////////// そして, 任意のフォルダに任意の名前をつけてドキュメントを保存し, パブリッシュ,もしくは「制御」→「ムービープレビュー」をしてもらえば動作確認ができ...ぃ... 動作確認ができることはできますが, その日の日付のうちは,同じ「大当たり」なら「大当たり」しか出ないので, 今回のものは,動作確認がしにくいパターンのものです。 1 パソコンの時刻設定で,わざと日付を変えて色々検証する。 2 作成するたびに違う名前でドキュメントを保存しパブリッシュしなおす。 3 SOLファイルを毎回削除しながら検証する。 上記3つのうちいずれかの方法で,色々な動作確認をしてください。 > 一日一度ボタンを押し抽選をし、 と書かれていますが, 上のスクリプトを on (release) { } などで実行させればいいですね。 一応,ボタンをクリックせずに自動表示させるスクリプトです。 上記 3 のSOLファイルに関してわかりにくいと思うので, この点についてもう少し説明します。 SharedObject で作成されるデータは, .sol という拡張子の SOLファイル(バイナリデータファイル) でパソコン内に保存されます。 JavaScript で保存する Cookie(クッキー) のようなものです。 solファイルは Windows の場合, C:\Documents and Settings\ユーザ名\Application Data\Macromedia\Flash Player 内のどこかに保存されます。 上記 ~\Flash Player フォルダあたりから, 「.sol」 を検索し,これで作成した SOLファイルを見つけて削除すれば, 前回記録した yy,mm,dd,n の値が削除されるので,繰りかえし違う結果を表示できます。 検索された SOL ファイルを「更新日時」順で並びかえると, 自分が上の実験で作成した SOL ファイルがどれであるのかがわかると思います。 おそらく(多分), 複数の SOL ファイルが検索されると思いますが, それらは全てどこかのサイトで質問者さまが Flash ゲームをしたときなどに保存された SOL ファイルです。 SharedObject を使うと,そのように SOL ファイルとしてパソコン内にデータを保存しておけます。 なお上記スクリプトの場合は, flush (SharedObject.flush メソッド) を使用していないので(使用する必要がないので), SOLファイルは, スクリプトが実行されたときではなく,その SWF を 「閉じるとき」 に自動保存されます。 Flash 8 のヘルプより 「flush (SharedObject.flush メソッド)」 http://livedocs.macromedia.com/flash/8_jp/main/00002663.html SharedObject.flush (即更新)は, 複数の SWF を同時に表示させて, それぞれの SWF から 共有の SOLファイルを 更新or参照 し合うときに必要になるもので, 今回のように単独 SWF の場合,普通は使う必要がありません。 スクリプト中の, kekka[0] = "大当たり"; kekka[1] = "あたり"; kekka[2] = "はずれ"; の部分と,そのデータ数に応じた, // 変数n に 0~2 の整数の乱数を取得 var n = Math.floor(Math.random()*3); の 3 の値を変えると, 他にも色々な結果を表示できると思います。 ただし,繰りかえしますが上で書いた, 1 パソコンの時刻設定で,わざと日付を変えて色々検証する。 2 作成するたびに違う名前でドキュメントを保存しパブリッシュしなおす。 3 SOLファイルを毎回削除しながら検証する。 のいずれかを毎回しないと, 結果が更新されませんので注意してください。 また, SharedObject.getLocal はここまでで書いたように, あくまでも個人的なパソコンにデータを保存するものです。 その個人のパソコンを外部の人が見るわけには行かないので, もし,大当たり、あたり、はずれのような結果を動的に指定したり, 他から知る必要が場合は, 最初の URL 「flashのおみくじのような(4桁の数字)ランダムの表示」 の回答にあるように, サーバ側の方で対処する方法を取ってください。 Flash だけでは無理です。 ◎参考URL ・配列変数に関して 「配列とは?Array」 http://www.1art.jp/flash/le/lesson34/lesson34.htm ・日付に関して 「Flashゲーム講座&ASサンプル集【時間について】」 http://hakuhin.hp.infoseek.co.jp/main/as/time.html ・SharedObjectに関して 「SharedObject.getLocal」 http://www.fumiononaka.com/TechNotes/Flash/FN0204003.html 「SharedObject クラス」 http://www.1art.jp/flash/le/lesson41/lesson41.htm
お礼
とても丁寧な回答ありがとうございました。 そして、質問、環境等が明確でなくて申し訳ありませんでした。 意図を汲んで頂いたおかげで、理想的な物が作れたように思います。 SharedObjectの知識は全くありませんでしたが、丁寧な説明のおかげで 思いの外簡単に理解することができました。 本当にありがとうございました。 また、機会がありましたら宜しくお願いいたします。