最近在大連的同僚強力推薦我玩 爐石傳說,一個卡牌遊戲。加上五一放一個很長很長的假期,為了磨練自己,決定嘗試開發一個c#的爐石傳說。
這件事情有人已經幹過了,開發了一個網頁版的爐石,但是貌似不能玩。。。。
如果這位同志看到這篇文章,請一定和我聯系!!
[email protected]或q我377372779
第一天
開始學習爐石傳說的玩法,最好的方法是不停的玩遊戲。
一個應用是否邏輯清晰,取決于你對于業務的了解程度,一般到開發後期發現有些邏輯内聚和耦合發生問題,往往都是前期對于業務的了解不夠透徹。
很多開發都往往是随着業務邏輯的了解,進行不停的重構,當然,這個也是一個必然的過程,但是如果能夠在前期就了解業務的話,則可以節約後期大量的時間。
由于長期做對日軟體的緣故,式樣書,設計書先行是根深蒂固的思想。所有設想都先以文字或者僞代碼的形式寫下來,進行一些假想的驗證。
整個項目的平衡感,脈絡,各個子產品,層次結構都在這個時候定下來。這個時候是修改成本最低的階段,等到後期這些子產品再重新劃分,風險就高了。
通過第一天的學(you)習(xi),大概整理除了一個脈絡:
(文字版本的不是很好看,下面的excel版本,浏覽器也看不到。。)

卡牌基礎
法術卡牌
熟讀各種法術牌,講法術牌分類
随從卡牌
各種特性的整理,可以參考各種網絡上的資料
武器卡牌
比較簡單的類型
遊戲環境
英雄
生命值
基本技能
武器
牌堆
套牌
手牌
手裡的牌
戰場
7個位置的随從
法力水晶
由于某些卡牌會改變水晶,也為了細化系統,法力水晶更新為一個獨立的類
第二天
開始進行coding。由于英語不是很好,有一些單詞不知道,然後開始中英文夾雜編碼。
很久前,也讨論過中文程式設計的問題,其實很多變量,用中文還是英語完全沒有限制。
寫代碼隻要能讓自己和維護的人讀得懂就可以了。畢竟即使你用英語變量,你的注釋還是中文的。。。
當然,如果你想讓代碼能夠國際化,特别是開源項目,能用标準的英語來寫代碼是極好的。
nunit用的不是很好,是以,自己寫了一些gui的界面來做一些簡單的ut測試。
第三天
代碼的重構,設計書和代碼的同步。
很多項目,在一開始的時候還有設計書,然後在開發的時候,往往重構好代碼後,設計書還是重構之前的樣子。
ide可以自動重構代碼,但是不能自動重構設計書。。。。
國内項目不注重文檔,是以這種情況很常見。日系的開發,設計書則相當重要,一個是為了日後維護能有個依據,二是為了能夠明确責任。
這個地方為什麼要修改,對于整體項目有什麼影響,都能從設計書的修改履曆中看出端倪。
代碼和設計書同步的時候,也是一個反思的機會,看看現階段寫的代碼,是不是很幹淨優雅,
往往将代碼轉換為設計書的時候,可以看到代碼的問題。特别是代碼的一緻性上,散落在不同地方的代碼,經過整理,用#region歸納後,可以看到很多問題。
第四天
爐石c#版本不是短時間内可以完成的,在完成整個爐石之前,可以考慮用目前的代碼,先制作一些小的工具。
一來可以拉攏人氣,隔一段時間有個小的可以檢證的成果物,不至于半途而廢;
二來,小工具的制作也是為了爐石服務的,有些小工具的代碼也可以回報到爐石主體代碼。
我向來反對一開始就要做個了不起的東西,或者隻開發了不起的東西,忘記了留下二次開發的接口或者周邊産品的接口。
魔法的定義
魔法類型
攻擊
回複
召喚
卡牌 奧術智慧
變形 變羊術
水晶 幸運币
奧秘
魔法關系
或者 抉擇系:例如:抉擇: 對一個随從造成3點傷害;或者造成1點傷害并抽一張牌。
并且
有副作用的魔法,例如:造成4點傷害,随機棄一張牌。
目标選擇模式
随機
全體
指定
目标選擇方向
本方
對方
無限制
目标選擇角色
随從
英雄
全體
标準效果點數
傷害效果點數、治療效果點數、抽牌數
實際效果點數
由于某些卡牌效果會影響效果點數
效果回數
例如:奧術飛彈是3次1點傷害
附加資訊
難以用上面的規則的卡牌,特殊的附加資訊
第五天
我一直在考慮,ai是不是能代替人。
爐石這樣的遊戲,有許多常用的套路,隻要組好了套牌,然後能夠将很多常用的卡牌組合,優先政策教授給ai,應該可以做到和人對戰。
和國際象棋,圍棋比起來,爐石這樣的遊戲,勝利無非是:運氣好,套牌組的合理,正确衡量場面上各種對方卡牌的威脅程度,熟練使用各種套路,有耐心,不犯低級錯誤。
運氣好,套牌組的合理,這個事情,前者人和ai都一樣,套牌可以人組好後直接給ai使用。
正确衡量場面上各種對方卡牌的威脅程度:這個也不難,其實卡牌的使用成本已經是一個可以量化的威脅度名額了。
熟練使用各種套路:對方出了一個 10/10
(合理的閥值)的家夥,如果有變羊術,就變掉;對手一大堆血量3,4的随從,就用清場的牌,這些套路也很直覺
有耐心,不犯低級錯誤:這個是ai的長處,ai絕對不會忘記還有魔法可以直接 打臉,還有可以使用的随從去 打臉
當然,對于頂級高手ai還不是可以簡單的取勝,審時度勢,及時調整戰略的能力,人還是有着無可比拟的優勢。
下面這個連結是onedriver上共享的設計書,有些圖形對象無法在浏覽器中顯示,不知道能不能通過下載下傳的方式儲存到本地,然後打開。
代碼在github上面,不過為了幫mongodb的項目拉人氣,是以,将代碼放到了mongodb的解決方案裡面了。
大家下載下傳代碼的時候,順手點個贊吧 star 一下