實現原理:修改遊戲檔案
注入機械人
使用 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,簡稱爐石傳說 是暴雪娛樂開發的一款集換式卡牌遊戲 如下圖所示 遊戲在乙個戰鬥棋盤上進行,由兩名玩家輪流進行操作,本題所使用的爐石傳說遊戲的簡化規則如下 玩家會控制一些角色,每個角色有自己的生命值和攻擊力。當...