我有兩個人在不同的瀏覽器上播放我的瀏覽器遊戲的一個問題。遊戲狀態由使用遊戲類和按鈕玩家點擊的會話變量控制。在遊戲結束時,玩家有3種選擇,可以重新匹配同一個玩家,找到另一個玩家,或完全斷開遊戲。如果玩家斷開連接,遊戲可以乾淨地銷燬遊戲對象並恢復所有的Session變量。如何知道兩會已單擊按鈕在瀏覽器遊戲ASP.NET C#
我遇到的問題是另外兩個按鈕的玩家選擇同步。如果兩個玩家選擇相同的按鈕,則遊戲繼續再次玩。但是如果一名球員想要複賽而另一名球員想再次參賽,那麼不同意的球員必須同時找到新球員。
我使用兩個會話變量,PlayWithSamePlayer意味着他們想要與同一個玩家重新匹配。我也使用ContinueChoicesMade來確保雙方玩家選擇相同的選項。如果ContinueChoicesMade是錯誤的,那麼這意味着兩個玩家不同意,並且被放回到我的遊戲經理中去尋找另一個玩家。 我可以弄清楚如何在我的兩個玩家同步方法中工作以放置在我的遊戲類中,這樣玩家的動作就可以被聆聽到。目前,如果我運行遊戲,當它到達我的方法時,它會作爲NullException出現。
我希望在遊戲結束時,一個玩家選擇一個按鈕,瀏覽器等待另一個瀏覽器點擊一個按鈕,然後檢查他們按下的是否相同,然後如果是相同;遊戲繼續前進,如果他們點擊的內容不同,遊戲繼續前進。玩家點擊重新匹配或找到新玩家後,同步會話變量的最佳方法是什麼?下面是我在遊戲類中處理兩個玩家的方法,以及我在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;
}
}
會話數據不共享。使用相同的*正確共享* - 也就是*不*會話,*不* *視圖狀態,*不*靜態 - 資源來傳遞這個狀態,就像遊戲狀態的*休息*一樣。也就是說,「繼續」遊戲與「玩」遊戲時進行選擇/移動沒有區別。 – 2012-10-06 19:15:33
上面的方法在運行遊戲的遊戲類中。它需要的參數是將信息發送給遊戲類的瀏覽器會話,然後將2 Sessions分離爲player1和player2。我發現當確認我的ContinueChoicesMade會話變量被選中時,會感到困惑。當兩位玩家點擊不同的按鈕時,這只是錯誤的。 – GivenPie
會話數據在客戶端之間*不共享。我很困惑這是如何工作的。如果有一些魔術棒正在使用,那麼應該在上下文中加以說明。 – 2012-10-06 19:25:28