天天看點

爐石傳說 C# 開發筆記

最近在大連的同僚強力推薦我玩 爐石傳說,一個卡牌遊戲。加上五一放一個很長很長的假期,為了磨練自己,決定嘗試開發一個c#的爐石傳說。

這件事情有人已經幹過了,開發了一個網頁版的爐石,但是貌似不能玩。。。。

如果這位同志看到這篇文章,請一定和我聯系!!

[email protected]或q我377372779

第一天

開始學習爐石傳說的玩法,最好的方法是不停的玩遊戲。

一個應用是否邏輯清晰,取決于你對于業務的了解程度,一般到開發後期發現有些邏輯内聚和耦合發生問題,往往都是前期對于業務的了解不夠透徹。

很多開發都往往是随着業務邏輯的了解,進行不停的重構,當然,這個也是一個必然的過程,但是如果能夠在前期就了解業務的話,則可以節約後期大量的時間。

由于長期做對日軟體的緣故,式樣書,設計書先行是根深蒂固的思想。所有設想都先以文字或者僞代碼的形式寫下來,進行一些假想的驗證。

整個項目的平衡感,脈絡,各個子產品,層次結構都在這個時候定下來。這個時候是修改成本最低的階段,等到後期這些子產品再重新劃分,風險就高了。

 通過第一天的學(you)習(xi),大概整理除了一個脈絡:

(文字版本的不是很好看,下面的excel版本,浏覽器也看不到。。)

爐石傳說 C# 開發筆記

卡牌基礎

  法術卡牌

    熟讀各種法術牌,講法術牌分類

  随從卡牌

    各種特性的整理,可以參考各種網絡上的資料

  武器卡牌

    比較簡單的類型

遊戲環境

  英雄

    生命值

    基本技能

    武器

  牌堆

    套牌

  手牌

    手裡的牌  

  戰場

    7個位置的随從

  法力水晶

    由于某些卡牌會改變水晶,也為了細化系統,法力水晶更新為一個獨立的類

 第二天

  開始進行coding。由于英語不是很好,有一些單詞不知道,然後開始中英文夾雜編碼。

  很久前,也讨論過中文程式設計的問題,其實很多變量,用中文還是英語完全沒有限制。

  寫代碼隻要能讓自己和維護的人讀得懂就可以了。畢竟即使你用英語變量,你的注釋還是中文的。。。

  當然,如果你想讓代碼能夠國際化,特别是開源項目,能用标準的英語來寫代碼是極好的。

  nunit用的不是很好,是以,自己寫了一些gui的界面來做一些簡單的ut測試。

爐石傳說 C# 開發筆記

第三天

  代碼的重構,設計書和代碼的同步。

  很多項目,在一開始的時候還有設計書,然後在開發的時候,往往重構好代碼後,設計書還是重構之前的樣子。

  ide可以自動重構代碼,但是不能自動重構設計書。。。。

  國内項目不注重文檔,是以這種情況很常見。日系的開發,設計書則相當重要,一個是為了日後維護能有個依據,二是為了能夠明确責任。

  這個地方為什麼要修改,對于整體項目有什麼影響,都能從設計書的修改履曆中看出端倪。

  代碼和設計書同步的時候,也是一個反思的機會,看看現階段寫的代碼,是不是很幹淨優雅,

往往将代碼轉換為設計書的時候,可以看到代碼的問題。特别是代碼的一緻性上,散落在不同地方的代碼,經過整理,用#region歸納後,可以看到很多問題。

爐石傳說 C# 開發筆記

第四天

  爐石c#版本不是短時間内可以完成的,在完成整個爐石之前,可以考慮用目前的代碼,先制作一些小的工具。

  一來可以拉攏人氣,隔一段時間有個小的可以檢證的成果物,不至于半途而廢;

  二來,小工具的制作也是為了爐石服務的,有些小工具的代碼也可以回報到爐石主體代碼。

  我向來反對一開始就要做個了不起的東西,或者隻開發了不起的東西,忘記了留下二次開發的接口或者周邊産品的接口。

  魔法的定義

    魔法類型

 攻擊

        回複

     召喚

 卡牌    奧術智慧

 變形    變羊術

 水晶    幸運币

 奧秘

    魔法關系

 或者    抉擇系:例如:抉擇: 對一個随從造成3點傷害;或者造成1點傷害并抽一張牌。

     并且  

 有副作用的魔法,例如:造成4點傷害,随機棄一張牌。

    目标選擇模式

     随機

 全體

        指定

 目标選擇方向

        本方

     對方

 無限制

    目标選擇角色

 随從

        英雄

     全體

    标準效果點數

     傷害效果點數、治療效果點數、抽牌數

 實際效果點數

 由于某些卡牌效果會影響效果點數

    效果回數

     例如:奧術飛彈是3次1點傷害

 附加資訊

        難以用上面的規則的卡牌,特殊的附加資訊

第五天

  我一直在考慮,ai是不是能代替人。

  爐石這樣的遊戲,有許多常用的套路,隻要組好了套牌,然後能夠将很多常用的卡牌組合,優先政策教授給ai,應該可以做到和人對戰。

  和國際象棋,圍棋比起來,爐石這樣的遊戲,勝利無非是:運氣好,套牌組的合理,正确衡量場面上各種對方卡牌的威脅程度,熟練使用各種套路,有耐心,不犯低級錯誤。

  運氣好,套牌組的合理,這個事情,前者人和ai都一樣,套牌可以人組好後直接給ai使用。

  正确衡量場面上各種對方卡牌的威脅程度:這個也不難,其實卡牌的使用成本已經是一個可以量化的威脅度名額了。

  熟練使用各種套路:對方出了一個 10/10

(合理的閥值)的家夥,如果有變羊術,就變掉;對手一大堆血量3,4的随從,就用清場的牌,這些套路也很直覺

  有耐心,不犯低級錯誤:這個是ai的長處,ai絕對不會忘記還有魔法可以直接 打臉,還有可以使用的随從去 打臉

  當然,對于頂級高手ai還不是可以簡單的取勝,審時度勢,及時調整戰略的能力,人還是有着無可比拟的優勢。

下面這個連結是onedriver上共享的設計書,有些圖形對象無法在浏覽器中顯示,不知道能不能通過下載下傳的方式儲存到本地,然後打開。

代碼在github上面,不過為了幫mongodb的項目拉人氣,是以,将代碼放到了mongodb的解決方案裡面了。

大家下載下傳代碼的時候,順手點個贊吧 star 一下