Fw: [問題] 對亦遊戲的 SERVER 端怎麼寫?

看板GameDesign作者 (LaPass)時間12年前 (2013/11/28 22:36), 編輯推噓5(5012)
留言17則, 6人參與, 最新討論串1/3 (看更多)
※ [本文轉錄自 java 看板 #1IbrI_2L ] 作者: LaPass (LaPass) 看板: java 標題: [問題] 對亦遊戲的 SERVER 端怎麼寫? 時間: Thu Nov 28 22:35:40 2013 打算用websocket在網頁上寫個對弈遊戲 例如黑白棋、五子棋、圍棋等等 目前已經將websocket的連線轉接過 所以可以不用管那些技術細節 現在我在做的是對奕室的SERVER部份 就是,兩人輪流子,以及把棋盤的結果傳輸給觀眾的部份 裡面有 1.一群觀眾 2.玩家(a) (要考慮網頁視窗多開的可能性,因為應該會有人這樣幹) 3.玩家(b) 流程是這樣: 1.輪到玩家(a)下棋,通知玩家a進入落子模式 2.等候玩家(a) 3.當任何一個玩家(a)的連線收到落子訊號時,忽略其他玩家(a)連線的落子 並關閉玩家(a)的落子模式 4.通知所有使用者(玩家a、玩家b、觀眾)棋盤上多了顆旗子 5.判斷勝負,如果出現勝負就切換到遊戲結束的流程 6.輪到玩家(b)落子,以下略 因為沒看過別人關於這部份的設計 也不知道該用什麼關鍵字去找這樣的範例或設計模式 自己想了兩個.... 一是依照一般的遊戲流程,分成update()跟draw()兩部份 由更上層的執行序控制的邏輯,去定時呼叫計算跟繪圖兩部份 一般遊戲的是60fps,不過如果是對弈類的,應該300毫秒就很即時了 但是 ,這樣可能會讓程式變得很複雜 理由是每次執行到update()時,他都要去判斷現在的流程到哪個地方 然後在決定要作什麼事情這樣 二是專門開一條執行序去跑遊戲邏輯的loop 如果跑到要等待的地方就把他blok在那邊 這樣程式會比較好寫 但是我覺得這方法可能會有個問題就是..... 萬一有一千個人在下棋,就有一千個遊戲室 那不就意味著有一千條執行序在跑? 我沒寫過什麼太大的、一堆人同時在線的程式 不知道這樣寫會不會有什麼問題..... 所以想請問 一般遊戲SERVER是怎麼處理這種遊戲邏輯的? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.38.73.123 ※ 發信站: 批踢踢實業坊(ptt.cc) ※ 轉錄者: LaPass (114.38.73.123), 時間: 11/28/2013 22:36:53

11/28 22:38, , 1F
補充,是用java寫的
11/28 22:38, 1F

11/28 23:42, , 2F
感覺State並沒有很多 Server端的Event基本上只有落子
11/28 23:42, 2F

11/28 23:44, , 3F
以event-driven在收到落子的Request時做處理應該可解?
11/28 23:44, 3F

11/29 00:10, , 4F
感謝,我一開始想的太複雜了XD
11/29 00:10, 4F

11/29 00:40, , 5F
與其看是否第一個a送的訊號,不如驗證a送來的是否合法吧
11/29 00:40, 5F

11/29 00:40, , 6F
同時有兩個合法的訊號來源本身就是問題了?
11/29 00:40, 6F

11/29 00:42, , 7F
而1000個遊戲室,在我看來1000條執行緒跟1條執行緒似乎沒
11/29 00:42, 7F

11/29 00:42, , 8F
似乎都一樣吧XD
11/29 00:42, 8F

11/29 00:43, , 9F
有什麼非用Multi-Thread的理由?
11/29 00:43, 9F

11/29 08:44, , 10F
感覺 multiprocess 好處比較大,一條線炸了不會全死
11/29 08:44, 10F

11/29 10:15, , 11F
我這樣說好了,一個房間開始後,一定要一個單獨Thread去維
11/29 10:15, 11F

11/29 10:16, , 12F
持該房間的運作? 其實server端處理的資料只有驗證玩家跟
11/29 10:16, 12F

11/29 10:16, , 13F
處理每回合玩家送來的資料吧
11/29 10:16, 13F

11/29 10:40, , 14F
好吧,還是Java跟C不同(死
11/29 10:40, 14F

11/29 15:17, , 15F
event-driven 加上 class_tag 為什麼要用 thread?
11/29 15:17, 15F

11/29 15:21, , 16F
加上 time out 處理 斷線問題?
11/29 15:21, 16F

12/01 16:56, , 17F
我自己寫也是至少一個Thread在Server端
12/01 16:56, 17F
文章代碼(AID): #1IbrK7To (GameDesign)
討論串 (同標題文章)
文章代碼(AID): #1IbrK7To (GameDesign)