summaryrefslogtreecommitdiff
path: root/src/engine
diff options
context:
space:
mode:
authornil <niljo@airmail.cc>2024-12-12 18:20:22 +0100
committernil <niljo@airmail.cc>2024-12-12 18:20:22 +0100
commit16e02376e2273eeb25a6461f84641e96a485f652 (patch)
tree64a1deee7d8fdfda0a75475642364fc1ba4d8500 /src/engine
parent8a49fc718cbfebe593d18dcf37fef2a19f3aa570 (diff)
add legal movements and organize
Diffstat (limited to 'src/engine')
-rw-r--r--src/engine/moves.js11
-rw-r--r--src/engine/turns.js24
-rw-r--r--src/engine/visual/createBoard.js15
-rw-r--r--src/engine/visual/placeOnBoard.js34
4 files changed, 65 insertions, 19 deletions
diff --git a/src/engine/moves.js b/src/engine/moves.js
new file mode 100644
index 0000000..f820f97
--- /dev/null
+++ b/src/engine/moves.js
@@ -0,0 +1,11 @@
+import { board } from "../board.js"
+
+export function isMoveLegal({
+ position,
+ turn = "none"
+}) {
+ if (board.stones[position.y][position.x] != undefined) {
+ return false
+ }
+ return true
+}
diff --git a/src/engine/turns.js b/src/engine/turns.js
index 7026dcc..6a5e6fb 100644
--- a/src/engine/turns.js
+++ b/src/engine/turns.js
@@ -2,14 +2,19 @@ import { board } from "../board.js"
import { Vector2 } from "../engine/visual/vector2.js"
import { Link } from "../link.js"
import { PLAYER } from "../constants.js"
+import { isMoveLegal } from "../engine/moves.js"
-export let turn = ""
+export let playerTurn = ""
export function nextTurn() {
- turn = turn == PLAYER.BLACK ? PLAYER.WHITE : PLAYER.BLACK
+ changeTurn()
placeLinks()
}
+function changeTurn() {
+ playerTurn = playerTurn == PLAYER.BLACK ? PLAYER.WHITE : PLAYER.BLACK
+}
+
function placeLinks() {
resetLink()
board.links = [...Array(board.size)].map(_ => Array(board.size))
@@ -22,13 +27,22 @@ function placeLinks() {
function resetLink() {
Array.from(board.links).forEach(x => {
- Array.from(x).filter((x) => x !== undefined).map(y => {
- y.removeLink()
- })
+ Array.from(x)
+ .filter((x) => x !== undefined)
+ .map(y => {
+ y.removeLink()
+ })
})
}
function tryLink(position) {
+ if (!isMoveLegal({
+ position: position,
+ team: playerTurn
+ })) {
+ return
+ }
+
new Link({
position: position,
})
diff --git a/src/engine/visual/createBoard.js b/src/engine/visual/createBoard.js
new file mode 100644
index 0000000..06fcf5e
--- /dev/null
+++ b/src/engine/visual/createBoard.js
@@ -0,0 +1,15 @@
+import { board } from "../../board.js"
+
+export function createBoard(size) {
+ let table = document.createElement("table")
+ for (let r = 1; r < size; r++) {
+ let tr = document.createElement("tr")
+
+ for (let c = 1; c < size; c++) {
+ let td = document.createElement("td")
+ tr.appendChild(td)
+ }
+ table.appendChild(tr)
+ }
+ board.element.appendChild(table)
+}
diff --git a/src/engine/visual/placeOnBoard.js b/src/engine/visual/placeOnBoard.js
index cee2969..4eea0d6 100644
--- a/src/engine/visual/placeOnBoard.js
+++ b/src/engine/visual/placeOnBoard.js
@@ -6,17 +6,23 @@ const HEAD_TOP_VH = 20
const MEDIA_LISTENER = window.matchMedia("(max-width: 600px)")
MEDIA_LISTENER.addEventListener("change", function() {
- Array.from(board.stones).forEach(x => {
- Array.from(x).filter((x) => x !== undefined).map(y => {
- y.update(MEDIA_LISTENER)
- })
- })
-
- Array.from(board.links).forEach(x => {
- Array.from(x).filter((x) => x !== undefined).map(y => {
- y.update(MEDIA_LISTENER)
- })
- })
+ Array.from(board.stones)
+ .forEach(x => {
+ Array.from(x)
+ .filter((x) => x !== undefined)
+ .map(y => {
+ y.update(MEDIA_LISTENER)
+ })
+ })
+
+ Array.from(board.links)
+ .forEach(x => {
+ Array.from(x)
+ .filter((x) => x !== undefined)
+ .map(y => {
+ y.update(MEDIA_LISTENER)
+ })
+ })
});
const PLACE_VALUES = {
@@ -34,12 +40,12 @@ const PLACE_VALUES = {
export function placeOnBoard({
position = new Vector2(0, 0),
board_size = 9,
- use_real_size = false,
+ use_link_size = false,
}) {
let response = {}
if (MEDIA_LISTENER.matches) {
let totalSize = (
- use_real_size ?
+ use_link_size ?
PLACE_VALUES.link.size_mob : PLACE_VALUES.stone.size_mob
)
let size = totalSize / board_size
@@ -48,7 +54,7 @@ export function placeOnBoard({
response["size"] = `${size}vw`
} else {
let totalSize = (
- use_real_size ?
+ use_link_size ?
PLACE_VALUES.link.size : PLACE_VALUES.stone.size
)
let size = totalSize / board_size