From 79cf3240e1e776d3e29e87fa85bf8d54a8ea4a51 Mon Sep 17 00:00:00 2001 From: ScriptSorcerer20 Date: Sun, 29 Mar 2026 17:54:11 +0200 Subject: [PATCH] implemented "acht-damen algorithmus", seperated javascript from html, made a simple check function. --- .../__pycache__/main_routes.cpython-311.pyc | Bin 3283 -> 3910 bytes app/routes/main_routes.py | 13 +- app/static/css/dashboard.css | 12 ++ app/static/js/dashboard.js | 199 ++++++++++++++++++ app/templates/dashboard.html | 156 ++------------ 5 files changed, 236 insertions(+), 144 deletions(-) create mode 100644 app/static/js/dashboard.js diff --git a/app/routes/__pycache__/main_routes.cpython-311.pyc b/app/routes/__pycache__/main_routes.cpython-311.pyc index 6d84cdad740e1bfb63718b98e357b9289c750d05..e097a85a9d76f2a9232ab1ebb299b5f2632b9518 100644 GIT binary patch delta 968 zcmZ`#L2DCH5PtJ^vq|=4lQt=$lEfMdHi$-A1=~U|Rtz2@SiIyS(znrQZ0PPrL~0Tx zV1{HbLMp0yf z_G9UD_KRftk3!WveRhfyF62CE4<#yaQT5g+A$9bgrDauq&CIn>oN!kSu!Y_;E>%bk z)B4{6N&EWXIl|peuqtuSD12mC=?^Ce_j36Tyk$-*+&6kb+J8V!alXg>hroe8c$V zdzI%OwB7pMLMD?_QH3*h-Ghr3jBI{Yr^|Srob2weB{1)XtC;B17|LWn5Zb;{J!vMl zk}ryz#d30Alq;!MmzrX@C5Cs!@E!}5uXimcUh8eIWI340}$M0I-2>0bt0bxqt8TjT^S~ZRK^tMRE}j#3=FG*7y_a=Q#luK zO=e^i)?`RwS;h#I17ZkBVQpbp24t>=2{1%)!&Hkhq_Cl?PGw7BpLj=}l?SFopCN@K zg)^OT4Hv4FDcl&w^1}3JGoTo6|XVGBTP>R^+2KczG$)vm}G$OQ#JG4JFzye^Y1`400jNHEHM01;pf0KsrX00000 diff --git a/app/routes/main_routes.py b/app/routes/main_routes.py index 3524549..102dcaa 100644 --- a/app/routes/main_routes.py +++ b/app/routes/main_routes.py @@ -1,5 +1,6 @@ from flask import Blueprint, jsonify, render_template, request from flask_login import login_required, current_user +import random main_bp = Blueprint("main", __name__) @@ -61,4 +62,14 @@ def solve(): board[row] = -1 backtrack(0) - return jsonify(solutions) \ No newline at end of file + return jsonify(solutions) + +@main_bp.route("/solve_rooks") +def solve_rooks_route(): + return jsonify(solve_rooks(8)) + +def solve_rooks(n=8): + solution = list(range(n)) + random.shuffle(solution) + return solution + diff --git a/app/static/css/dashboard.css b/app/static/css/dashboard.css index 76ace99..19f7438 100644 --- a/app/static/css/dashboard.css +++ b/app/static/css/dashboard.css @@ -140,4 +140,16 @@ body { background: #f1f5f9; margin: 4px 0; border-radius: 6px; +} + +.mode-switch { + margin-bottom: 15px; +} + +.mode-switch .btn { + margin: 5px; +} + +.btn.active { + background: #22c55e; } \ No newline at end of file diff --git a/app/static/js/dashboard.js b/app/static/js/dashboard.js new file mode 100644 index 0000000..d51e68c --- /dev/null +++ b/app/static/js/dashboard.js @@ -0,0 +1,199 @@ +let mode = "queens"; // oder "rooks" + +function setMode(newMode) { + mode = newMode; + resetBoard(); + + document.getElementById("btnQueens").classList.remove("active"); + document.getElementById("btnRooks").classList.remove("active"); + + if (mode === "queens") { + document.getElementById("btnQueens").classList.add("active"); + } else { + document.getElementById("btnRooks").classList.add("active"); + } + + drawBoard(); +} + +let board = Array(8).fill(-1); +const boardDiv = document.getElementById("board"); + +function getConflicts() { + let conflicts = []; + + for (let r1 = 0; r1 < 8; r1++) { + if (board[r1] === -1) continue; + + for (let r2 = r1 + 1; r2 < 8; r2++) { + if (board[r2] === -1) continue; + + let c1 = board[r1]; + let c2 = board[r2]; + + // ๐Ÿ”ด Tรผrme: nur gleiche Spalte + if (mode === "rooks") { + if (c1 === c2) { + conflicts.push([r1, c1]); + conflicts.push([r2, c2]); + } + } + + // ๐Ÿ”ด Damen: Spalte + Diagonale + else if (mode === "queens") { + if ( + c1 === c2 || + Math.abs(c1 - c2) === Math.abs(r1 - r2) + ) { + conflicts.push([r1, c1]); + conflicts.push([r2, c2]); + } + } + } + } + + return conflicts; +} + +function checkSolution() { + const status = document.getElementById("statusMessage"); + + const allPlaced = board.every(col => col !== -1); + + if (!allPlaced) { + status.textContent = "โ— Noch nicht alle Figuren platziert."; + status.style.color = "orange"; + return; + } + + const conflicts = getConflicts(); + + if (conflicts.length > 0) { + status.textContent = "โŒ Es gibt Konflikte!"; + status.style.color = "red"; + return; + } + + status.textContent = "๐ŸŽ‰ Perfekt gelรถst!"; + status.style.color = "green"; +} + +function drawBoard() { + boardDiv.innerHTML = ""; + boardDiv.className = "board-grid"; + + const conflicts = getConflicts(); + const letters = ["A", "B", "C", "D", "E", "F", "G", "H"]; + + for (let row = -1; row < 8; row++) { + for (let col = -1; col < 8; col++) { + + const cell = document.createElement("div"); + + // ๐Ÿ”น Ecke oben links + if (row === -1 && col === -1) { + cell.classList.add("label"); + } + + // ๐Ÿ”น Buchstaben (oben) + else if (row === -1) { + cell.textContent = letters[col]; + cell.classList.add("label"); + } + + // ๐Ÿ”น Zahlen (links) + else if (col === -1) { + cell.textContent = 8 - row; + cell.classList.add("label"); + } + + // ๐Ÿ”น echtes Spielfeld + else { + cell.classList.add("cell"); + + if ((row + col) % 2 === 0) { + cell.classList.add("white"); + } else { + cell.classList.add("black"); + } + + if (board[row] === col) { + cell.textContent = (mode === "queens") ? "โ™›" : "โ™œ"; + + if (conflicts.some(([r, c]) => r === row && c === col)) { + cell.classList.add("invalid"); + } + } + + cell.onclick = () => placeQueen(row, col); + } + + boardDiv.appendChild(cell); + } + } + + updateQueenList(); +} + +function placeQueen(row, col) { + if (board[row] === col) { + board[row] = -1; + } else { + board[row] = col; + } + drawBoard(); + updateQueenList(); +} + +async function solve() { + + if (mode === "rooks") { + const res = await fetch("/solve_rooks"); + const solution = await res.json(); + + board = solution; + drawBoard(); + return; + } + + // Damen (wie vorher) + const res = await fetch("/solve"); + const solution = await res.json(); + + board = Array.isArray(solution[0]) ? solution[0] : solution; + drawBoard(); +} + + +function resetBoard() { + const status = document.getElementById("statusMessage"); + board = Array(8).fill(-1); + drawBoard(); + updateQueenList(); + status.textContent = ""; +} + +drawBoard(); + +function updateQueenList() { + const list = document.getElementById("queenList"); + list.innerHTML = ""; + + const letters = ["A", "B", "C", "D", "E", "F", "G", "H"]; + + let count = 1; + + for (let row = 0; row < 8; row++) { + if (board[row] !== -1) { + let col = board[row]; + + let pos = letters[col] + (8 - row); + + const li = document.createElement("li"); + li.textContent = `${mode === "queens" ? "Dame" : "Turm"} ${count}: ${pos}`; + + list.appendChild(li); + count++; + } + } +} \ No newline at end of file diff --git a/app/templates/dashboard.html b/app/templates/dashboard.html index 1884b05..9db3807 100644 --- a/app/templates/dashboard.html +++ b/app/templates/dashboard.html @@ -45,163 +45,33 @@ +
+ + +
+ +

โ™Ÿ๏ธ 8-Damen Spiel

+

+
+
+

๐Ÿ“‹ Damen Positionen

+
    +
    - - -
    -

    ๐Ÿ“‹ Damen Positionen

    -
      -
      - - +