爐石傳說輔助

2021-07-26 12:19:40 字數 1720 閱讀 4552

實現原理:修改遊戲檔案

注入機械人

使用 monocecil,修改 unity3d 生成的 assembly 檔案,在內部注入我們自己編寫的unity3d模組!

實現細節:修改遊戲檔案

其實主要是 monocecil 的使用

通過檔名、類名、方法名,取出方法的定義

static methoddefinition fetch_method(string file, string type, string method)

}if (td == null) return null;

methoddefinition md = null;

foreach (methoddefinition t in td.methods)

}return md;

}catch (exception e)

}

通過檔名和方法定義實現注入

static assemblydefinition inject_method(string file, methoddefinition method, methoddefinition method_tobe_inject)

catch (exception e)

}

注入完了之後,利用

assemblydefinition.write();

方法,把修改後的assembly再寫到乙個檔案裡。

實現原理一:遊戲狀態獲取

單例類hearthstone有幾個重要的類,如scenemgr、mulliganmanager、gamestate、inputmanager等等。

單例,直接呼叫get()方法就可以了!

狀態的識別

通常來說,可以使用scenemgr取得當前的場景情況,可以使用gamestate獲得當前對戰的遊戲狀態。兩者一結合,基本就是整個遊戲的狀態的了。

通過狀態就可以知道哪些類當前是有例項的,哪些是沒有的。

實現原理二:場上卡牌的資料

gamestate可以獲得當前的兩個玩家player,而player可以活動當前的卡牌,如player.gethandzone().getcards()取得手上的卡牌。

實現原理三:機械人自動執行

首先,通過分析場上的資料就可以算出該怎麼走牌,這是ai的部分,我只寫了個有啥走啥的簡單ai。

我們**是使用組建的方式註冊在遊戲裡的,會被定時呼叫,呼叫的時候,進行操作(如走牌)然後及時返回即可。

實現原理四:走牌和攻擊

走牌和攻擊的實現,雖然我能夠完全模仿客戶端邏輯,但是總覺得不太靠譜,因為客戶端更新,我可能沒發現,就會出錯。因此我走牌和攻擊的實現是直接呼叫了inputmanager。

inputmanager包含了一些方法,用於處理滑鼠和鍵盤事件,我直接呼叫這些函式。

當然這麼做的缺陷也是很明顯的:inputmanager的能力範圍有限,並且我不能組織inputmanager不去處理一些事件。比如當滑鼠滑出視窗時,inputmanager缺省會把牌放回手裡。

CCF 爐石傳說

這題原本想的比較複雜,因為每次召喚隨從或隨從死亡時都要對右邊的隨從編號進行變動,然後構建了鍊錶的資料結構,但是越寫越複雜,所以馬上放棄這個思路。其實只要構建乙個結構體,結構體儲存隨從的health和attack,以及乙個flag表示隨從是否死亡。構建兩個size為8的陣列,用以儲存隨從即可。incl...

CCF爐石傳說

參考了 問題描述 爐石傳說 魔獸英雄傳 hearthstone heroes of warcraft,簡稱爐石傳說 是暴雪娛樂開發的一款集換式卡牌遊戲 如下圖所示 遊戲在乙個戰鬥棋盤上進行,由兩名玩家輪流進行操作,本題所使用的爐石傳說遊戲的簡化規則如下 玩家會控制一些角色,每個角色有自己的生命值和攻...

201609 3 爐石傳說

問題描述 爐石傳說 魔獸英雄傳 hearthstone heroes of warcraft,簡稱爐石傳說 是暴雪娛樂開發的一款集換式卡牌遊戲 如下圖所示 遊戲在乙個戰鬥棋盤上進行,由兩名玩家輪流進行操作,本題所使用的爐石傳說遊戲的簡化規則如下 玩家會控制一些角色,每個角色有自己的生命值和攻擊力。當...