我想很多人開始學習寫程式的原因是想要製作遊戲,我最初也是希望當一個遊戲設計師,雖然後來開始寫程式的契機是架設網站。不過終究還是走上了跟遊戲開發相關的道路,還記得...
既然要開發連線遊戲,最一開始需要的思考的問題就是「玩家之間該怎麼連線?」 基本上如果要產生一個連線的話,勢必會有人要扮演伺服器的角色。如果是多人連線遊戲的話,大...
在上一篇的範例中,我們會發現無法「多人連線」,這是因為 Ruby 的程序會因為有一個連線進入後就呈現了阻塞(Blocking)的狀態,為了處理這樣的問題在大多數...
既然知道了 EventMachine 在 Unlight 專案中扮演了處理 TCP 連線的角色,不過實際上又是怎麼設計跟實作的呢? 我們先來看一下在 Event...
我們現在已經有一個可以執行的指令,接下來就是要將 Web Server 啟動。在 Ruby 裡面我們可以透過兩種方式將 Rack 打開。 使用 config....
同學們是否玩過有天梯排名的電競遊戲?有這種賽制的對戰遊戲中,來自四面八方的玩家都可以隨意找對手玩個兩場,並在賽後增減天梯積分,積分越高,越能受到來自其他玩家們景...
伺服器的部分我們已經有一個大概的雛形可以使用,所以我們先切換到客戶端把遊戲的操作設計進去。雖然可以直接繼續把伺服器開發完畢,不過能看到專案動起來也是很重要的。...
前面幾篇我們已經針對建構 WebSocket 做了一定程度的準備,接下來就要將 WebSocket 連線從預設的行為接手回來改為用我們自己的方式來進行管理。這樣...
到目前為止我們已經將遊戲的狀態保存機制處理完畢,接下來只要調整客戶端支援前幾天實作新版本伺服器就能夠透過玩家的暱稱登入遊戲,並且取回上一次進入的狀態。 登入機制...
關於遊戲實作的部分在 Unlight 的原始碼中有太多東西可以參考跟學習,前面半個月的時間我們已經將連線遊戲中最主要的機制了解,透過運用 Socket API...
在上一篇我們了解指令是如何從封裝後客戶端發送到伺服器,我們依舊不清楚 Unlight 是如何將指令的內容轉換成可以被程式執行的動作。因此我們還需要了解 Unli...
在我們能跟伺服器溝通後,就需要來定義伺服器跟客戶端如何發送跟接收對方所傳遞的資料。以 HTTP 協定來說就是一種溝通的方式,伺服器跟瀏覽器都已預先定義好的格式發...
在前面的文章中我們跳過了一個部分,那就是指令在傳輸時要進行加密的方式。以連線遊戲來說,如果我們將玩家操作的指令明文的暴露出來的話,除了對安全性有部分影響之外,也...
到目前為止我們已經能讓遊戲的操作跟伺服器連結起來,可以透過伺服器去管理一些行為的操作。不過要讓其他玩家能夠出現在地圖上,我們就必須調整現階段的程式碼讓伺服器能夠...
在我們將加入地圖的指令處理完畢後,我們就能夠收到來自其他玩家的「加入」資訊,也就能夠呈現其他玩家在地圖上並且做出反應。不過原本 RPG Maker 所支援的只有...
正常情況下我們開發這類伺服器應用每當修改程式後都需要重新啟動,不過 Ruby on Rails 卻可以在不重新開啟的狀況下不斷修改跟測試,這極大的改善了開發速度...
經過重構之後我們終於可以回到「後加入的玩家看不到之前玩家」的問題,這個問題源自於我們在玩家加入時並沒有發送任何資訊給新加入的玩家「線上有多少人」 處理的方式我們...
加密連線的方式有很多種,像是使用 HTTP 協定可以透過 HTTPS 之類來加密,運氣不錯的事 SRP 算是容易理解而他的應用也在 OpenSSL 和一些雲端服...
現在我們已經可以完整的同步不同玩家的資訊,不過依舊無法將玩家的狀態保存在伺服器。因此我們需要改寫伺服器來保存狀態,受限於內容長度以及 RPG Maker MV...
在上一篇我們已經成功將資料庫建立起來,不過我們還需要將原本的 Player Model 轉換成使用資料庫的資料。並且加入玩家連上產生角色、記錄座標這些功能,才能...
既然已經決定好了 Server 和 Client 的方向,我們就先從伺服器端開始著手製作。至少要先有一個能提供基本操作的雛形,才能夠讓後續客戶端相對容易測試。...
前面討論了連線遊戲是如何在伺服器跟玩家之間溝通的方法跟行為,不過遊戲跟 Web 和其他應用相比從初期就很快需要面對複雜的狀態問題。也因為這樣遊戲的除錯跟維護相對...
繼續往下看到 #init_receive 方法的部分,不過出現了一些比較少見的程式碼。 # 受信コマンドの初期化 def init_receive(cmd)...
在開發遊戲時除錯之所以的原因之一是因為要管理的狀態太多了,如果仔細的觀察一個遊戲會發現遊戲就像是一個巨大的狀態機。從玩家所在的關卡畫面、關卡內的 NPC、怪物等...
現在我們的伺服器已經可以處理 WebSocket 連線並且透過我們自定義的物件來管理,不過當接收到指令的時候還是無法直接執行。因為已經採用 WebSocket...
在上一篇我們注意到客戶端的邏輯如果都放在同一個檔案(SimpleRPG_Map.js)裡面是相當混亂的,因此我們需要稍微區分不同的職責來處理。在前面提到的 Un...
當我們已經能夠管理所有線上的玩家後,需要再進一步做的處理就是將其他玩家都顯示出來。因此我們要先增一個叫做 join 的指令表示有一個玩家進入了地圖。 Playe...
到上一篇為止我們已經知道 register_r 這類解析資料的 _r 類型方法是怎麼定義的,但是卻不知道當解析完畢後後直接呼叫的方法實際上是做什麼。 我們繼續以...
我們已經大概了解 SRP 是怎樣在不傳輸密碼的狀況下讓伺服器跟客戶端驗證對方,不過 Unlight 是怎樣利用產生後的 Session Key 去加密傳輸還看不...