Skip to content

Commit

Permalink
重构打分逻辑
Browse files Browse the repository at this point in the history
  • Loading branch information
lihongxun945 committed Mar 10, 2016
1 parent 3219394 commit 785d51c
Show file tree
Hide file tree
Showing 17 changed files with 600 additions and 588 deletions.
365 changes: 138 additions & 227 deletions dist/bridge.js

Large diffs are not rendered by default.

491 changes: 340 additions & 151 deletions dist/main.js

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions js/checkmate.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,7 @@
var R = require("./role.js");
var hasNeighbor = require("./neighbor.js");
var scorePoint = require("./evaluate-point.js");
var S = require("./score.js");
var win = require("./win.js");
var S = require("./SCORE.js");
var config = require("./config.js");
var zobrist = require("./zobrist.js");
var debug = require("./debug.js");
Expand Down Expand Up @@ -223,6 +222,7 @@ var deeping = function(board, role, deep) {
}

module.exports = function(board, role, deep, onlyFour) {
return false;

deep = deep || config.checkmateDeep;
if(deep <= 0) return false;
Expand Down
4 changes: 2 additions & 2 deletions js/config.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
module.exports = {
searchDeep: 6, //搜索深度
searchDeep: 4, //搜索深度
deepDecrease: .8, //按搜索深度递减分数,为了让短路径的结果比深路劲的分数高
countLimit: 10, //gen函数返回的节点数量上限,超过之后将会按照分数进行截断
checkmateDeep: 5, //算杀深度
checkmateDeep: 0, //算杀深度
cache: false, //是否使用置换表
}
82 changes: 41 additions & 41 deletions js/count-to-score.js → js/count-to-type.js
Original file line number Diff line number Diff line change
@@ -1,101 +1,101 @@
var SCORE = require("./score.js");
var score = require("./score.js");

var score = function(count, block, empty) {
var t = function(count, block, empty) {

if(empty === undefined) empty = 0;

//没有空位
if(empty == 0) {
if(count >= 5) return SCORE.FIVE;
if(count >= 5) return score.FIVE;
if(block === 0) {
switch(count) {
case 1: return SCORE.ONE;
case 2: return SCORE.TWO;
case 3: return SCORE.THREE;
case 4: return SCORE.FOUR;
case 1: return score.ONE;
case 2: return score.TWO;
case 3: return score.THREE;
case 4: return score.FOUR;
}
}

if(block === 1) {
switch(count) {
case 1: return SCORE.BLOCKED_ONE;
case 2: return SCORE.BLOCKED_TWO;
case 3: return SCORE.BLOCKED_THREE;
case 4: return SCORE.BLOCKED_FOUR;
case 1: return score.BLOCKED_ONE;
case 2: return score.BLOCKED_TWO;
case 3: return score.BLOCKED_THREE;
case 4: return score.BLOCKED_FOUR;
}
}

} else if(empty === 1 || empty == count-1) {
//第1个是空位
if(count >= 6) {
return SCORE.FIVE;
return score.FIVE;
}
if(block === 0) {
switch(count) {
case 2: return SCORE.TWO;
case 2: return score.TWO;
case 3:
case 4: return SCORE.THREE;
case 5: return SCORE.FOUR;
case 4: return score.THREE;
case 5: return score.FOUR;
}
}

if(block === 1) {
switch(count) {
case 2: return SCORE.BLOCKED_TWO;
case 3: return SCORE.BLOCKED_THREE;
case 4: return SCORE.BLOCKED_FOUR;
case 5: return SCORE.BLOCKED_FOUR;
case 2: return score.BLOCKED_TWO;
case 3: return score.BLOCKED_THREE;
case 4: return score.BLOCKED_FOUR;
case 5: return score.BLOCKED_FOUR;
}
}
} else if(empty === 2 || empty == count-2) {
//第二个是空位
if(count >= 7) {
return SCORE.FIVE;
return score.FIVE;
}
if(block === 0) {
switch(count) {
case 3:
case 4:
case 5: return SCORE.THREE;
case 6: return SCORE.FOUR;
case 5: return score.THREE;
case 6: return score.FOUR;
}
}

if(block === 1) {
switch(count) {
case 3: return SCORE.BLOCKED_THREE;
case 4: return SCORE.BLOCKED_FOUR;
case 5: return SCORE.BLOCKED_FOUR;
case 6: return SCORE.FOUR;
case 3: return score.BLOCKED_THREE;
case 4: return score.BLOCKED_FOUR;
case 5: return score.BLOCKED_FOUR;
case 6: return score.FOUR;
}
}

if(block === 2) {
switch(count) {
case 4:
case 5:
case 6: return SCORE.BLOCKED_FOUR;
case 6: return score.BLOCKED_FOUR;
}
}
} else if(empty === 3 || empty == count-3) {
if(count >= 8) {
return SCORE.FIVE;
return score.FIVE;
}
if(block === 0) {
switch(count) {
case 4:
case 5: return SCORE.THREE;
case 6: return SCORE.THREE*2;
case 7: return SCORE.FOUR;
case 5: return score.THREE;
case 6: return score.THREE*2;
case 7: return score.FOUR;
}
}

if(block === 1) {
switch(count) {
case 4:
case 5:
case 6: return SCORE.BLOCKED_FOUR;
case 7: return SCORE.FOUR;
case 6: return score.BLOCKED_FOUR;
case 7: return score.FOUR;
}
}

Expand All @@ -104,19 +104,19 @@ var score = function(count, block, empty) {
case 4:
case 5:
case 6:
case 7: return SCORE.BLOCKED_FOUR;
case 7: return score.BLOCKED_FOUR;
}
}
} else if(empty === 4 || empty == count-4) {
if(count >= 9) {
return SCORE.FIVE;
return score.FIVE;
}
if(block === 0) {
switch(count) {
case 5:
case 6:
case 7:
case 8: return SCORE.FOUR;
case 8: return score.FOUR;
}
}

Expand All @@ -125,8 +125,8 @@ var score = function(count, block, empty) {
case 4:
case 5:
case 6:
case 7: return SCORE.BLOCKED_FOUR;
case 8: return SCORE.FOUR;
case 7: return score.BLOCKED_FOUR;
case 8: return score.FOUR;
}
}

Expand All @@ -135,14 +135,14 @@ var score = function(count, block, empty) {
case 5:
case 6:
case 7:
case 8: return SCORE.BLOCKED_FOUR;
case 8: return score.BLOCKED_FOUR;
}
}
} else if(empty === 5 || empty == count-5) {
return SCORE.FIVE;
return score.FIVE;
}

return 0;
}

module.exports = score;
module.exports = t;
43 changes: 18 additions & 25 deletions js/evaluate-point.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,27 +3,27 @@
* 这个是专门给某一个空位打分的,不是给整个棋盘打分的
* 并且是只给某一个角色打分
*/
var S = require("./score.js");
var R = require("./role.js");
var SCORE = require("./count-to-score.js");

var type = require("./count-to-type.js");
var typeToScore = require("./type-to-score.js");
/*
* 表示在当前位置下一个棋子后的分数
*/

var s = function(board, p, role, config) {
var s = function(board, p, role, includeSelf) {
var result = 0;
var count = 0, block = 0;

var len = board.length;
var score = SCORE;

for(var k in config) score[k] = config[k];
function reset() {
count = includeSelf ? 1 : 0;
block = 0;
empty = includeSelf ? 0 : 1;
}


//横向
count = 1; //默认把当前位置当做己方棋子。因为算的是当前下了一个己方棋子后的分数
block = 0;
empty = 0;
reset();

for(var i=p[1]+1;true;i++) {
if(i>=len) {
Expand Down Expand Up @@ -71,12 +71,10 @@ var s = function(board, p, role, config) {
}
}

result += score(count, block, empty);
result += type(count, block, empty);

//纵向
count = 1;
block = 0;
empty = 0;
reset();

for(var i=p[0]+1;true;i++) {
if(i>=len) {
Expand Down Expand Up @@ -124,13 +122,11 @@ var s = function(board, p, role, config) {
}
}

result += score(count, block, empty);
result += type(count, block, empty);


// \\
count = 1;
block = 0;
empty = 0;
reset();

for(var i=1;true;i++) {
var x = p[0]+i, y = p[1]+i;
Expand Down Expand Up @@ -180,13 +176,11 @@ var s = function(board, p, role, config) {
}
}

result += score(count, block, empty);
result += type(count, block, empty);


// \/
count = 1;
block = 0;
empty = 0;
reset();

for(var i=1; true;i++) {
var x = p[0]+i, y = p[1]-i;
Expand Down Expand Up @@ -236,10 +230,9 @@ var s = function(board, p, role, config) {
}
}

result += score(count, block, empty);

return result;
result += type(count, block, empty);

return typeToScore(result);
}

module.exports = s;
39 changes: 0 additions & 39 deletions js/evaluate-row.js

This file was deleted.

11 changes: 0 additions & 11 deletions js/evaluate-rows.js

This file was deleted.

Loading

0 comments on commit 785d51c

Please sign in to comment.