我想在Java中製作一個簡單的遊戲。我想編碼一個接受多個玩家的服務器。這裏是遊戲的元素:具有共享資源的多線程服務器
玩家連接到服務器玩遊戲,並指出一個數字。每個玩家只玩一個遊戲。如果有4名玩家連線,遊戲只會開始或結束。如果所有球員總數大於21都失敗,否則全部獲勝。遊戲結束後,每位玩家如果贏了或輸了,都必須得到警告。
獲勝/失敗檢查的算法,或接受多個客戶端我得到它。我懷疑是什麼應該是線程(或可運行對象)和/或什麼是共享資源。只需幾條指南,我就可以實現這一點。
我想在Java中製作一個簡單的遊戲。我想編碼一個接受多個玩家的服務器。這裏是遊戲的元素:具有共享資源的多線程服務器
玩家連接到服務器玩遊戲,並指出一個數字。每個玩家只玩一個遊戲。如果有4名玩家連線,遊戲只會開始或結束。如果所有球員總數大於21都失敗,否則全部獲勝。遊戲結束後,每位玩家如果贏了或輸了,都必須得到警告。
獲勝/失敗檢查的算法,或接受多個客戶端我得到它。我懷疑是什麼應該是線程(或可運行對象)和/或什麼是共享資源。只需幾條指南,我就可以實現這一點。
我從你的陳述中瞭解到,你需要確切的4名玩家來決定遊戲的結果。每個玩家在連接到服務器時傳遞一個數字,並且他/她不能進入或傳遞更多內容。
這樣的共享資源是CONNECTION總SUM和NUMBER和線程是連接到服務器。因此,無論何時玩家請求連接你,開始一個新的線程和這個線程增加共享總計和連接數和增加後也檢查總金額和no。的連接。
那麼,在Game類(如果存在的話)中它應該如何啓動?更具體地說,我怎麼能把玩家和遊戲聯繫起來? – Duozhasht
你可以有一個GAME類來實現runnable,它擁有所有的共享資源和運行方法。構造函數將輸入爲數字並啓動此內部線程。內部線程或運行方法將實現所有遊戲邏輯。還有另一個創建和啓動GAME線程的類CONNECTION。 –
你嘗試了什麼,究竟是不是按照你預期的方式工作? – Philipp
我對併發的方式有點困惑。我可以用代碼修復的方式來做到這一點,就像一個遊戲是一個帶有玩家列表的可運行對象,當我有4名玩家時就開始創建。遊戲解決後,將打印給每個客戶的結果。但是我真正想要的是每個客戶端都是一個線程,在輸入數字後保持阻塞狀態(等待()),當所有玩家介紹他們的數字時,都會被警告繼續並打印結果。 – Duozhasht
您應該儘可能避免多線程。多線程導致死鎖和競態條件導致模糊和不可能重現錯誤。 Java提供了[New-IO](http://tutorials.jenkov.com/java-nio/index.html),這是一種在一個線程中處理大量客戶端的方法。 – Philipp