分享
 
 
 

Java游戏直棋(二)

王朝java/jsp·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

本部分为电脑的人工智能。

为了加快AI的计算速度,必须对前面的设计进行少量的修改,并最终向VC平台转移。在用VC实现的游戏中,棋盘将采用BitBoard技术,棋子的显示将彻底和逻辑分开。目前JAVA版本仍然采用数组表示棋盘,主要是便于逻辑分析和设计。

先对第一个AI进行总结。FirstAI:

package nicholas.game.chess;

class FirstAI extends ChessPlayer {

private ChessModel model[][][];

private StepStack stack;

private Step step;

private int layer;

private int turn;

protected GameRule gameRule;

public FirstAI(int t) {

super(false);

stack = new StepStack();

layer = 7;

// layer = 3;

turn = t;

}

public String getName() {

return "ColinRobot";

}

public Step getNextStep(ChessModel m[][][]) {

//algo

model = m;

System.out.println("max="+getLayerValue(0));

stack.removeAll();

return step;

}

//get largest value

private int getLayerValue(int lay) {

if(lay>layer) {

//no recursion

return -1*getModelValue();

}

int value = 0;

int max = -2000;

int decision;

for(int z=0;z<3;z++) {

for(int y=0;y<3;y++) {

for(int x=0;x<3;x++) {

if((x==1&&y==1)||model[z][y][x].isOccupied()) continue;

//assume lay chessman here

model[z][y][x].acceptChessman(Chessman.CHESS[(turn+lay)%2]);

decision = gameRule.checkStep(model[z][y][x], model);

switch(decision) {

case 0://win

stack.add(new Step(model[z][y][x],decision));

value = 1000;

break;

case 3://tiaodan|gan

gameRule.checkDecision(model[z][y][x],1,model);

stack.add(new Step(model[z][y][x],1));

value = 660;

/* value = -1*getLayerValue(lay+1);

//roll back

gameRule.undoStep(stack.remove(),model);

model[z][y][x].acceptChessman(Chessman.CHESS[(turn+lay)%2]);

//another

gameRule.checkDecision(model[z][y][x],2,model);

stack.add(new Step(model[z][y][x],2));

int b = -1*getLayerValue(lay+1);

//choose better

if(value<b) {

value = b;

} else {

//roll back

gameRule.undoStep(stack.remove(),model);

model[z][y][x].acceptChessman(Chessman.CHESS[(turn+lay)%2]);

//redo first

gameRule.checkDecision(model[z][y][x],1,model);

stack.add(new Step(model[z][y][x],1));

}

*/ break;

case 1://tiaodan

stack.add(new Step(model[z][y][x],decision));

value = 660;

break;

case 2://gan

stack.add(new Step(model[z][y][x],decision));

value = 320;

break;

default://tiaodan,gan,none

stack.add(new Step(model[z][y][x],decision));

value = -1*getLayerValue(lay+1);

}

if(value>max) {

max = value;

if(lay==0) {

//first layer, save step

System.out.println("max="+max);

step = stack.getTop();

}

}

//remove chessman

gameRule.undoStep(stack.remove(),model);

if(max==1000) return max;

}

}

}

return max;

}

private int getModelValue() {

return 3;

}

public void setGameRule(GameRule rule) {

gameRule = rule;

}

}

FirstAI直接继承ChessPlayer,以后将转为间接继承。采用最大最小深度优先搜索,结束对某分支(仅当前层次)的搜索的两个条件为:A.该层次玩家赢。B.最深搜索层次。最深搜索层次时将返回对局面的评估值(未设计,一律返回3,表示落子得3分。)。

后面的设计,除BitBoard实现棋盘外需要考虑几个问题:

1)搜索的层次。针对第一步着法,强制去除部分无关分支(x+y>2),再将搜索层次设置为7,即可得到正确的着法。因此估计最大的搜索层次设置为7即可。

2)算法的改进。即使搜索层次仅为7,计算一步也要考虑46亿种可能性,假设每种可能性需要60次运算,以我的本本的配置需要三分钟。是否设计开局库(计算表明部分落子仅有唯一应手);另外将考虑采取其它的搜索技巧;破直将有额外的奖励(局面值>3);考虑可杠可单时,单是否一定比杠有利。

3)局面的估值。比较复杂,考虑中。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有