看板 GameDesign 關於我們 聯絡資訊
文章有錯請指教....我只是小咖xD Minimax這裡有中文說明,加上範例圖可以加速理解 http://0rz.tw/a620L 小弟以前也寫過一個小遊戲,就是用這個方式降低電腦的思考時間 當然這個AI沒有像e大那麼強還可以自我進化, 遊戲可以在此下載: http://download.yousendit.com/50A1C11C4DDE961E (已修改成static lib) 開啟後選Game->Single就開始了 裡面的某些功能選項都是幻覺,請當作不存在 我想棋類遊戲應該都是這樣寫的吧? 場上棋子分佈的狀況都可以用某些規則去計算出一個數值, 如果某一種狀況對我們有利的話,這個分數應該要比較高, 這樣就知道哪一步比較好了 我們在下棋子的時候,會想辦法下出對我們最有利的情況 而當輪到對方的時候如果沒意外,對方會下對他最有利的一步 由分數觀點來講就是,讓算出來的分數最低 假如我想預測N步以後的情形 (我->對手->我->對手....) 我應該要計算雙方所下的所有可能組合,然後找出最大分數那一組 這樣我就知道我這一步該怎麼下了 而利用對方會朝對他最有利的方向前進的這個假設 則可以不用把每一種組合的分數都算出來,可以少算一些這樣 至於每一步的分數如何決定,通常跟對這個遊戲的認知度有一點點關連 像在我這個白癡AI中,我將邊角的分數拉得很高 因為我覺得有沒有搶到邊角非常重要 其他的邊緣地帶分數也有高一些些,至於像B2之類的地方 因為你搶到之後很可能之後會讓對手搶到邊角,所以分數是負的,代表不要下這一步 另外一個想法就是讓對手可以下的位置越來越少, 這樣對手下無可下,最後就會下在他最不希望下的位置 對手的選擇越少,代表他的靈活性越低 除了可以逼迫他下不該下的位置外,還有節省電腦計算量的妙用 結合類似這樣的觀念就可以決定一個狀況的分數了 當然有些觀念是上網查的.... 當初會寫這個只是因為被VMJ小遊戲的電腦狠狠羞辱了一番 所以寫來看能不能報仇雪恥.... 不過當我寫完之後所得到的只是又一次的羞辱....我的AI不爭氣的輸了 總之e大可以考慮加入這些元素看看,希望對你的AI能有些幫助 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.118.175.23
yinjing:推: 「裡面的某些功能選項都是幻覺,請當作不存在」 XD 10/18 13:40
etrexetrex:需要 MFC42D.DLL 我沒有耶 10/18 21:19
chowleft:http://0rz.tw/8f1XP 真是抱歉,我以為可以直接執行..orz 10/18 22:09
etrexetrex:需要 MSVCRTD.DLL 換了一個繼續 哈 10/18 22:53
chowleft:這....該不會要整個VC的dll都要搬過去吧....= =a 10/18 22:54
etrexetrex:0.0 我不知道耶 10/18 22:59
chowleft:....可能是用share dll方式編譯的關係吧.... 10/18 23:00
※ 編輯: chowleft 來自: 140.118.175.23 (10/18 23:14)
etrexetrex:這黑白棋的破壞行動力有威到 我只想過搶邊角而已 10/19 01:56
falllian:推VMJ的黑白棋..比遊戲本身的AI還強-_- 10/21 01:24