OK, teraz postanowiłem wykorzystać zdobytą wiedzę i zrobiłem prostą grę w statki. Jest tylko jeden problem. Wszystko działa do momentu, w którym poda się dwukrotnie tę samą wartość, wtedy gra powinna to wychwycić i zwrócić komunikat (tak się dzieje). Problem leży w momencie zakończenia gry. Trafiam kolejno trzy razy w odpowiednie miejsce, dostaję komunikat o zakończeniu gry, podsumowanie, a następnie w zależności od tego, którą wartość podam więcej niż raz, dostaję komunikat o trafieniu bądź pudle i gra się zapętla. Prześledziłem całość za pomocą debuggera w Firefoxie i z niewiadomych mi przyczyn, program po przejściu przez instrukcje z wyświetleniem wyników gry, wraca znowu do funkcji. Oto całość kodu:
var location1 = 3;
var location2 = 4;
var location3 = 5;
var hits = 0;
var guesses = 0;
var answers = [];
userPrompt();
function checkIfExists(guess){
var i = 0;
for (i = 0; i < answers.length; i++){
if (answers[i] == guess && answers[i] != null && answers[i] != undefined){
alert("Tu już strzelałeś, podaj inną liczbę!");
userPrompt();
}
}
answers.push(guess);
fire(guess);
}
function userPrompt(){
var guess;
guess = prompt("Gotów, cel, pal! (podaj liczbę z zakresu od 0-6):");
if (guess < 0 || guess > 6 || isNaN(guess)){
alert("Proszę podać prawidłowy numer komórki!");
userPrompt();
} else {
checkIfExists(guess);
}
}
function fire(guess){
guesses = guesses + 1;
if (guess == location1 || guess == location2 || guess == location3){
alert("Trafiony!");
hits = hits + 1;
if (hits == 3){
alert("Gratulacje! Zatopiłeś okręt!");
score();
} else {
userPrompt();
}
} else {
alert("Pudło!");
userPrompt();
}
}
function score(){
var stats = "Potrzebowałeś " + guesses + " prób, by zatopić okręt, " +
"czyli Twoja efektywność wynosi: " + (3/guesses) + ".";
alert(stats);
}
Jak pominę funkcję checkIfExists(), to wtedy działa poprawnie, ale strzał w to samo miejsce trzy razy powoduje to, że gra się kończy, tym razem prawidłowo, także problem leży w tej funkcji.