Re: [程式] 圈圈金字塔的AI邏輯

看板GameDesign (遊戲設計)作者 (什麼....)時間18年前 (2006/10/18 12:36), 編輯推噓4(405)
留言9則, 4人參與, 最新討論串2/5 (看更多)
文章有錯請指教....我只是小咖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

10/18 13:40, , 1F
推: 「裡面的某些功能選項都是幻覺,請當作不存在」 XD
10/18 13:40, 1F

10/18 21:19, , 2F
需要 MFC42D.DLL 我沒有耶
10/18 21:19, 2F

10/18 22:09, , 3F
http://0rz.tw/8f1XP 真是抱歉,我以為可以直接執行..orz
10/18 22:09, 3F

10/18 22:53, , 4F
需要 MSVCRTD.DLL 換了一個繼續 哈
10/18 22:53, 4F

10/18 22:54, , 5F
這....該不會要整個VC的dll都要搬過去吧....= =a
10/18 22:54, 5F

10/18 22:59, , 6F
0.0 我不知道耶
10/18 22:59, 6F

10/18 23:00, , 7F
....可能是用share dll方式編譯的關係吧....
10/18 23:00, 7F
※ 編輯: chowleft 來自: 140.118.175.23 (10/18 23:14)

10/19 01:56, , 8F
這黑白棋的破壞行動力有威到 我只想過搶邊角而已
10/19 01:56, 8F

10/21 01:24, , 9F
推VMJ的黑白棋..比遊戲本身的AI還強-_-
10/21 01:24, 9F
文章代碼(AID): #15DQzFrM (GameDesign)
文章代碼(AID): #15DQzFrM (GameDesign)