javascriptで五目並べを実現する(二)
6420 ワード
前は全部のゲームの流れを実現しました.五目並べAIの実現は主に以下の通りです.
1.表を調べて、いくつかの棋譜を保存して、コンピュータが碁を打つ時自動的に一致します.
2.分値法:ボード上の各空席を検索して、この空席にある駒を置くと仮定して、状況によって異なる分値を与えて、一番高いところで碁を打ちます.
3.ゲームツリー:すべての状況をリストし、極小値で検索して最適なパスを選ぶ
4.コンピュータは毎回ゲームに負けた後、記録を保存して、もう繰り返しません.
ここでは分値法だけを言います.私の考えは駒の状態を分けることです.1、1、2、2、眠2、3、3、3、3、3、4、4、4、4、5に寝ます.
ここでは、いくつかの場合、効果は同じです.例えば、5になります.4になります.3になります.4になります.
1.表を調べて、いくつかの棋譜を保存して、コンピュータが碁を打つ時自動的に一致します.
2.分値法:ボード上の各空席を検索して、この空席にある駒を置くと仮定して、状況によって異なる分値を与えて、一番高いところで碁を打ちます.
3.ゲームツリー:すべての状況をリストし、極小値で検索して最適なパスを選ぶ
4.コンピュータは毎回ゲームに負けた後、記録を保存して、もう繰り返しません.
ここでは分値法だけを言います.私の考えは駒の状態を分けることです.1、1、2、2、眠2、3、3、3、3、3、4、4、4、4、5に寝ます.
ここでは、いくつかの場合、効果は同じです.例えば、5になります.4になります.3になります.4になります.
/** AI
* : ,
* :
* 〖 〗
* 〖 〗 , 。
* 〖 〗 。
* 〖 〗 。
* 〖 〗 。
* 〖 〗 5 。
* 〖 〗 。
* 〖 〗 : ( )。 “ ”。
* 〖 〗 。 “ ”。
* 〖 〗 。
* 〖 〗 。
* 〖 〗 5 。
* 〖 〗 。
* 〖 〗 : ( )。 “ ”。
* 〖 〗 。 “ ”。
* 〖 〗 。 “ ”。
* 〖 〗 。
* 〖 〗 。
* 〖 〗 , , “ ”。
* 〖 〗 。 “ ”。
* 〖 〗 。 “ ”。
* 〖 〗 。
*
* 5:100000
* 4:10000
* 3+ 4:5000
* 3+ 2:2000
* 2+ 1:1
* 5 0
* @return {[type]} [description]
*/
function getPosition() {
var a = new Array(2);
var score = 0;
for (var x = 0; x < 15; x++) {
for (var y = 0; y < 15; y++) {
if (chessData[x][y] == 0) {
if (judge(x, y) > score) {
score = judge(x, y);
a[0] = x;
a[1] = y;
}
}
}
}
return a;
}
function AIplay() {
var str = getPosition();
// console.log(" AI :" + str[0] + "," + str[1]);
doCheck(str[0], str[1]);
}
function judge(x, y) {
var a = parseInt(leftRight(x, y, 1)) + parseInt(topBottom(x, y, 1)) + parseInt(rightBottom(x, y, 1)) + parseInt(rightTop(x, y, 1))+100; //
var b = parseInt(leftRight(x, y, 2)) + parseInt(topBottom(x, y, 2)) + parseInt(rightBottom(x, y, 2)) + parseInt(rightTop(x, y, 2)); //
var result = a + b;
// console.log(" " + x + "," + y + " " + result);
return result; //
}
function leftRight(x, y, num) {
var death = 0; //0 , 5,1 , 5,2 ,
var live = 0;
var count = 0;
var arr = new Array(15);
for (var i = 0; i< 15; i++) {
arr[i] = new Array(15);
for (var j = 0; j < 15; j++) {
arr[i][j] = chessData[i][j];
}
}
arr[x][y] = num;
for (var i = x; i >= 0; i--) {
if (arr[i][y] == num) {
count++;
} else if (arr[i][y] == 0) {
live += 1; //
i = -1;
} else {
death += 1; //
i = -1;
}
}
for (var i = x; i <= 14; i++) {
if (arr[i][y] == num) {
count++;
} else if (arr[i][y] == 0) {
live += 1; //
i = 100;
} else {
death += 1;
i = 100;
}
}
count -= 1;
// console.log(x + "," + y + " " + model(count, death));
return model(count, death);
}
function topBottom(x, y, num) {
var death = 0; //0 , 5,1 , 5,2 ,
var live = 0;
var count = 0;
var arr = new Array(15);
for (var i = 0; i< 15; i++) {
arr[i] = new Array(15);
for (var j = 0; j < 15; j++) {
arr[i][j] = chessData[i][j];
}
}
arr[x][y] = num;
for (var i = y; i >= 0; i--) {
if (arr[x][i] == num) {
count++;
} else if (arr[x][i] == 0) {
live += 1; //
i = -1;
} else {
death += 1;
i = -1;
}
}
for (var i = y; i <= 14; i++) {
if (arr[x][i] == num) {
count++;
} else if (arr[x][i] == 0) {
live += 1; //
i = 100;
} else {
death += 1;
i = 100;
}
}
count -= 1;
// console.log(x + "," + y + " " + model(count, death));
return model(count, death);
}
function rightBottom(x, y, num) {
var death = 0; //0 , 5,1 , 5,2 ,
var live = 0;
var count = 0;
var arr = new Array(15);
for (var i = 0; i< 15; i++) {
arr[i] = new Array(15);
for (var j = 0; j < 15; j++) {
arr[i][j] = chessData[i][j];
}
}
arr[x][y] = num;
for (var i = x, j = y; i >= 0 && j >= 0;) {
if (arr[i][j] == num) {
count++;
} else if (arr[i][j] == 0) {
live += 1; //
i = -1;
} else {
death += 1;
i = -1;
}
i--;
j--;
}
for (var i = x, j = y; i <= 14 && j <= 14;) {
if (arr[i][j] == num) {
count++;
} else if (arr[i][j] == 0) {
live += 1; //
i = 100;
} else {
death += 1;
i = 100;
}
i++;
j++;
}
count -= 1;
// console.log(x + "," + y + " " + model(count, death));
return model(count, death);
}
function rightTop(x, y, num) {
var death = 0; //0 , 5,1 , 5,2 ,
var live = 0;
var count = 0;
var arr = new Array(15);
for (var i = 0; i< 15; i++) {
arr[i] = new Array(15);
for (var j = 0; j < 15; j++) {
arr[i][j] = chessData[i][j];
}
}
arr[x][y] = num;
for (var i = x, j = y; i >= 0 && j <= 14;) {
if (arr[i][j] == num) {
count++;
} else if (arr[i][j] == 0) {
live += 1; //
i = -1;
} else {
death += 1;
i = -1;
}
i--;
j++;
}
for (var i = x, j = y; i <= 14 && j >= 0;) {
if (arr[i][j] == num) {
count++;
} else if (arr[i][j] == 0) {
live += 1; //
i = 100;
} else {
death += 1;
i = 100;
}
i++;
j--;
}
count -= 1;
// console.log(x + "," + y + " " + model(count, death));
return model(count, death);
}
/** ( , , )
* : = == = + =
*
*
*
*/
function model(count, death) {
// console.log("count" + count + "death" + death);
var LEVEL_ONE = 0;//
var LEVEL_TWO = 1;// 2, 1
var LEVEL_THREE = 1500;// 3, 2
var LEVEL_FOER = 4000;// 4, 3
var LEVEL_FIVE = 10000;// 4
var LEVEL_SIX = 100000;// 5
if (count == 1 && death == 1) {
return LEVEL_TWO; // 1
} else if (count == 2) {
if (death == 0) {
return LEVEL_THREE; // 2
} else if (death == 1) {
return LEVEL_TWO; // 2
} else {
return LEVEL_ONE; //
}
} else if (count == 3) {
if (death == 0) {
return LEVEL_FOER; // 3
} else if (death == 1) {
return LEVEL_THREE; // 3
} else {
return LEVEL_ONE; //
}
} else if (count == 4) {
if (death == 0) {
return LEVEL_FIVE; // 4
} else if (death == 1) {
return LEVEL_FOER; // 4
} else {
return LEVEL_ONE; //
}
} else if (count == 5) {
return LEVEL_SIX; // 5
}
return LEVEL_ONE;
}