Moim zdaniem pisanie ciągle w prompt - "ROCK", "PAPER", "SCISSORS" będzie męczące dla gracza, lepiej użyć indeksów z tablicy shape
przykład 1
const shape = ['Rock', 'Paper', 'Scissors'],
shape_prompt = `[1] ${shape[0]} [2] ${shape[1]} [3] ${shape[2]}`;
async function demo() {
while (true) {
// "zatrzymanie" na 0.5 sekundy wykonywanie kodu
await pause(500);
const player_choice = prompt('Choice your sign: ' + shape_prompt + ' [Enter] Exit');
if (!player_choice || player_choice === null) break;
if (player_choice.trim() && inRange(parseInt(player_choice), 1, 3))
console.log('player say: ' + shape[player_choice - 1]);
}
console.log('player say: Exit');
}
const inRange = (x, min, max) => { return x >= min && x <= max; };
const pause = (m) => { return new Promise(resolve => setTimeout(() => { resolve(); }, m)) };
demo();
w powyższym przykładzie cyfry (znaki) inne niż 1, 2, 3 są ignorowane a kliknięcie w przycisk OK lub naciśnięcie Enter gdy nic nie jest wpisane w pole prompt kończy pętle while.
przykład 2
const shape = ['Rock', 'Paper', 'Scissors'],
shape_prompt = `[1] ${shape[0]} [2] ${shape[1]} [3] ${shape[2]}`,
results = [];
for (let i = 0; i < 5; i++) {
console.info(i + 1);
const player_choice = parseInt(prompt('Choice your sign: ' + shape_prompt)) - 1,
computer_choice = Math.floor((Math.random()) * shape.length);
console.log('player say: ' + shape[player_choice]);
console.log('computer say: ' + shape[computer_choice]);
if (player_choice == computer_choice) {
results.push('draw');
console.log('Drawn');
} else if ((player_choice == 0 && computer_choice == 2) ||
(player_choice == 1 && computer_choice == 0) ||
(player_choice == 2 && computer_choice == 1)) {
results.push('win');
console.log("You are the winner!");
} else {
results.push('loose');
console.log("You lost!");
}
}
console.log(results);
można po prostu pominąć taki zapis (po co "dodawać zero" )
else if (wyniki[j] === "draw") {
wynikOstateczny = +0;
na np.:
for (let j = 0; j < wyniki.length; j++)
if (wyniki[j] === "win")
wynikOstateczny += 1;
else if (wyniki[j] === "loose")
wynikOstateczny -= 1;
przykład
const wyniki = ['win', 'win', 'draw', 'loose', 'win'];
let wynikOstateczny = 0;
for (let j = 0; j < wyniki.length; j++)
if (wyniki[j] === "win")
wynikOstateczny += 1;
else if (wyniki[j] === "loose")
wynikOstateczny -= 1;
console.log(wynikOstateczny);
ewentualnie "użycie zero" przy takim zapisie
const wyniki = ['win', 'win', 'draw', 'loose', 'win'];
let wynikOstateczny = 0;
for (let j = 0; j < wyniki.length; j++)
wynikOstateczny += (wyniki[j] === "win") ? 1 : (wyniki[j] === "loose") ? -1 : 0;
console.log(wynikOstateczny);
lub
const wyniki = ['win', 'win', 'draw', 'loose', 'win'];
let wynikOstateczny = 0;
for (let wynik of wyniki)
wynikOstateczny += (wynik === "win") ? 1 : (wynik === "loose") ? -1 : 0;
console.log(wynikOstateczny);
P.S. Create a pause inside a while loop in Javascript