8*8のマップでは予め定義した価値マップを使うように

This commit is contained in:
syuilo 2018-08-07 01:25:15 +09:00
parent 74ad33ef30
commit 25b06a9d16

View file

@ -113,70 +113,85 @@ class Session {
//#region 各マスの価値を計算しておく //#region 各マスの価値を計算しておく
//#region 隅 // 標準的な 8*8 のマップなら予め定義した価値マップを使用
this.cellWeights = this.o.map.map((pix, i) => { if (this.o.mapWidth == 8 && this.o.mapHeight == 8 && !this.o.map.some(p => p == 'null')) {
if (pix == 'null') return 0; this.cellWeights = [
const [x, y] = this.o.transformPosToXy(i); 1 , -0.4, 0 , -0.1, -0.1, 0 , -0.4, 1 ,
let count = 0; -0.4, -0.5, -0.2, -0.2, -0.2, -0.2, -0.5, -0.4,
const get = (x, y) => { 0 , -0.2, 0 , -0.1, -0.1, 0 , -0.2, 0 ,
if (x < 0 || y < 0 || x >= this.o.mapWidth || y >= this.o.mapHeight) return 'null'; -0.1, -0.2, -0.1, -0.1, -0.1, -0.1, -0.2, -0.1,
return this.o.mapDataGet(this.o.transformXyToPos(x, y)); -0.1, -0.2, -0.1, -0.1, -0.1, -0.1, -0.2, -0.1,
}; 0 , -0.2, 0 , -0.1, -0.1, 0 , -0.2, 0 ,
-0.4, -0.5, -0.2, -0.2, -0.2, -0.2, -0.5, -0.4,
1 , -0.4, 0 , -0.1, -0.1, 0 , -0.4, 1
];
} else {
//#region 隅
this.cellWeights = this.o.map.map((pix, i) => {
if (pix == 'null') return 0;
const [x, y] = this.o.transformPosToXy(i);
let count = 0;
const get = (x, y) => {
if (x < 0 || y < 0 || x >= this.o.mapWidth || y >= this.o.mapHeight) return 'null';
return this.o.mapDataGet(this.o.transformXyToPos(x, y));
};
const isNotSumi = ( const isNotSumi = (
// - // -
// + // +
// - // -
(get(x - 1, y - 1) == 'empty' && get(x + 1, y + 1) == 'empty') || (get(x - 1, y - 1) == 'empty' && get(x + 1, y + 1) == 'empty') ||
// - // -
// + // +
// - // -
(get(x, y - 1) == 'empty' && get(x, y + 1) == 'empty') || (get(x, y - 1) == 'empty' && get(x, y + 1) == 'empty') ||
// - // -
// + // +
// - // -
(get(x + 1, y - 1) == 'empty' && get(x - 1, y + 1) == 'empty') || (get(x + 1, y - 1) == 'empty' && get(x - 1, y + 1) == 'empty') ||
// //
// -+- // -+-
// //
(get(x - 1, y) == 'empty' && get(x + 1, y) == 'empty') (get(x - 1, y) == 'empty' && get(x + 1, y) == 'empty')
) )
const isSumi = !isNotSumi; const isSumi = !isNotSumi;
return isSumi ? 1 : 0; return isSumi ? 1 : 0;
}); });
//#endregion //#endregion
//#region 隅の隣は危険 //#region 隅の隣は危険
this.cellWeights.forEach((cell, i) => { this.cellWeights.forEach((cell, i) => {
const [x, y] = this.o.transformPosToXy(i); const [x, y] = this.o.transformPosToXy(i);
if (cell === 1) return; if (cell === 1) return;
if (this.o.mapDataGet(this.o.transformXyToPos(x, y)) == 'null') return; if (this.o.mapDataGet(this.o.transformXyToPos(x, y)) == 'null') return;
const get = (x, y) => { const get = (x, y) => {
if (x < 0 || y < 0 || x >= this.o.mapWidth || y >= this.o.mapHeight) return 0; if (x < 0 || y < 0 || x >= this.o.mapWidth || y >= this.o.mapHeight) return 0;
return this.cellWeights[this.o.transformXyToPos(x, y)]; return this.cellWeights[this.o.transformXyToPos(x, y)];
}; };
const isSumiNear = ( const isSumiNear = (
(get(x - 1, y - 1) === 1) || // 左上 (get(x - 1, y - 1) === 1) || // 左上
(get(x , y - 1) === 1) || // 上 (get(x , y - 1) === 1) || // 上
(get(x + 1, y - 1) === 1) || // 右上 (get(x + 1, y - 1) === 1) || // 右上
(get(x + 1, y ) === 1) || // 右 (get(x + 1, y ) === 1) || // 右
(get(x + 1, y + 1) === 1) || // 右下 (get(x + 1, y + 1) === 1) || // 右下
(get(x , y + 1) === 1) || // 下 (get(x , y + 1) === 1) || // 下
(get(x - 1, y + 1) === 1) || // 左下 (get(x - 1, y + 1) === 1) || // 左下
(get(x - 1, y ) === 1) // 左 (get(x - 1, y ) === 1) // 左
) )
if (isSumiNear) this.cellWeights[i] = -0.5; if (isSumiNear) this.cellWeights[i] = -0.5;
}); });
//#endregion //#endregion
}
//#endregion //#endregion
@ -388,10 +403,12 @@ class Session {
console.log('Thinked:', pos); console.log('Thinked:', pos);
console.timeEnd('think'); console.timeEnd('think');
process.send({ setTimeout(() => {
type: 'put', process.send({
pos type: 'put',
}); pos
});
}, 500);
} }
/** /**