房主跑了,剩下的人接手
15659ef^..8154e68 ↗
連線亂鬥做出來了。沒有中央伺服器,所以房主掉線這件事得自己解,最後的做法是讓剩下的人繼位。
AbstractOnline melee shipped. With no central server, a host dropping out is a problem you have to solve yourself, and the answer turned out to be letting a remaining player take over the room.
那時候在想什麼
連線對戰本來就排到了,而且是時候做了。
七週前我拿掉單機雙人對戰的時候寫過,與其做兩個人擠一支手機,不如以後做連線。那個以後就是這一週。
實際做了什麼
一天做完 M1 到 M3。
先是亂鬥的淘汰制,接著是連線的骨架:棄戰的動詞、信封的協定、由房主當權威中繼的連線層。再來是槽位房,一個房間開多個槽,二到四個真人星型撮合,有開桌模板跟候客名單。
然後是最麻煩的那一塊。
沒有中央伺服器的話,房主掉線整局就散了。我的解法是繼位:房主一走,凍結窗先撐住,剩下的人裡選一個接手,重建連線、遲到的歸隊。為了讓繼位當下不會斷在半路,客人跟客人之間還要預先掛一條備援線。
如果房主是在對局中途走的,他的位子不會空著,剩下的人接管他的 AI 繼續打完。那是初期真人亂鬥的設計,我想用最簡單的方式解決房主斷線,最後也做到了。
另外進客棧之前現在會擋一張卡,第一次進來必須先取俠名,想不到的話有代擬。要有身分才能連線,那樣比較有沉浸感。
試過但沒留下
mesh。
我原本想的是所有人互相連成一張網。實際做下來,星型組織加上繼位比 mesh 更好。
結論
繼位這一整層是沒有伺服器的代價。有中央伺服器的話,這些全部不用做。
我沒有動搖過。原則還是那個:除非是積分排行榜那種具有半永久身分性的東西,才會用到伺服器,而目前還不需要。
那一週我的工作方式也變了。我開始用雲端開發,程式碼已經不在我自己的電腦上。完成一個階段之後開 PR,我來審核。
所以這一天有七個 PR。這個專案前面六百多個 commit,總共才七個。
至於 Discord,還是沒有人。玩的還是我朋友跟我老婆。