我的浏览器游戏有两个人在不同浏览器上玩的问题。游戏状态由使用 Game Class 的 Session 变量和玩家点击的按钮控制。游戏结束时,玩家有 3 种选择,要么重新匹配同一个玩家,要么寻找另一个玩家,要么完全断开游戏。如果玩家断开连接,游戏可以彻底销毁游戏对象并恢复所有 Session 变量。
我遇到的问题是同步玩家选择的其他两个按钮。如果两个玩家都选择了相同的按钮,那么游戏将再次进行。但是,如果一名球员想要复赛而另一名球员想再次比赛,那么意见不合的球员必须都找到新球员。
我使用了两个 Session 变量,PlayWithSamePlayer意味着他们想要与同一个玩家重赛。我还使用ContinueChoicesMade来确保两个玩家都选择相同的选项。如果ContinueChoicesMade为假,则表示两个玩家不同意,并被放回我的游戏管理器以搜索其他玩家。我可以弄清楚如何在我的 Game 类中使用我的两个玩家同步方法,以便可以听到两个玩家的动作。目前,如果我运行游戏,当它到达我的方法时,它会以 NullException 的形式出现。
我希望在游戏结束时,一个玩家选择一个按钮,浏览器等待另一个浏览器点击一个按钮,然后检查他们按下的是否相同,然后是否相同;游戏继续进行,如果他们点击的内容不同;游戏继续进行。在玩家点击重新匹配或找到新玩家后,同步 Session 变量的最佳方法是什么。下面是我在处理两个玩家的游戏类中的方法,以及在我的 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;
}
}