我正在寻找解决Puzzle 15游戏的问题。 Example
基本上在每个位置,有效位置只能垂直或水平。我正在寻找一种算法,可以在16个元素,4乘4的电路板中的任何给定位置确定它。
目前我的位置是硬编码的
var rules = [
{ "0": [1, 4]},{ "1": [0, 2, 5] },{ "2": [1, 3, 6] },{ "3": [2, 7] },
{ "4": [0, 5, 8] },{ "5": [1, 4, 6, 9] },{ "6": [2, 5, 7, 10] },{ "7": [3, 6, 11] },
{ "8": [4, 9, 12] },{ "9": [5, 8, 10, 13]},{ "10": [6, 9, 11, 14] },{ "11": [7, 10, 15] },
{ "12": [8, 13] },{ "13": [12, 9, 14] },{ "14": [10, 13, 15] },{ "15": [11, 14] },
]
例如,在位置“0”,只有位置[1,4]有效才能从中移动。
[ _, 1, 2, 3 ]
[ 4, 5, 6, 7 ]
[ 8, 9, 10, 11 ]
[ 0, 12, 13, 14 ]
什么是更好的方法?
答案 0 :(得分:0)
我不确定我是否100%理解你的问题,但我希望这会有所帮助。
如果我理解正确:
我会建议这样的事情:
// game grid, empty-cell = -1
const grid = [
[ 1, 2, 3, 4],
[ 5, 6, 7, 8],
[ 9, 10, 11, 12],
[13, 14, -1, 15],
]
// Gets value from grid, return null when outside of array
function getCellValue(grid, row, col) {
if (grid[row] === undefined) return null;
if (grid[row][col] === undefined) return null;
return grid[row][col];
}
// Returns array of [row, col] cells,
// that are direct neighbors of the empty cell
function getEmptyCellNeighbors(grid) {
let cells = [];
grid.forEach((cols, row) => {
cols.forEach((value, col) => {
if (getCellValue(grid, row - 1, col) === -1) cells.push([row, col]);
if (getCellValue(grid, row + 1, col) === -1) cells.push([row, col]);
if (getCellValue(grid, row, col - 1) === -1) cells.push([row, col]);
if (getCellValue(grid, row, col + 1) === -1) cells.push([row, col]);
})
})
return cells;
}
// The empty cell(-1) is at[row = 3, col = 2]
// You can move 11, 14, 15 to the empty cell.
// The cuntion will return the[row, col] of cells 11, 14 & 15
console.log(getEmptyCellNeighbors(grid));
// returns => [
// [2, 2], // 11
// [3, 1], // 14
// [3, 3], // 15
// ]