作者chowleft (什麽....)
看板GameDesign
标题Re: [程式] 圈圈金字塔的AI逻辑
时间Wed Oct 18 12:43:59 2006
文章有错请指教....我只是小咖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
1F:→ yinjing:推: 「里面的某些功能选项都是幻觉,请当作不存在」 XD 10/18 13:40
2F:推 etrexetrex:需要 MFC42D.DLL 我没有耶 10/18 21:19
4F:推 etrexetrex:需要 MSVCRTD.DLL 换了一个继续 哈 10/18 22:53
5F:→ chowleft:这....该不会要整个VC的dll都要搬过去吧....= =a 10/18 22:54
6F:推 etrexetrex:0.0 我不知道耶 10/18 22:59
7F:→ chowleft:....可能是用share dll方式编译的关系吧.... 10/18 23:00
※ 编辑: chowleft 来自: 140.118.175.23 (10/18 23:14)
8F:→ etrexetrex:这黑白棋的破坏行动力有威到 我只想过抢边角而已 10/19 01:56
9F:推 falllian:推VMJ的黑白棋..比游戏本身的AI还强-_- 10/21 01:24