Hey zusammen,
ich befasse mich gerade mit JavaScript und habe einen Reaktionsmesser programmiert inklusive Scoreliste, Spiel starten mit neuem Namen und erneut spielen.
Das Spiel funktioniert soweit auch. Das Problem was ich habe ist, dass ich in einer Funktion einen EventListener habe der nach dem ersten Spiel mehrfach neu erzeugt wird. Dieses Problem hatte ich schonmal. Damals habe ich die Eventlistener dann außerhalb des Click Events platziert damit sie nicht mehrfach generiert werden. Jetzt ist es so, dass dieser Eventlistener jedoch nicht außerhalb platziert werden kann weil sonst das Spiel nicht mehr funktioniert.
Es geht um den Eventlistener in dem die Scores in die Arrays eingefügt werden und ausgegeben werden. Im Anhang ist ein Bild der die Scoresliste nach dem 2ten Spieldurchlauf zeigt.
Ich habe schon echt viel getestet und weiß nicht weiter...
Habt ihr Tipps? Ratschläge?
Hier ist der JS Code:
"use strict";
window.addEventListener("load", function(){
let formularSection = document.getElementById("formularBereich");
let formular = document.getElementById("gameFormular");
let playForm = document.getElementById("playForm");
let buttonsAfterGame = document.getElementById("buttonsAfterGame");
let playerNameField = document.getElementById("spielername");
let ergebnisSection = document.getElementById("ergebnis");
let startGameButton = document.getElementById("startGame");
let startGameAgain = document.getElementById("startGameAgain");
let startGameWithNewName = document.getElementById("startGameWithNewName");
let error = document.getElementById("fehler");
let player;
let isPlayed = false;
let playerList = [];
let playerTime = [];
let randomSeconds = Math.random() * 5000;
let gameSection = document.getElementById("clickBereich");
gameSection.style.display = "none";
buttonsAfterGame.style.display = "none";
// 1. Spieleformular auswerten
let startGame = function(event){
event.preventDefault();
if(!isPlayed){
player = playerNameField.value;
if(player !== ""){
if(error.innerText !== ""){
error.innerText = "";
}
formular.reset();
formularSection.style.display = "none";
gameSection.style.display = "block";
setTimeout(playGame, randomSeconds);
} else{
error.innerText = "Bitte trage deinen Namen ein!";
}
}else{
formularSection.style.display = "none";
gameSection.style.display = "block";
setTimeout(playGame, randomSeconds);
}
};
let playGame = function(){
let start = Date.now();
gameSection.style.backgroundColor = "blue";
gameSection.addEventListener("click", function(){
let end = Date.now();
let neededTime = (end - start) / 1000;
if(neededTime < 1){
ergebnisSection.innerText = "Super Reaktion! Du hast " + neededTime + " Sekunden benötigt";
} else if(neededTime > 1 && neededTime < 3){
ergebnisSection.innerText = "Gute Reaktion! Du hast " + neededTime + " Sekunden benötigt";
} else{
ergebnisSection.innerText = "Deine Reaktion war okay! Du hast " + neededTime + " Sekunden benötigt";
}
isPlayed = true;
getPlayerScores(neededTime);
showPlayersScores();
setTimeout(showButtonsAfterGame, 4000);
}, false);
};
let showButtonsAfterGame = function(){
ergebnisSection.innerText = "";
gameSection.style.display = "none";
gameSection.style.backgroundColor = "white";
formularSection.style.display = "block";
playForm.style.display = "none";
buttonsAfterGame.style.display = "block";
};
let showTheGameFormular = function(event){
event.preventDefault();
isPlayed = false;
playForm.style.display = "block";
buttonsAfterGame.style.display = "none";
}
let getPlayerScores = function(neededTime){
playerList.push(player);
playerTime.push(neededTime);
};
let showPlayersScores = function(){
let tBody = document.getElementById("body");
for(let playerName of playerList){
for(let time of playerTime ){
let tr = document.createElement("tr");
let td1 = document.createElement("td");
let td2 = document.createElement("td");
td1.innerHTML = playerName;
td2.innerHTML = time;
tr.appendChild(td1);
tr.appendChild(td2);
tBody.appendChild(tr);
}
}
};
startGameButton.addEventListener("click", startGame);
startGameAgain.addEventListener("click", startGame);
startGameWithNewName.addEventListener("click", showTheGameFormular);
});
Alles anzeigen