見出し画像

サイコロゲームを作ろう!2

もくもくとプログラムをする時間になりました。とりあえずスタート画面というかロビー画面というか、ゲーム開始前の状態ですね。

オンライン状態の人をロビーに表示するような機能

オンライン状態・・・。見当もつかないからAIに聞いてみよう。

オンライン状態をプログラムする方法はいくつかありますが、一般的には、ユーザーがアクセスした時刻を記録し、その時刻から一定時間内に再度アクセスがあった場合はオンラインとみなす方法がよく使われます。

Bing-AI

ふむふむ。よくわからん・・・。AI先生のいうことをいつも理解できない・・・。みんなAI使え、AI使えって言うけど、AI先生難しくないですか?KKししょ~ぅ~。

そうですねぇ、じゃぁこんな感じだと、理解できますかね?

1.ログイン情報を管理するためのデータをサーバー上に保存
2.クッキーを設定した時に、名前と時間をデータに保存する
3.ロビー画面ではそのデータを読み込み、アクセス時間20分以内の人を「オンライン中」として表示します。
4.20分以上の人を「オフライン」として表示します。
5.可能であれば、1日以上経過しているデータは削除しちゃう
6.クッキーに値がセット済みの人が、再度ページを読んできたときにデータのアクセス時間を更新

師匠

あ~、わかります~。これがさっきのAI先生が言ってることなんですか?

そうですね。AI先生がいっている3行の説明文は、体現しようとするとこれくらいのプログラムが必要になります。ここらへんはプログラムを経験していけば、ロジックとしてわかるようになっていくと思いますので、今できなくても気にしなくて大丈夫だと思います。

師匠

1個目でこんな状態だと、気が重いですね・・・。そうしたらまずは「name_complete.php」の後のほうにデータ作成処理を入れるんですかね。

そうですね!
ログイン処理の実装した後は、ロビーでの処理ですね。
ちなみに、オンライン時間の保存は、DBでもCSVでもいいですよ。

師匠

部屋作るだけで大変だ・・・。
では、
・完了画面にDB入力
・ロビーにログイン時間の表示
・ロビーにログイン時間を更新
をプログラムします!

ロビーにいる人が「参加」するボタンを押したときの挙動

うーん、これもデータで「参加」状態を保存すればいいのかな?
参加、不参加?を設定するのは、さっきと同じテーブルにすればいいのかな?

そうですね。この先ゲームを広げていくとして3つのゲームへの参加状態を作ることになるので、その場合はユーザーテーブルにその設定をもったほうがいいですね。ゲーム自体の設定は、別テーブルとかCSVファイルなどに保存することになります。
 0=未参加状態
 1=サイコロゲーム参加
 2=インサイダーゲーム参加
 3=ワードウルフ参加
こんな感じに状態もっときましょうか。

師匠

なるほど、わかりました!でも、ゲーム設定を別にしないといけないとかは、どうやったらわかるんですか?

全体的なシステム構成が見えてくると、わかるようになりますかね。
 ・ユーザー設定
 ・ゲーム設定(CSVヘッダー)
 ・ゲームログ設定(CSV2行目以降)
こんな感じで作っていきましょうか。
画面の動き自体は、難しい仕組みじゃないですね。

師匠

ぜんぶ理解できてるか怪しいですが頑張ります!
「参加」と「辞退」ですね!

「参加」中の人は、「辞退」ボタンを表示

「参加」と「辞退」のボタンだけだったら、「参加状態」を0にするか、1にするかみたいな感じですね!

最初に参加を押した人をオーナーとする

ここからが「ゲーム設定」を作る画面とかの作成になるんですね。
CSVファイル作って管理するのって、DBじゃない理由とかあるんですか?

ぶっちゃけDBでも問題ないです!例えばですね、このゲームが複数同時にできるような構成だった場合は、DBにしたほうが良いと思います。
現時点では、1回ごとにリセットされるみたいな開催を想定していますので、DBじゃなくてもよい、くらいの感覚です。

複数同時版、  DBが良い。
1回リセット版、DBでもCSVでも良い。
そんな感じです。

内容は、CSVファイルの1行目に、
・ファイル作成
・オーナー名
・レイドポイント
・クールタイム
・ゲーム状態(0=スタート前,1=ゲーム中,2=ゲーム終了)
とか保存すればいいかな。

あとは画面遷移などの細かい部分は、ひさきさんが考えてくれていいです。
例えば、
「部屋の作成はデフォルト値で作っちゃって、ゲームスタート前にレイドポイントやクールタイムを変更できる」ようにするか、
「部屋の作成時に、レイドポイントやクールタイムを最初から入力して作成しておく。スタート前なら編集できるようにする」とか。
後者の方が、入力画面が少し減る分、楽になりますかね。

師匠

なるほど、ありがとうございます!
ゲームの情報は1ファイルでCSVファイルで、ファイルがない場合に新規ゲームですね。そうしたら、最初はデフォルト値セットで部屋作って、編集画面を作るのと、スタートボタンを作る感じですかね。

では、「参加ボタンを押したときに、現状募集中の部屋がない場合は、部屋を作成する」ようなプログラムを作ります!

オーナーは「レイドポイント」を決めて、(20~100P)

オーナーは「クールタイム」を決めて、(5~60秒)

この2個は、編集画面に入れる機能ですね。

そうですね、ここで本格的なバリデートチェックを実装することになりますね。バリデートチェックは、フォーム入力値のチェックです。今回の場合は、
①空はNG
②数値のみ
③最小値チェック
④最大値チェック
をそれぞれのフォーム値でやって、
駄目だった場合はエラーメッセージを出すことと、編集画面を表示する画面遷移がいいでしょう。(前のハンドルネームの時は、エラーメッセージを出すだけの画面だったので)

師匠

わかりました!
これは、IF文で①~④まで実装しちゃえばいいんですかね?

そうですね!

1.エラー用の変数を用意

2.入力チェック
 エラーがあった時にエラーメッセージを入れる

3.更新処理の前にエラー用のメッセージが空かチェックする
 ・エラー用のメッセージが空の場合は、値を更新して、完了画面
 ・エラー用のメッセージが空の場合は、更新画面表示

みたいな感じですかね!ものによっては、更新完了しても、更新画面を表示する画面遷移でも良いですが、わかりやすいと思う方で実装しましょう。

師匠

自分が利用者の場合は、なんとなく無意識に利用していますが、プログラムを作る側になった場合に、どういう画面移動がいいかとか、いろいろ考えちゃいますね・・・。

そこらへんは、先人の知恵の部分も大きいと思います。
良いところは見習って、真似して、
自分流に組み替えて身に着けていきましょう!

師匠

では、プログラミングしてみます!

オーナーが「スタート」ボタンを押せるようにする

いよいよ、スタートボタンです!

これは値の編集に比べれば
・ゲーム状態(0=スタート前,1=ゲーム中,2=ゲーム終了)
の0を1にするだけなので、簡単ですね!

師匠

やっと、来週から、ゲームスタート!
ゲーム内のプログラミングの実装ですね!
頑張ります!


この記事が気に入ったらサポートをしてみませんか?