簡體   English   中英

測試用戶輸入值是否在給定數組中(JavaScript)

[英]Testing if the user input value is in a given array (JavaScript)

我剛剛使用香草JavaScript創建了一個五輪剪刀石頭布游戲。 該程序到目前為止運行良好,只是每次我第一次啟動游戲時,無論什么情況,任何用戶輸入都將是無效的,並且不會計入該回合。

這是我的代碼:

 // Global variables let playerWins = 0; let computerWins = 0; let array = []; let validInput = 0; let newRound = ""; // This function generates a computer selection const computerPlay = () => { array = ["rock", "paper", "scissors"] return array[Math.floor(Math.random() * array.length)]; } // This function stores player selection const playerSelection = (selection) => { selection = prompt("Enter: 'Rock', 'Paper' or 'Scissors'").toLowerCase(); validInput = array.indexOf(selection); console.log(validInput); // This loop will validate user input is correct while (validInput === -1) { alert("Invalid input, try again"); selection = prompt("Enter 'Rock', 'Paper' or 'Scissors'").toLowerCase(); validInput = array.includes(selection); } return selection; } // This function plays a single round of Rock-Paper-Scissors const playRound = (playerSelection, computerPlay) => { // If both players select the same item if (playerSelection === computerPlay) { return alert("It's a tie!"); } // If player selects "Rock" if (playerSelection === "rock") { if (computerPlay === "scissors") { playerWins += 1; return alert("Rock crushes scissors: YOU WIN!!!"); } else { computerWins += 1; return alert("Paper covers rock: YOU LOOSE!!!"); } } // If player selects "Paper" if (playerSelection === "paper") { if (computerPlay === "rock") { playerWins += 1; return alert("Paper covers rock: YOU WIN!!!"); } else { computerWins += 1; return alert("Scissors cuts paper: YOU LOOSE!!!"); } } // If player selects "Scissors" if (playerSelection === "scissors") { if (computerPlay === "rock") { computerWins += 1; return alert("Rock crushes scissors: YOU LOOSE!!!"); } else { playerWins += 1; return alert("Scissors cuts paper: YOU WIN!!!"); } } } // This function keeps score and reports a winner or loser at the end const trackWins = (pw, cw) => { alert("COMPUTER WINS: " + cw + "\\nPLAYER WINS: " + pw) if (pw > cw) { alert("YOU WIN THIS ROUND, CONGRAX!!!") } else if (cw > pw) { alert("YOU LOOSE THIS ROUND, SO BEST LUCK FOR THE NEXT TIME :_(") } else { alert("IT'S A TIE") } } // This function creates a 5 round game const game = () => { for (let i = 0; i < 5; i++) { playRound(playerSelection(), computerPlay()); } trackWins(playerWins, computerWins); } do { game(); newRound = prompt("Do yo want to play another round? Type 'y' to continue or any other key to exit").toLowerCase(); } while (newRound === "y"); alert("It was a good game, bye for now!") 

感謝您提出任何解決此問題或改進腳本的想法,在此先感謝您!

您可以簡化發布的代碼,以更好地反映問題-例如,您有一個數組和一個存儲用戶輸入的變量。 您如何測試輸入值是否在數組中?

var arr=['Rock','Paper','Scissors'];
var inp='Rock'; //user input

您可以使用while循環,但是有一種更快的方法:

var options={'rock':0,'paper':1,'scissors':2}
var inp='Rock'; //user input
var ninp=inp.toLowerCase().trim(); //normalize input

var pick=(options[ninp]);

if (pick==null) // invalid selection
if (pick==0) //rock
if (pick==1) //paper
if (pick==2) //scissors

可以使用開關進一步清除代碼:

switch (pick){
  case 0: ... break; //rock
  case 1: ... break; //paper
  case 2: ... break; //scissors
  default: //invalid
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM