異なるブラウザで2人がプレイするブラウザゲームに問題があります。ゲームの状態は、ゲームクラスとプレーヤーがクリックするボタンを使用したセッション変数によって制御されます。ゲームの終了時に、プレーヤーには3つの選択肢があります。同じプレーヤーを再戦するか、別のプレーヤーを見つけるか、ゲームを完全に切断するかです。プレーヤーが切断した場合、ゲームはゲームオブジェクトを完全に破棄し、すべてのセッション変数を元に戻すことができます。
私が抱えている問題は、プレイヤーが選択した他の2つのボタンを同期させることです。両方のプレーヤーが同じボタンを選択した場合、ゲームは再びプレイに進みます。ただし、一方のプレーヤーが再戦を希望し、もう一方のプレーヤーが再度プレイしたい場合は、同意しないプレーヤーの両方が新しいプレーヤーを見つける必要があります。
私は2つのSession変数を使用します。PlayWithSamePlayerは、同じプレーヤーとの再戦を望んでいることを意味します。また、ContinueChoicesMadeを使用して、両方のプレーヤーが同じオプションを選択するようにします。ContinueChoicesMadeがfalseの場合、2人のプレーヤーが同意しなかったことを意味し、別のプレーヤーを検索するためにゲームマネージャーに戻されます。両方のプレーヤーのアクションを聞くことができるように、ゲームクラスに配置される2人のプレーヤーの同期メソッドで作業する方法を理解できます。現時点でゲームを実行すると、メソッドに到達するとNullExceptionとして出力されます。
ゲームの終了時に、一方のプレーヤーがボタンを選択し、ブラウザーがもう一方のブラウザーがボタンをクリックするのを待ってから、押したものが同じかどうかを確認し、次に同じかどうかを確認するようにします。ゲームは進行し、クリックしたものが異なる場合。ゲームが進みます。プレーヤーが再一致をクリックした後、または新しいプレーヤーを見つけた後、セッション変数を同期するための最良の方法は何ですか。以下は、2人のプレーヤーを処理するゲームクラスのメソッドと、aspx.csページで呼び出すメソッドです。
((Game)Session["Game"]).RoundOverSynchronizing(Session);//when should I call this out? this is not apart of the game class.
public void RoundOverSynchronizing(HttpSessionState player)
{
if (((bool)player1["PlayWithSamePlayer"]) == true
&& ((bool)player2["PlayWithSamePlayer"]) == true)
{
player1["ContinueChoicesMade"] = true;
player2["ContinueChoicesMade"] = true;
}
else if (((bool)player1["PlayWithSamePlayer"]) == false
&& ((bool)player2["PlayWithSamePlayer"]) == false)
{
player1["ContinueChoicesMade"] = true;
player2["ContinueChoicesMade"] = true;
}
else
{
player1["ContinueChoicesMade"] = false;
player2["ContinueChoicesMade"] = false;
}
}