document.addEventListener('DOMContentLoaded', (event) => {
let actionPools = {
0: [1, 2, 3],
1: [1, 2, 3],
2: [1, 2, 3],
3: [1, 2, 3],
4: [1, 2, 3],
5: [1, 2, 3],
6: [1, 2, 3],
7: [1, 2, 3],
8: [1, 2],
9: [1]
};
// Funktion zur Synchronisation der Aktionspools mit der Tabelle
function updateActionPools() {
const rows = document.querySelectorAll('tbody tr');
rows.forEach((row, index) => {
const pool = actionPools[index];
if (pool) {
row.children[1].textContent = pool.join(', ');
}
});
}
const matchstickElements = document.querySelectorAll('#matchsticks img');
const currentPlayerElement = document.getElementById('current-player');
const endTurnButton = document.getElementById('end-turn');
const startGameButton = document.getElementById('start-game');
const trainButton = document.getElementById('train-ki');
const resetButton = document.getElementById('reset');
const rundenInput = document.getElementById('training-rounds');
const actionPoolsTableBody = document.querySelector('tbody');
function highlightMatchsticks(elements) {
elements.forEach(element => {
element.classList.add('highlighted');
element.classList.add('selected');
});
}
function unhighlightMatchsticks(elements) {
elements.forEach(element => {
element.classList.remove('highlighted');
element.classList.remove('selected');
});
}
function updateMatchsticksDisplay() {
matchstickElements.forEach((element, index) => {
element.style.visibility = index < matchsticks ? 'visible' : 'hidden';
element.classList.remove('highlighted');
element.style.transform = element.classList.contains('selected') ? 'scale(0.8)' : 'scale(1)';
});
}
function kiMove() {
if (matchsticks > 0) {
let move = actionPools[10 - matchsticks][Math.floor(Math.random() * actionPools[10 - matchsticks].length)];
let selectedElements = Array.from(matchstickElements).slice(matchsticks - move, matchsticks);
highlightMatchsticks(selectedElements);
setTimeout(() => {
selectedElements.forEach(element => element.classList.remove('selected'));
matchsticks -= move;
console.log(`KI entfernt ${move} Streichhölzer. Verbleibend: ${matchsticks}`);
updateMatchsticksDisplay();
checkGameOver();
currentPlayer = 'Human';
currentPlayerElement.textContent = 'Human';
}, 1500); // Warte 1,5 Sekunden, bevor die Streichhölzer entfernt werden
}
}
function checkGameOver() {
if (matchsticks <= 0) {
alert(`${currentPlayer} hat verloren!`);
startGameButton.disabled = false;
endTurnButton.disabled = true;
}
}
matchstickElements.forEach((element, index) => {
element.addEventListener('click', () => {
if (currentPlayer === 'Human' && matchsticks > 0 && index >= matchsticks - 3 && index < matchsticks) {
element.classList.toggle('selected');
updateMatchsticksDisplay();
}
});
});
endTurnButton.addEventListener('click', () => {
if (currentPlayer === 'Human' && matchsticks > 0) {
const selectedElements = document.querySelectorAll('.selected');
const move = selectedElements.length;
if (move > 0 && move <= 3) {
selectedElements.forEach(element => element.classList.remove('selected'));
matchsticks -= move;
console.log(`Spieler B entfernt ${move} Streichhölzer. Verbleibend: ${matchsticks}`);
updateMatchsticksDisplay();
checkGameOver();
currentPlayer = 'KI';
currentPlayerElement.textContent = 'KI';
if (matchsticks > 0) {
kiMove();
}
} else {
selectedElements.forEach(element => element.classList.remove('selected')); // Zurücksetzen der Auswahl
alert('Bitte wählen Sie 1 bis 3 Streichhölzer aus.');
}
}
});
startGameButton.addEventListener('click', () => {
matchsticks = 10;
currentPlayer = 'KI';
currentPlayerElement.textContent = 'KI';
updateMatchsticksDisplay();
startGameButton.disabled = true;
endTurnButton.disabled = false;
console.log('Spiel gestartet');
kiMove();
});
trainButton.addEventListener('click', () => {
let rundenanzahl = parseInt(rundenInput.value);
if (rundenanzahl > 0) {
trainingsdurchlauf(rundenanzahl);
} else {
alert('Bitte eine gültige Anzahl an Runden eingeben');
}
});
resetButton.addEventListener('click', () => {
actionPools = {
0: [1, 2, 3],
1: [1, 2, 3],
2: [1, 2, 3],
3: [1, 2, 3],
4: [1, 2, 3],
5: [1, 2, 3],
6: [1, 2, 3],
7: [1, 2, 3],
8: [1, 2],
9: [1]
};
updateMatchsticksDisplay();
updateActionPools();
console.log("Die Aktionspools wurden zurückgesetzt");
alert("Die KI wurde zurückgesetzt");
});
function trainingsdurchlauf(rundenanzahl) {
console.log(`Trainiere KI mit ${rundenanzahl} Runden`);
for (let i = rundenanzahl; i > 0; i--) {
trainingsrunde();
}
// Trainingslogik wird hier implementiert
}
function trainingsrunde() {
let matchsticks = 10; // Initialisierung der Streichhölzer auf 10
let history = []; // Initialisierung des Verlaufs
console.log("Start der Trainingsrunde");
while (matchsticks > 0) {
// KI-Zug
let kiMove = actionPools[10 - matchsticks][Math.floor(Math.random() * actionPools[10 - matchsticks].length)];
console.log(`KI-Zug: Verbleibende Streichhölzer = ${matchsticks}, gewählter Zug = ${kiMove}`);
history.push({ matchsticks, move: kiMove }); // history = [{ matchsticks: 10, move: 2 }]
matchsticks -= kiMove; // matchsticks = 10 - 2 = 8
if (matchsticks === 0) {
// KI verliert
console.log("KI hat verloren");
for (let i = history.length - 1; i >= 0; i--) {
let h = history[i];
if (actionPools[10 - h.matchsticks].length > 1) {
console.log(`Entferne Zug ${h.move} aus Aktionspool für ${10 - h.matchsticks} Streichhölzer`);
actionPools[10 - h.matchsticks] = actionPools[10 - h.matchsticks].filter(x => x !== h.move);
break;
}
}
break;
}
// Zufälliger Zug von Spieler B
let playerBMove = Math.min(matchsticks, Math.floor(Math.random() * 3) + 1);
console.log(`Spieler B-Zug: Verbleibende Streichhölzer = ${matchsticks}, gewählter Zug = ${playerBMove}`);
matchsticks -= playerBMove;
if (matchsticks === 0) {
// Spieler B verliert
console.log("Der Mensch hat verloren");
break;
}
}
updateActionPools();
console.log("Aktionspools nach der Runde:", actionPools);
}
});