原创 百田,再見

9月27號,項目正式解散。結束了我在百田短暫的服務端開發的職業歷程。對於項目的失敗,我感覺沒有多大疑問。我總結了兩點失敗原因:一方面從遊戲本身的功能可玩性來看,整個遊戲開發了快一年,遊戲功能卻隨便點點就沒了,核心玩法英雄戰鬥毫無亮點,即使

原创 遊戲服務器關於玩家數據的解決方案

遊戲系統的數據可以分爲兩大類。一類是由策劃童鞋配置的玩法規則,稱爲策劃數據或產品數據;第一類是保存玩家或公共信息的數據,稱爲用戶數據。一般說來,策劃數據只能由程序讀取而不能修改,而用戶數據則增刪查改都會涉及。對待玩家數據的嚴謹態度,無論怎

原创 Netty網絡聊天室之心跳檢測及斷線重連

前面介紹了Netty服務端客戶端基本通信框架的搭建過程。下面將介紹Netty如何進行心跳檢測以及處理客戶端的斷線重連。爲了適應惡劣的網絡環境,比如網絡超時、閃斷,客戶端進程僵死,需要機制來保證雙方的通信能正常工作或者自動恢復。對於服務端來

原创 屏蔽字檢測

遊戲中經常需要檢測玩家的暱稱或者聊天內容是否包含敏感詞組。 一般來說,檢測的算法都是直接利用正則表達式進行全字匹配。拋開正則效率差強人意來說,正則算法無法處理拆字情況。舉個例子來說,假設"馬克思"是一個敏感字,玩家直接輸入”馬克思“肯定會

原创 備忘錄模式實現畫圖板撤銷操作

設計模式給人的第一感覺,大概就是抽象,還有遙不可及。其實隨着開發經驗的逐漸積累,當你偶爾翻一下關於設計模式之類的書籍,你就會發現,裏面的某些模式自己曾經實現過,只是尚未上升到理論的階段。 設計模式,是針對某一類問題的最佳解決方案。可以這樣

原创 不相交集生成隨機迷宮

(一)數學概念 若對於每一對元素(a,b),a,b ∈S,aRb或者爲true或者爲false,則稱在集合S上定義關係R。如果aRb爲true,則說明兩者有關係。 等價關係是指滿足以下三個性質的關係R a) (自反性)對於所有屬於S的a,

原创 網頁爬蟲抓取js動態渲染數據

先從一堆故事背景講起吧—— 在非計算機專業的世界裏,如果一個人是學計算機相關專業的,那麼這個人肯定會修電腦,會做外掛,會盜號…… 因爲我是學計算機,有一天,表哥找了我,說請人做的一個用excel處理網站動態數據的程序不會跑了,然後他第一感

原创 細數jdk庫的四宗罪

寫過java代碼的編程人員都有這種感慨——jdk庫非常龐大,並且有非常多精心設計的工具可以拿來用。另一方面,jdk版本的向下兼容性也做得非常好,升級版本對舊項目來說沒多大困難。由於這兩點原因,jdk不可避免地存在一些設計上的缺陷。爲了保障

原创 lua樹型打印table

Lua,是當今手遊客戶端腳本開發的寵兒,鼎鼎大名的“魔獸爭霸”就是採用Lua作爲其腳本開發語言。 Lua的設計理念跟Scheme如出一轍,遵循極簡主義哲學。但是麻雀雖小,五臟俱全。 想當初開始接觸手遊開發,找了一本《Lua程序設計》作爲教

原创 觀察者模式實現事件驅動模型(非GUI事件)

先引入四人幫之書裏面關於觀察者模式的一段高度概括 觀察者模式—— 定義對象間的一種一對多的依賴關係,當一個對象的狀態發生變化時,所有依賴它的對象都得到通知並自動更新。 事件驅動模型是觀察者模式的一種典型應用。該模式主要由事件源,事件對象,

原创 Dijkstra算法求解最短路徑

Dijkstra算法是由荷蘭計算機科學家狄克斯特拉於1959 年提出的,因此又叫狄克斯特拉算法。是從一個頂點到其餘各頂點的最短路徑算法,解決的是有向圖中最短路徑問題。迪傑斯特拉算法主要特點是以起始點爲中心向外層層擴展,直到擴展到終點爲止

原创 手遊服務端框架之配置與玩家數據庫設計

一款網絡遊戲的設計,至少需要兩種數據庫。策劃數據庫是表示遊戲玩法規則的數據庫;用戶數據庫是保存玩家個人信息的數據庫。除了這兩類基本的數據庫以外,還有其他數據庫。例如有些跨服玩法需要配置數據庫來尋找其他服務節點的鏈路地址;有些架構把日誌放到

原创 手遊服務端框架之跨服匹配服

如今的手遊世界,如果沒搞個跨服賽事,都不好意思說它是一個手遊了。說到跨服,就不得不說下匹配服了。比如一個跨服天梯賽事,需要滿足不同服的玩家能夠同屏PK。爲了能夠把實力接近的玩家作爲對手,我們需要一個獨立的匹配服來收集數據,然後進行房間分配

原创 有限狀態機在遊戲中的應用

遊戲裏經常有各種AI行爲,例如怪物砍人,玩家自動掛機等等。假設有這樣的簡易場景場景裏的一隻怪物平時就在洞口巡邏。當遇到敵人的時候,如果比對方強大,就揍敵人;如果比敵人弱,就繞道逃跑。用switch或if語句,很簡易實現上面的需求enum

原创 Netty網絡聊天室之使用spring管理各種組件

Spring是web開發的寵兒,不管mvc框架選擇structs還是SpringMVC,IOC容器都是選擇Spring。Spring有兩個主要的作用,一個是IOC(依賴注入),另一個是AOP(面向切面編程)。只要是java項目,就可以使用