嘘バルズ構築記録#7
サーバとクライアントの連携
ゲームの流れに沿って考えてみる
内容が#2の処理と被るが
マッチングから1ターン目開始まで
クライアントAが、サーバに「プレイヤー名とデッキ情報」を送ってマッチングを要求する。
クライアントBが、(以下Aと同じ)
サーバが、AとBの要求を受けてマッチングする(細かいマッチング処理とかはとりあえず考えない)
サーバが、AとBにマッチングが成功したことと相手の基本情報を伝える
AとBは、マッチング成功を受けて対戦画面を作成し、準備が完了したらサーバに準備完了を送る。
サーバは、AB両方の準備完了を受けて対戦の初期状態を構築する。(先攻後攻の決定、デッキを山札にしてシャッフル、初期手札)
サーバが、AB両方のそれぞれの初期手札と先攻後攻情報を送り、マリガン操作を要求する。
AとBは、初期手札を表示してプレイヤーにマリガンをしてもらい、操作を送信する。
サーバは、クライアントからのマリガン操作を受け付けて処理をする。AB両方の処理が完了したら、それぞれに初期盤面状態を送り、先攻1ターン目が始まる
1ターン目のターン開始時処理は通常の対戦では発生しないが、ソロモードだと必要か?
メインフェイズ
ターンプレイヤーが操作を送信し、その結果を受け取る。
非ターンプレイヤーは結果だけを受け取る。
クライアント操作送信
手札のユニットカードのプレイ(手札のインデックス、ユニット配置位置、追加パラメータ)
手札の特技カードのプレイ(手札のインデックス、追加パラメータ)
ユニットの攻撃(攻撃ユニットの位置、対象ユニットの位置)
テンションカード
テンションスキル(追加パラメータ)
ターン終了
リタイア(非ターンプレイヤーも送信可能)
手札のカードの「プレイ可能性や配置可能位置、追加パラメータの設定可能な値のリスト」はサーバ側で事前に判定し、カードのデータに付随しておく。
これはクライアント側でカード効果の処理を一切しないため。
ユニットの「攻撃の可否と攻撃対象のリスト」も同じくサーバ側で事前に判定して、ユニットのデータに付随させる。
攻撃対象は特に複雑な条件ではないが、攻撃による死亡予測を表示したい場合、攻撃時効果を予測処理に含めないといけない。
ターン終了を送った場合、次にターンプレイヤーになるクライアントは、ターン終了までの演出を再生し終わってからサーバに「ターン終了完了」を送る。それを受けてサーバはターン開始処理を実行する。
制限時間を実装する時にターン開始時のタイミングを正しく合わせるため。
サーバ結果送信
LogとBoardという二種類に分ける。
Log
何が起こったかのリスト。
これに基づいてクライアントは演出を行う。
とりあえず実装は後回し
Board
一方のプレイヤーから見た最終的な盤面状態。
前回のBoardの状態からLogの更新処理を行うと今回のBoardの状態になる。
待つ状態により種類がある
Playable:メインフェイズ中のターンプレイヤーに送られる。手札やユニットに付随データが設定されている。
Nonplayable:非ターンプレイヤーに送られる
Choose:効果中に選択が必要な場合にターンプレイヤーに送られる 内容はNonPlayableに選択に必要なデータが追加されている。
ChangeTurn:ターンプレイヤーが変わる時に次のターンプレイヤーのターン終了演出を待つときに送られる 内容はNonPlayableと同じ
GameEnd:対戦が終了した時に双方に送られる
コード
とりあえず書いてみたが、まだまだ中途半端。
次はこれをクライアント側に組み込みながらある程度整える。
この記事が気に入ったらサポートをしてみませんか?