Internet Tetris

client:
1.listen server 的 packet 以做相對應的處理
2.將 user 的動作(與方塊相關的,如消去,旋轉,落下…等等,傳送到 server)
僅把動作送出去,對圖形的處理仍由 client 處理
3.與方塊相關的流程,圖形處理(自行產生下一個方塊)
server:
1.listen client 的 packet,轉送到其他 client
流程:
internet_tetris_flow.jpg
說明:
1.Server為一模組,只做 Listen, 然後轉送,為以後可能有多遊戲共用,所以支援 thread;日後 Server 端則獨立,除非有bug,否則不變動.
使用者的 USE CASE 敘述
1.選擇我要連線
遊戲嘗試向Server發出訊息
如果得到成功的回應,則開始遊戲
遊戲會亂數產生方塊,並且一直等待使用者的反應(旋轉,落下,移動)
在方塊產生後,方塊會一次落下一格,直到碰到障礙物為止
接著會畫出來
並且送訊息給Server
當方塊落下後,遊戲判斷是否可以消去方塊
若消去,畫出消去,並送訊息給Server
並且產生下一個方塊
偶爾會產生特殊的武器,使用者可以依據武器的特性來做出反應
2.選擇當主機
遊戲會檢查Server是否起始,若沒有,則起始 Server 的服務.並送出訊息給Server說要等待其他使用者進入.
有的話就送訊息給Server要建立.
等待Server給的通知.
當有通知後請參考1
Server的部分
起始後,會先建立Listen thread
Listen thread會持續聽取傳來的message,訊息定義如下:
new game: 若訊息是要建立新遊戲,則建立 Send thread, 佇列, 和清單,並開始服務
同時把ip位址放到清單中.
(會傳來ip位址以及建立新遊戲的訊息)
要求連線: 若訊息是要求連線,則把ip位址放到清單中,並且依據清單送出可以開始的訊息到佇列中.
(會傳來ip位址以及要求連線的訊息)
轉送: 若是遊戲的訊息,則依據傳來的ip位址,和清單比對,不相符的ip位址,則把訊息以及清單的ip位址放到佇列中.
(會傳來ip位址,以及要告訴其他使用者的訊息)
Send thread:
會持續去檢查佇列,如果有需要送出,則把訊息送出.
佇列:
佇列主要是存放訊息,是的,Listen thread會一直將訊息塞到這裡去.
清單:
這張清單主要是存放連線上來的電腦的ip位址.
方塊類別(Tile)
狀態:9×9 matrix
旋轉: rotate
武器(寶物)類別(Weapon)
佔掉的位置為9×9
以圖形表示
會有發射,爆炸,壓掉,亂數消去的動作
遊戲類別(Game,應該也可說是Form本身)
控制遊戲主要流程
Server類別(Server)
thread list:紀錄產生後的thread的id
佇列 list: 這個list裡面就是放佇列
清單 list: 這個list裡面就是放清單
listen thread id
訊息類別(Message)
Body 訊息內文,基本上為一字串
1~10表示Game種類
11表示訊息種類
2~15表示為傳送來的ip位址
16~以後表示是訊息本身內容,基本上Server並不認識這段訊息,只是忠實的送出