close
這一節實現基本的選怪,普通攻擊打怪,撿物(不包含過濾)。 我們先來改變一下界面,從控件欄選擇復選框,畫在窗口相應位置,如圖。 其他的還是不變,我們主要是實現基本打怪,所以其他的暫時不考慮。 下面先來描述一下算法: 如何選怪: 在武林裡,你選中一個怪物後,都會顯示怪物的信息,那麼在內存裡也會有一個變量來保存是否選中了怪物。我們就利用這個變量判斷是否選中怪物,如果沒選中,那麼調用函數,讓其選怪。 如何打怪: 遊戲裡有普通攻擊,在原來的時候還可以模擬按鍵來實現打怪,現在不可以了,那麼我們只有通過調用遊戲的內部函數來實現打怪了。判斷選中怪物後,就調用普通攻擊函數,直到怪物的血值為0 和 選中怪物變量 為0 ,就代表這個怪物被打死了,就需要開始下一輪選怪打怪。 如何撿物: 撿物在原來也可以模擬按鍵,現在也是調用內部函數。因為這一節不牽涉物品過濾,所以有什麼我們就撿什麼,呵呵。 程序簡單流程: 在主進程不斷的讀取遊戲信息,開闢一個新的線程,放置我們的打怪代碼。這裡已經開始使用多線程了,大家看到多線程也不用怕,其實沒什麼,在BCB ,多線程就相當於一個模塊一樣,也是一個單元文件,不同的是它和主線程的代碼有點區別,線程代碼需要我們用代碼開啟它的運行。從這裡就是使用多線程,也是方便以後編寫,後面的將會很多地方用到多線程。因為現在我們只開啟了2個線程,並且不會衝突,所以暫時也不用做線程同步。 在新的線程裡,寫一個循環,並用變量控制循環開始和結束。 將打怪的代碼全部寫到循環裡。 順序大致如下: 選怪: 判斷是否已經選中怪物 如果選中怪物則跳到打怪部分,如果沒選中,則過一段時間繼續選怪。 打怪: 用普通攻擊 攻擊怪物,直到怪物死亡。 撿物:怪物死亡一段時間後,開始撿物。 這裡只講如何使用遊戲內部函數,分析部分還是需要大家自己到廣海看帖子學習,因為一天兩天也學不會。如果在寫完小秘的帖子後有時間的話,我可能寫寫分析部分的帖子。 下面是實現代碼: 打開我們上次的工程,文件-新建-其他-選擇最下面的Thread Object ,Thread Object 就是線程類。 並命名為 ThreadKill ,在工程窗口雙擊打開 ThreadKill ,進入代碼編輯界面。 __fastcall ThreadKill::ThreadKill(bool CreateSuspended) : TThread(CreateSuspended) { } 將 FreeOnTerminate=true; 插入那對花括號中。 __fastcall ThreadKill::ThreadKill(bool CreateSuspended) : TThread(CreateSuspended) { FreeOnTerminate=true; } 一般用多線程都會寫這麼一句,為了在線程結束後釋放資源。 void __fastcall ThreadKill::Execute() 這裡就是線程執行的地方,需要執行的代碼都寫在裡面。 本文來自: |
全站熱搜
留言列表