2011-10-23 39 views
0

(GridWorld在Collegeboard的AP考試案例研究中)如何將網絡添加到我在GridWorld中製作的遊戲中?

所以,我在空閒時間裏一直在研究這個遊戲幾年,現在它已經相當不錯了。我有一個漂亮的小棍子角色,在網格中運行並拾取物品並與怪物和東西戰鬥。現在,我認爲我已經準備好將它提升到一個新的水平(因爲我需要爲我的網絡課程製作一個項目,哈哈......)有點難以取得進展。

我在過去使用ServerSocket創建了一些程序,在這裏我有一個服務器正在運行,有幾個客戶端可以連接到它並接收消息,但它們都是簡單的文本程序,它們不會交換超過很少的字符串。插座是我正在考慮使用這個,但我不知道如何設置它...

現在,當GridWorld運行時,它會自動彈出一個看起來像一個JFrame,它包含網格和所有演員。在主要的源文件中,包含uhh,「engine」的所有代碼,如果你願意,基本上有兩個巨大的方法:step(),它控制每個時間單位發生的事情,keyPressed(),它控制用戶按下按鍵時發生的情況。現在,我一直在想,step()肯定需要在服務器端,而keyPressed()應該在客戶端和窗口一起(當然,否則用戶怎麼能看到他們的「 )這個想法是讓主遊戲控制所有NPC的動作和遊戲計算只在服務器上運行一次,並且多個客戶端可以連接到它並且每個人都有自己的角色遊戲(基本上就像一個MMORPG)。

但是,像我一樣,我會分裂它? (或者,如果這是正確的方法?)我甚至不確定如何在服務器和客戶端之間來回傳遞數據 - 對於我剛纔提到的簡單文本程序,我總是使用PrintWriter和BufferedReader。我發現PrintWriter確實有一個接受任何Object的print()方法,但是BufferedReader會如何接收它?它沒有任何方法可以讀取對象。因此基本上,我想知道服務器應該做什麼,客戶端應該做什麼,應該使用哪些庫以及在哪裏放置某些功能的所有具體信息。

+2

我認爲架構mmo是一個SO回答的頂部。 – nos

回答

0

好吧,我已經決定使用套接字,並使用ObjectOutputStreams和東西自己做序列化的東西。我已經想出了把所有東西放在哪裏,而且基本上工作正常,儘管我仍然在遊戲中出現不可避免的故障,需要我們去解決。謝謝,蒂姆:)

1

根據您目前的設計,看起來您可能想要使用類似RMI的東西來進行客戶端與服務器之間的通信。這將允許您專注於如何在客戶端和服務器之間調用方法,而不必擔心管理網絡通信太多。

RMI可能不是您想要長期使用的,但它可能是讓您的客戶端啓動並運行的正確下一步。


至於流 - PrintWriter.print(對象)剛剛寫出String表示 - 即它調用的toString() - 對象的,所以沒有辦法把它放回一個對象。

爲此,您需要ObjectOutputStream和Java seralization。但是RMI會爲你做到這一點,而你不需要太過於細節。