- ベストアンサー
プログラミングコンテストで
プログラミングコンテストというものが開催されるのですが、そこでFlashを使ってゲーム感覚で競い合おうということになりました。 具体的には、5×5のビンゴゲームのFlashを使用し、25問の問題を解いていき、解けた番号のビンゴの色が変わるといったものです。ビンゴの数が多いチームの勝ちといった感じです。このビンゴゲームの機能を満たすFlashは完成しましたが、ちょっと最近話がややこしくなってきました。 例えば参加チームが10チームあるとします。各チームの画面にはそれぞれ各々のビンゴ画面があります。それとは別に、別の1つの画面で上位4チームのビンゴ画面をFlashでリアルタイムで随時表示してギャラリーに見せることはできないかと言われました。上位4チームが入れ替われば、その画面も随時入れ替わります。どのような方法で実現が可能でしょうか?みなさんよろしくお願いいたします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
一番簡単な部分が Flash ではないかと思います。 Webではないので(LANでも可能かもしれないので),集計用のプログラムはPerlやPHPに限定する必要もありません。 ASP でも,単なる VBS でも可能かもしれません。 しかし,少なくともデータをとりまとめるマシンと,集計プログラムは必要でしょう(集計自体は Flash でも可能です)。 ゲームをするチームPCからは, 5秒に1回 とか,1問正解するたびに1回とか,何かの拍子に定期的に集計用マシンにデータを送信します。 25問で解けたか解けていないかというデータですから, 例えば次のようなデータを送信すれば良いだけです。 象さんチームなら, data=Zou,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0 カバさんチームなら data=Kaba,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1 というようなデータです。 それを集計用マシンのプログラムで,上位4位を集計して, 例えば次のようなデータを生成させます。 &rank1=Sai,0,1,0,1,0,0,1,0,1,0,1,0,1,0,0,0,1,1,0,0,0,1,0,1,0& &rank2=Uma,0,1,0,0,1,0,0,0,1,0,0,0,1,0,1,0,0,1,0,0,0,0,1,1,0& &rank3=Inu,1,0,0,0,1,0,0,1,0,0,0,0,0,1,1,0,0,0,0,1,0,0,0,0,1& &rank4=Ushi,0,0,1,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0 このデータを,上位4チームのビンゴ画面を表示させるFlashで受け取って, その Flash に表示させれば良いだけです。 つまり 4チーム 表示用のFlash は別に作成する必要がありますが, 上のデータによってチーム名を表示させて,ビンゴの色を変えれば良いだけですから,そんなに難しいことではないと思います。 または, データをとりまとめるマシンには,順位は関係なく,各チームから送信されてくるデータをただ保存しておいて, そのデータを「上位4位までのチーム」表示用 Flash ですべてロードし,Flashに集計させても良いと思います。 ------------------------------------------ しかし,私が一番難しいと思ったのは "「上位4位までのチーム」 をどうやって決めるのか。" ということです。 上の例では,正解問数だけで Sai さんチーム10点 Uma さんチーム8点 Inu さんチーム7点 Ushi さんチーム6点 という順位にしていますが,, 実は4点でランク外の Kaba さんチームがいきなりビンゴするかもしれません。 リーチの個数で順位を決めても同じです。 5~6個リーチしているチームより1つしかリーチしていないチームの方が先にビンゴする可能性もあります。 というか,確実に穫ろうとする知能犯チームの方がそういう行動を取るような気もします。 そんなことになったら,何のために用意したもの??? すべて水の泡です。 ギャラリーも「ホヘ???」とあっけにとられてしまいます。 しくみを作るのに難しい順を付けると 上位4位を決定するルール >サーバサイドのプログラムやしくみ >Flash という順だと思います。Flashが一番簡単です。 しかし, 「上位4位を決定するルール」を私は思い付きません。 したがって,他のしくみやプログラムも私は用意する気にはなれませんね。 > 別の1つの画面で上位4チームのビンゴ画面を > Flashでリアルタイムで随時表示して > ギャラリーに見せることはできないかと言われました。 そんな感じで,具体的にどういうことかを考えずに,イメージだけで簡単に言うクライアントさんはたくさんいますね。 わたしもそういうわけのわからないクライアントさんによく泣かされます。 「上位4位を決定するルール」を思い付いていらっしゃるのでしたら, そのまま先へ進まれても良いと思います。 LoadVarsクラスのメソッドですべてできると思います。 または getURL で VBScript を実行させても良いかもしれません。 しかし,もし 「上位4位を決定するルール」 が決まらないのでしたら, 根本的に別の方法や演出を考える方が良いと思います。 例えば, ゲームの状況を2人くらいのスタッフで見まわって,もう少しでビンゴしそうなチームのモニタをカメラで撮影して回るとか。 そんな感じの方が現実的でなおかつ面白いと思います。
その他の回答 (1)
- taketan_mydns_jp
- ベストアンサー率58% (450/773)
通信させたいならデータを集約するサーバが必要です。 ビンゴのデータをサーバに送り、サーバで集計します。 ついでですので、サーバで集計した順位をクライアント側に返しておけばゲームをやっている人にも『現在8位』のような表示も出来ると思います。 集計用のプログラムはPerlやPHP等のサーバサイドのスクリプトで書きます。 表示用のFlashを用意し、集計値をもとに上位4位までのチームを表示させます。表示用のFlashは定期的にデータをとりにいくように更新し、常に上位4チームを表示させるようにさせます。 めまぐるしく順位が変わるようなゲームの場合はFlashのSocketを使うと良いでしょう。リアルタイムでデータが更新されます。うまくつくればSocket サーバだけでも大丈夫だと思います。 Socketについては下記URLを参考に(と言ってもなかなか構築するには情報が少なすぎますが)。 http://faces.bascule.co.jp/link.php 面白いゲームを作って下さい。 参考まで。
お礼
回答ありがとうございます。 なかなか難しそうですが、参考にさせていただきます。
お礼
大変参考になりました。ありがとうございます。 大分見えてきました。 ゲームの順位のつけ方ですが、ビンゴがそろっている数(普通のビンゴは1つそろったら終わりですが、今回のものはいくつそろっても良い。)と問題を解き終わるまでの時間で決めるそうです。