嘘バルズ構築記録#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:対戦が終了した時に双方に送られる 

コード

とりあえず書いてみたが、まだまだ中途半端。
次はこれをクライアント側に組み込みながらある程度整える。

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