ecfe5c09a8
conflict still has some errors (damen despawn somethimes) and css is very simple.
148 lines
4.1 KiB
HTML
148 lines
4.1 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="de">
|
|
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>Dashboard</title>
|
|
|
|
<link rel="stylesheet" href="../static/css/dashboard.css">
|
|
</head>
|
|
|
|
<body>
|
|
|
|
<!-- 🔝 Navbar -->
|
|
<nav class="navbar">
|
|
<div class="nav-left">♛ 8-Queens App</div>
|
|
<div class="nav-right">
|
|
<a href="{{ url_for('main.dashboard') }}">Dashboard</a>
|
|
<a href="{{ url_for('login.logout') }}">Logout</a>
|
|
</div>
|
|
</nav>
|
|
|
|
<!-- 📦 Container -->
|
|
<div class="container">
|
|
|
|
<!-- 👤 User Card -->
|
|
<div class="card">
|
|
<h2>👋 Willkommen, {{ current_user.username }}</h2>
|
|
|
|
<div class="user-info">
|
|
<p><strong>ID:</strong> {{ current_user.id }}</p>
|
|
<p><strong>Username:</strong> {{ current_user.username }}</p>
|
|
|
|
{% if current_user.email %}
|
|
<p><strong>Email:</strong> {{ current_user.email }}</p>
|
|
{% else %}
|
|
<p><strong>Email:</strong> Not set</p>
|
|
{% endif %}
|
|
|
|
<p><strong>Erstellt:</strong> {{ current_user.created_at }}</p>
|
|
</div>
|
|
|
|
<form action="{{ url_for('login.logout') }}" method="post">
|
|
<button class="btn danger" type="submit">Logout</button>
|
|
</form>
|
|
</div>
|
|
|
|
<!-- ♟️ Game Card -->
|
|
<div class="card game-card">
|
|
<h2>♟️ 8-Damen Spiel</h2>
|
|
|
|
<div class="board" id="board"></div>
|
|
|
|
<div class="controls">
|
|
<button class="btn" onclick="solve()">Solve</button>
|
|
<button class="btn secondary" onclick="resetBoard()">Reset</button>
|
|
</div>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<script>
|
|
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];
|
|
|
|
if (
|
|
c1 === c2 ||
|
|
Math.abs(c1 - c2) === Math.abs(r1 - r2)
|
|
) {
|
|
conflicts.push([r1, c1]);
|
|
conflicts.push([r2, c2]);
|
|
}
|
|
}
|
|
}
|
|
|
|
return conflicts;
|
|
}
|
|
|
|
function drawBoard() {
|
|
boardDiv.innerHTML = "";
|
|
const conflicts = getConflicts();
|
|
|
|
for (let row = 0; row < 8; row++) {
|
|
for (let col = 0; col < 8; col++) {
|
|
|
|
const cell = document.createElement("div");
|
|
cell.classList.add("cell");
|
|
|
|
if ((row + col) % 2 === 0) {
|
|
cell.classList.add("white");
|
|
} else {
|
|
cell.classList.add("black");
|
|
}
|
|
|
|
if (board[row] === col) {
|
|
cell.textContent = "♛";
|
|
|
|
if (conflicts.some(([r, c]) => r === row && c === col)) {
|
|
cell.classList.add("invalid");
|
|
}
|
|
}
|
|
|
|
cell.onclick = () => placeQueen(row, col);
|
|
boardDiv.appendChild(cell);
|
|
}
|
|
}
|
|
}
|
|
|
|
function placeQueen(row, col) {
|
|
if (board[row] === col) {
|
|
board[row] = -1;
|
|
} else {
|
|
board[row] = col;
|
|
}
|
|
drawBoard();
|
|
}
|
|
|
|
async function solve() {
|
|
const res = await fetch("/solve");
|
|
const solutions = await res.json();
|
|
|
|
board = solutions[0];
|
|
drawBoard();
|
|
}
|
|
|
|
function resetBoard() {
|
|
board = Array(8).fill(-1);
|
|
drawBoard();
|
|
}
|
|
|
|
drawBoard();
|
|
</script>
|
|
|
|
</body>
|
|
|
|
</html> |