for (int i = 0; i < 3; ++i) {
for (int k = 0; k < 7; ++k) {
for (int h = i; h < 4 + i; ++h) {
result = state.getAt(k, h);
if (result == 1) {
++firstpl;
}
if (result == 2) {
++secondpl;
}
if (firstpl > 0 && secondpl > 0) {
break;
}
//y = k;
}
if (firstpl == 0 && secondpl == 0) {
break;
} else if (firstpl > secondpl) {
score += firstpl * firstpl;
//if(state.getHeightAt(y)-3 < 3) score += 3+firstpl*2;
} else {
score -= secondpl * secondpl;
//if(state.getHeightAt(y)-3 < 3) score -= 3+secondpl*2;
}
firstpl = 0;
secondpl = 0;
}
}
基本上我有一个7乘6格。我将通过7列并垂直查看每4个连续的块。由于有6个街区向上。每列有3个连续的块。 State.getAt(k,h)接受x和y并返回一个值。
答案 0 :(得分:0)
我不认为你可以改进这一点,除非你能为这个&#34;状态&#34;找出替代表示。这允许以递增方式执行此计算。
由于你未能正确解释状态或计算的实际含义,除了你之外,任何人都很难弄清楚替代方法是否可行。 (而且我不会尝试对代码中的含义进行逆向工程。)
行。对于Connect4,赢/输是在7x6网格中水平,垂直或对角线上的4个检查线。因此,您可以做的是将得分状态表示为计数器数组,对应于可以在其中制作获胜线的每个列,行和对角线。 (7 + 5 + 4 + 4 =其中20个=> 20个计数器)然后构造从(x,y)位置到通过它的行的索引的静态映射。在点(x,y)处添加检查器时,您会查找计数器并递增它们。删除检查器时...减量。
我不确定这与你现有的评分功能有什么关系......但是我不知道这个功能与赢得比赛的策略有什么关系。无论哪种方式,您都可以潜在使用上述方法逐步计算分数。