Skip to content

Commit

Permalink
update
Browse files Browse the repository at this point in the history
  • Loading branch information
lihongxun945 committed Mar 10, 2016
1 parent 785d51c commit d715ca8
Show file tree
Hide file tree
Showing 11 changed files with 190 additions and 32 deletions.
13 changes: 7 additions & 6 deletions dist/bridge.js
Original file line number Diff line number Diff line change
Expand Up @@ -515,16 +515,16 @@ var typeToScore = require("./type-to-score.js");
* 表示在当前位置下一个棋子后的分数
*/

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

var len = board.length;

function reset() {
count = includeSelf ? 1 : 0;
count = 1;
block = 0;
empty = includeSelf ? 0 : 1;
empty = 0;
}


Expand Down Expand Up @@ -753,6 +753,7 @@ var evaluate = function(board, role, includeSelf) {

var max = - S.FIVE;
var min = - S.FIVE;
role = role || R.com;

for(var i=0;i<board.length;i++) {
for(var j=0;j<board[i].length;j++) {
Expand Down Expand Up @@ -800,8 +801,8 @@ var gen = function(board, deep) {
for(var j=0;j<board[i].length;j++) {
if(board[i][j] == R.empty) {
if(hasNeighbor(board, [i, j], 2, 1)) { //必须是有邻居的才行
var scoreHum = scorePoint(board, [i,j], R.hum, true);
var scoreCom= scorePoint(board, [i,j], R.com, true);
var scoreHum = scorePoint(board, [i,j], R.hum);
var scoreCom= scorePoint(board, [i,j], R.com);

if(scoreCom >= S.FIVE) {//先看电脑能不能连成5
return [[i, j]];
Expand Down Expand Up @@ -971,7 +972,7 @@ var max = function(board, deep, alpha, beta, role) {
}
}

var v = evaluate(board, role, false);
var v = evaluate(board, role);
count ++;
if(deep <= 0 || math.greatOrEqualThan(v, T.FIVE)) {
return v;
Expand Down
8 changes: 5 additions & 3 deletions dist/main.js
Original file line number Diff line number Diff line change
Expand Up @@ -170,16 +170,16 @@ var typeToScore = require("./type-to-score.js");
* 表示在当前位置下一个棋子后的分数
*/

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

var len = board.length;

function reset() {
count = includeSelf ? 1 : 0;
count = 1;
block = 0;
empty = includeSelf ? 0 : 1;
empty = 0;
}


Expand Down Expand Up @@ -408,6 +408,7 @@ var evaluate = function(board, role, includeSelf) {

var max = - S.FIVE;
var min = - S.FIVE;
role = role || R.com;

for(var i=0;i<board.length;i++) {
for(var j=0;j<board[i].length;j++) {
Expand Down Expand Up @@ -530,6 +531,7 @@ Board.prototype._set = function(x, y, role) {
this.draw();
var value = e(this.board, R.com, false);
var self = this;
return;
if(value >= S.FIVE/2) {
$.alert("电脑赢了!", function() {
self.stop();
Expand Down
6 changes: 3 additions & 3 deletions js/evaluate-point.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,16 +10,16 @@ var typeToScore = require("./type-to-score.js");
* 表示在当前位置下一个棋子后的分数
*/

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

var len = board.length;

function reset() {
count = includeSelf ? 1 : 0;
count = 1;
block = 0;
empty = includeSelf ? 0 : 1;
empty = 0;
}


Expand Down
1 change: 1 addition & 0 deletions js/evaluate.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ var evaluate = function(board, role, includeSelf) {

var max = - S.FIVE;
var min = - S.FIVE;
role = role || R.com;

for(var i=0;i<board.length;i++) {
for(var j=0;j<board[i].length;j++) {
Expand Down
4 changes: 2 additions & 2 deletions js/gen.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,8 @@ var gen = function(board, deep) {
for(var j=0;j<board[i].length;j++) {
if(board[i][j] == R.empty) {
if(hasNeighbor(board, [i, j], 2, 1)) { //必须是有邻居的才行
var scoreHum = scorePoint(board, [i,j], R.hum, true);
var scoreCom= scorePoint(board, [i,j], R.com, true);
var scoreHum = scorePoint(board, [i,j], R.hum);
var scoreCom= scorePoint(board, [i,j], R.com);

if(scoreCom >= S.FIVE) {//先看电脑能不能连成5
return [[i, j]];
Expand Down
1 change: 1 addition & 0 deletions js/main.js
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,7 @@ Board.prototype._set = function(x, y, role) {
this.draw();
var value = e(this.board, R.com, false);
var self = this;
return;
if(value >= S.FIVE/2) {
$.alert("电脑赢了!", function() {
self.stop();
Expand Down
2 changes: 1 addition & 1 deletion js/negamax.js
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ var max = function(board, deep, alpha, beta, role) {
}
}

var v = evaluate(board, role, false);
var v = evaluate(board, role);
count ++;
if(deep <= 0 || math.greatOrEqualThan(v, T.FIVE)) {
return v;
Expand Down
118 changes: 118 additions & 0 deletions js/win.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
var R = require("./role.js");
var isFive = function(board, p, role) {
var len = board.length;
var count = 0;

var reset = function() {
count = 0;
}

for(var i=p[1]+1;true;i++) {
if(i>=len) break;
var t = board[p[0]][i];
if(t !== role) break;
count ++;
}


for(var i=p[1]-1;true;i--) {
if(i<0) break;
var t = board[p[0]][i];
if(t !== role) break;
count ++;
}

if(count >= 5) return true;

//纵向
reset();

for(var i=p[0]+1;true;i++) {
if(i>=len) {
break;
}
var t = board[i][p[1]];
if(t !== role) break;
count ++;
}

for(var i=p[0]-1;true;i--) {
if(i<0) {
block ++;
}
var t = board[i][p[1]];
if(t !== role) break;
count ++;
}


if(count >= 5) return true;
// \\
reset();

for(var i=1;true;i++) {
var x = p[0]+i, y = p[1]+i;
if(x>=len || y>=len) {
break;
}
var t = board[x][y];
if(t !== role) break;

count ++;
}

for(var i=1;true;i++) {
var x = p[0]-i, y = p[1]-i;
if(x<0||y<0) {
break;
}
var t = board[x][y];
if(t !== role) break;
count ++;
}

if(count >= 5) return true;

// \/
reset();

for(var i=1; true;i++) {
var x = p[0]+i, y = p[1]-i;
if(x<0||y<0||x>=len||y>=len) {
break;
}
var t = board[x][y];
if(t !== role) break;
count ++;
}

for(var i=1;true;i++) {
var x = p[0]-i, y = p[1]+i;
if(x<0||y<0||x>=len||y>=len) {
break;
}
var t = board[x][y];
if(t !== role) break;
count ++;
}

if(count >= 5) return true;

return false;

}


var w = function(board) {
for(var i=0;i<board.length;i++) {
for(var j=0;j<board[i].length;j++) {
var t = board[i][j];
if(t !== R.empty) {
if(isFive(board, [i, j], t)) return t;
}
}
}
return false;
}

module.exports = w;
3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,8 @@
"test-checkmate": "mocha tests/test-checkmate.js",
"test-m": "mocha tests/test-max-min.js",
"test-evaluate-point": "mocha tests/test-evaluate-point.js",
"test-zobrist": "mocha tests/test-zobrist.js"
"test-zobrist": "mocha tests/test-zobrist.js",
"test-win": "mocha tests/test-win.js"
},
"author": "Hongxun Lee <[email protected]> (http://light7.org/)",
"homepage": "http://gobang.light7.cn/",
Expand Down
34 changes: 18 additions & 16 deletions tests/test-evaluate.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,25 +7,27 @@ var b
describe('test evalute', function() {
it(`test one`, function() {
b = [
[0, 0, 0],
[0, 2, 0],
[0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 2, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
];
assert.equal(e(b), 4*S.ONE);
assert.equal(e(b, 2), 4*S.ONE);

b = [
[0, 0, 0],
[0, 1, 0],
[0, 0, 0],
];
assert.equal(e(b), 4*S.ONE * -1);
assert.equal(e(b, 1), 4*S.ONE * -1);

b = [
[0, 2, 0],
[0, 1, 0],
[0, 0, 0],
];
assert.equal(e(b), (S.ONE + 2*S.BLOCKED_ONE) - (3*S.ONE + S.BLOCKED_ONE));
assert.equal(e(b, 1), (S.ONE + 2*S.BLOCKED_ONE) - (3*S.ONE + S.BLOCKED_ONE));
});

it(`test two`, function() {
Expand All @@ -37,7 +39,7 @@ describe('test evalute', function() {
[0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
];
assert.equal(e(b), S.TWO + 6*S.BLOCKED_ONE);
assert.equal(e(b), S.TWO);

b = [
[0, 0, 0, 0, 0, 0],
Expand All @@ -47,7 +49,7 @@ describe('test evalute', function() {
[0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
];
assert.equal(e(b), S.TWO + 6*S.ONE);
assert.equal(e(b), S.TWO);
});

it(`test three`, function() {
Expand All @@ -59,7 +61,7 @@ describe('test evalute', function() {
[0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
];
assert.equal(e(b), S.THREE + 9*S.BLOCKED_ONE);
assert.equal(e(b), S.THREE);

b = [
[0, 0, 0, 0, 0, 0],
Expand All @@ -69,7 +71,7 @@ describe('test evalute', function() {
[0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
];
assert.equal(e(b), S.THREE + 9*S.ONE);
assert.equal(e(b), S.THREE);

b = [
[0, 0, 0, 0, 0, 0],
Expand All @@ -79,7 +81,7 @@ describe('test evalute', function() {
[0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
];
assert.equal(e(b), S.THREE + 9*S.ONE);
assert.equal(e(b), S.THREE);


b = [
Expand All @@ -90,7 +92,7 @@ describe('test evalute', function() {
[0, 0, 0, 0, 2, 0],
[0, 0, 0, 0, 0, 0],
];
assert.equal(e(b), S.THREE + 9*S.ONE);
assert.equal(e(b), S.THREE);
});


Expand All @@ -103,7 +105,7 @@ describe('test evalute', function() {
[0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
];
assert.equal(e(b), S.FOUR + 12*S.BLOCKED_ONE);
assert.equal(e(b), S.FOUR);

b = [
[0, 0, 0, 0, 0, 0],
Expand All @@ -113,7 +115,7 @@ describe('test evalute', function() {
[0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
];
assert.equal(e(b), S.FOUR + 12*S.ONE);
assert.equal(e(b), S.FOUR);
});


Expand All @@ -127,7 +129,7 @@ describe('test evalute', function() {
[0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
];
assert.equal(e(b), S.FIVE + 14*S.BLOCKED_ONE);
assert.equal(e(b), S.FIVE);

b = [
[0, 0, 0, 0, 0, 0, 0, 0, 0],
Expand All @@ -140,7 +142,7 @@ describe('test evalute', function() {
[0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0]
];
assert.equal(e(b), S.FIVE + 15*S.ONE);
assert.equal(e(b), S.FIVE);

});
});
Loading

0 comments on commit d715ca8

Please sign in to comment.