Refactor : #8 Rethink validMove function
continuous-integration/drone/push Build is passing Details

v1.01
Vincent ASTOLFI 6 months ago
parent 46e30d5ff3
commit fef3126464

@ -151,83 +151,56 @@ function clickPlay(event) {
sendMove(play); sendMove(play);
} }
function validMoove(player, piece, movement) { function validMove(player, piece, movement) {
let isValid = true; let isValid = true;
player.pieces.forEach((p) => { player.pieces.forEach((p) => {
if (p.id === piece.id) { if (p.id === piece.id) {
let newHead = ""
let newTail = ""
if (movement.type === "move") { if (movement.type === "move") {
if (p.vertical && movement.selectedCase.row + p.size > 10) newHead = {x: movement.selectedCase.col, y: movement.selectedCase.row}
isValid = false; newTail = {
if (!p.vertical && movement.selectedCase.col + p.size > 10) x: p.vertical ? movement.selectedCase.col : movement.selectedCase.col + p.size - 1,
isValid = false; y: p.vertical ? movement.selectedCase.row + p.size -1 : movement.selectedCase.row
}
let colMin, colMax, rowMin, rowMax;
if (p.vertical) {
colMin =
movement.selectedCase.col - 1 < 0
? 0
: movement.selectedCase.col - 1;
colMax =
movement.selectedCase.col + 1 > 9
? 9
: movement.selectedCase.col + 1;
rowMin =
movement.selectedCase.row - 1 < 0
? 0
: movement.selectedCase.row - 1;
rowMax =
movement.selectedCase.row + p.size > 9
? 9
: movement.selectedCase.row + p.size;
} else { } else {
colMin = newHead = p.startPos
movement.selectedCase.col - 1 < 0 newTail = { x: (p.startPos.x + p.size - 1), y: p.startPos.y }
? 0 }
: movement.selectedCase.col - 1;
colMax =
movement.selectedCase.col + p.size > 9
? 9
: movement.selectedCase.col + p.size;
rowMin =
movement.selectedCase.row - 1 < 0
? 0
: movement.selectedCase.row - 1;
rowMax =
movement.selectedCase.row + 1 > 9
? 9
: movement.selectedCase.row + 1;
}
for (let i = colMin; i <= colMax; i++) {
for (let j = rowMin; j <= rowMax; j++) {
if ( if (
player.grid.cases[i][j].isShip && (p.vertical && movement.selectedCase.row + p.size > 10) ||
player.grid.cases[i][j].piece.id !== p.id (!p.vertical && movement.selectedCase.col + p.size > 10)
) ) {
isValid = false; isValid = false;
return isValid;
} }
}
} else {
if (p.vertical && movement.selectedCase.x + p.size > 10)
isValid = false;
if (!p.vertical && movement.selectedCase.y + p.size > 10)
isValid = false;
let head = p.startPos for (let x = Math.max(newHead.x, 0); x <= Math.min(newTail.x, 9); ++x) {
let tail = { x: (p.startPos.x + p.size), y: p.startPos.y} for (let y = Math.max(newHead.y, 0); y <= Math.min(newTail.y, 9); ++y) {
for (let dx = -1; dx <= 1; dx++) {
for (let dy = -1; dy <= 1; dy++) {
let checkX = x + dx;
let checkY = y + dy;
for (let x = head.x; x <= tail.x; x++) { if (checkX >= 0 && checkX <= 9 && checkY >= 0 && checkY <= 9) {
if ( if (
player.grid.cases[x][tail.y].isShip && player.grid.cases[checkX][checkY].isShip &&
player.grid.cases[x][tail.y].piece.id !== p.id player.grid.cases[checkX][checkY].piece.id !== p.id
) { ) {
isValid = false isValid = false;
break;
} }
} }
} }
if (!isValid) break;
} }
}); if (!isValid) break;
}
if (!isValid) break;
}
}
})
return isValid; return isValid;
} }
@ -245,7 +218,7 @@ function clickNewCase(piece) {
p.id === piece.id && p.id === piece.id &&
p.isSelected && p.isSelected &&
p.isMovable && p.isMovable &&
validMoove(player, piece, { validMove(player, piece, {
type: "move", type: "move",
selectedCase: selectedCase, selectedCase: selectedCase,
}) })
@ -308,7 +281,7 @@ function rotatePiece(piece) {
p.id === piece.id && p.id === piece.id &&
p.isSelected && p.isSelected &&
p.isMovable && p.isMovable &&
validMoove(player, piece, { validMove(player, piece, {
type: "rotation", type: "rotation",
selectedCase: p.startPos, selectedCase: p.startPos,
}) })

Loading…
Cancel
Save