作者wendly777 (小水)
看板java
标题Re: [恶搞] 悬赏踩地雷 AI!
时间Mon Oct 11 23:21:46 2010
原本设计WendlyAI时
怕执行效率太差
因此没有将整个架构OO化
只将部分核心物件OO化
为了呼应AmosYang大大上一篇丢出的议题
原本是没有考虑到这个议题的><
不过还好最核心的演算法
都切得很乾净
思考了一下要修改成任意版本的地图
并不会太花功夫
另一方面
我认为要扩充到任意版本的地图
并不会对演算法造成任何花费
完全OO化确实会有一点花费(光function呼叫数就多很多了)
但是花费并不会太大
为了证明我的猜测
所以就动手写了WendlyAI2_5
首先
针对任意版本的地图的议题
AmosYang大大说的实作抽象化
是没有说清楚抽象化什麽东西
如果是指核心演算法
我认为核心演算法就是对set作比对
所以我对核心演算法几乎完全没有修改
我的做法是把地图抽象化
所以我定义了一个interface
interface IMap {
Set getTotal();
Set getNeighbor(Point point, int layer);
int getNum(Point point);
void setNum(Point point, int num);
int getSize();
boolean isValid(Point point);
boolean isMine(Point point, boolean isOrg);
boolean isUnknow(Point point, boolean isOrg);
boolean isNum(Point point, boolean isOrg);
boolean isClose(Point point1, Point point2);
}
以上这些API都是我的核心演算法所需要的功能
只要该种类型地图正确提供这些API实作
我的AI就能正常运作
其中Point为一个3个自由度的point
目前认为3个自由度应该就能通吃所有的地图(我还想不到超过范围的)
如果真的有超过范围的
也可以将Point进一步抽象化
这部份部会是大问题就是了
接下来
我实作了一个CartesianMap2D
然後将个CartesianMap2D当作IMap喂给核心演算法
一切就结束了
当然顺便把所有的code都OO化了
接下来测试PK500张地图所花费的时间
WendlyAI2_4 VS WendlyAI2_4 43秒
WendlyAI2_5 VS WendlyAI2_5 53秒
确实拖慢了一点时间
不过差别不大
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.32.127.112
1F:→ serveto:这讨论串真长.....遭了我还没研究 10/12 09:44