這裏講的不是一個一步一步的做棋牌遊戲執行教程,而是“設計”本身——探索,思考,執行,修改的過程,一步步地執行設計其實是最簡單的那一部分,執行設計不叫設計,最多算個熟練工。
首先我們拿到一副棋牌。第一步應該是分解“設計”這件事情本身,(注意,這裏不是把棋牌分成幾類),分解出數據結構的那一層次設計。通常我們拿到一份這樣的設計,直接開始選擇數據結構——棋牌是背包、堆棧、隊列、紅黑樹?特別喜歡照本宣科,善于模仿的同學。而做過項目的同學,通常首先開始弄一個棋牌接口、棋牌類,然後增加打棋牌方法。而我認爲這都不是好的設計步驟。

傳統開發人員對軟件的理解是數據結構+算法,現代面向對象的開發人員的理解是抽象對象(繼承/多態/泛型)出具體對象。它們的共同特點都是將現實世界直接抽象爲程序設計,而每種開發人員所掌握的設計範式或習慣均有差異,爲了團隊不得不用框架及最佳實踐來約束差異,減少理解和修改的成本。
但是,將現實世界直接抽象爲程序設計到底是不是正確的思路呢?這個思路對開發人員無疑是最直觀的,但長久在團隊的約束下,久而久之就變成了對“最佳實踐”的執行——而非設計,而執行則是最簡單的那一部分,只會執行的程序員通常被戲稱爲碼農。
那么棋牌是背包、堆栈、队列还是红黑树呢?都不是,你会发现你学会了这么多数据结构,一点用处也没有,(传统的面向对象设计无疑能够解决这类问题,面向对象(比如;" />
爲什麽這麽多數據結構,都處理不了棋牌?抑或說處理地非常別扭,不夠完備。因爲我們只是背誦了那些數據結構,就像背誦乘法口訣表,1乘以1到9乘以9,那麽19乘以1234呢?沒有人教你乘法過程——沒有人教你對數據結構的設計。因爲初學者在學習數據結構時是與算法相對的,會被理解爲一個靜態的結構。但是數據結構不是一個靜態結構,不是像房型建築就是那個樣子。數據結構就包含了算法,我們應該將數據結構分解爲集合與算法——數據結構的本質不是結構,而是集合與算法,這看起來很像面向對象中的對象——狀態與方法。但它們之間還是有一定的差別。
武漢閑玩網絡棋牌遊戲開發從PC端就開始做棋牌,後面做手機棋牌,再後面做房卡棋牌,武漢閑玩程序員告訴你爲什麽說數據結構的本質是集合與算法?回到棋牌遊戲上,不能用其它數據結構,不如我們設計一個棋牌結構——棋牌本身是一個集合,這個集合分爲兩大類。1)桌面上的棋牌,2)人手上拿的13張棋牌。
1)桌面上的棋牌——它的最大值是恒定的,只能被隨機delete不能被add,爲空後遊戲結束。(這就是3個算法)
2)人們手上的棋牌——它的值始終是恒定的,隨機add,選定delete,每delete一次,同時被從桌面棋牌上add一個進來。(這是4個算法)
你說這是什麽數據結構?第2個看起來有點像哈希表,因爲要選定delete,要有索引,有索引就用哈希?No,這不是任何數據結構,這只是集合,以及對集合的操作。不是棧也不是樹,不要讓數據結構將你的思維限定住了
不应该将现实世界直接转化为计算机语言,而应该先抽象为数学语言(或者说数学语言的需求分析),然后进行技术选型,再转化为计算机语言——函数式也好,面向对象也好,动态语言也好,都是浮云。如果有可能,欢迎大家聯系我們武汉闲玩共同探讨棋牌开发和游戏开发的细节。