summaryrefslogtreecommitdiff
path: root/resources
diff options
context:
space:
mode:
Diffstat (limited to 'resources')
-rw-r--r--resources/bitboards.html111
1 files changed, 111 insertions, 0 deletions
diff --git a/resources/bitboards.html b/resources/bitboards.html
new file mode 100644
index 0000000..8323dfe
--- /dev/null
+++ b/resources/bitboards.html
@@ -0,0 +1,111 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="UTF-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <title>Bitboard editor</title>
+ <style>
+ :root {
+ --square-side-length: 6rem;
+ --dark-color: #779556;
+ --light-color: #ebecd0;
+ --selected-color: #f37f6b;
+ --background-color: #0f0f0f;
+ --text-color: #fefefe;
+ }
+ body {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ background-color: var(--background-color);
+ color: var(--text-color);
+ }
+ #board {
+ display: grid;
+ grid-template-columns: repeat(9, 1fr);
+ grid-template-rows: repeat(9, 1fr);
+ }
+ .dark {
+ background-color: var(--dark-color);
+ }
+ .light {
+ background-color: var(--light-color);
+ }
+ .selected {
+ background-color: var(--selected-color);
+ }
+ .square {
+ width: var(--square-side-length);
+ height: var(--square-side-length);
+ }
+ .label {
+ width: var(--square-side-length);
+ height: var(--square-side-length);
+ display: flex;
+ align-items: center;
+ justify-content: flex-end;
+ }
+ .horizontal_label {
+ width: var(--square-side-length);
+ height: var(--square-side-length);
+ display: flex;
+ justify-content: center;
+ }
+ </style>
+</head>
+<body>
+ <div id="board">
+ </div>
+ <div id="output">
+ </div>
+ <script>
+ const output = document.getElementById("output");
+
+ let bitboard = 0n;
+ function trackBitboard(i, selected) {
+ const mask = 1n << BigInt(i);
+ if (selected) {
+ bitboard |= mask;
+ } else {
+ bitboard &= ~mask;
+ }
+ output.textContent = bitboard.toString();
+ }
+
+ const selectedAction = trackBitboard;
+
+ const board = document.getElementById("board");
+ for (let i = 0; i < 64; i++) {
+ if (i % 8 == 0) {
+ const label = document.createElement("div");
+ label.classList.add("label");
+ label.textContent = 8 - Math.round(i / 8);
+ board.appendChild(label);
+ }
+ const square = document.createElement("div");
+ square.classList.add("square");
+ const shift = Math.floor(i / 8);
+ square.classList.add((i + shift) % 2 ? "dark" : "light");
+ square.onclick = () => {
+ const selected = square.classList.contains("selected");
+ selectedAction((i % 8) - 8 * Math.floor(i / 8) + 56, !selected);
+ if (selected) {
+ square.classList.remove("selected");
+ } else {
+ square.classList.add("selected");
+ }
+ };
+ board.appendChild(square);
+ }
+ const label = document.createElement("div");
+ label.classList.add("horizontal_label");
+ board.appendChild(label);
+ for (let i = 0; i < 8; i++) {
+ const label = document.createElement("div");
+ label.classList.add("horizontal_label");
+ label.textContent = ["a", "b", "c", "d", "e", "f", "g", "h"][i];
+ board.appendChild(label);
+ }
+ </script>
+</body>
+</html>