我正在做 TOP (The Odin Project) 的第三個專案,其中包括在控制臺上創建一個沒有 GUI 的簡單石頭剪刀布游戲。這是我要制作的回圈的偽代碼:
提示用戶輸入輪數,分配給變數 rounds
start counter (i) at 0 并且對于 i 的值直到(不包括)輪數,執行以下代碼:
我對這段代碼沒有任何問題,它曾經使用 while 回圈而不是 for 回圈完美地作業,所以我想我一定是做錯了什么。
這是我寫的代碼:
let rounds = prompt("How many rounds do you want to play?")
for (let i = 0; i < rounds; i ) {
let playerMove = convertToNumber(promptPlayer())
let computerMove = computerPlay()
if (computerMove > playerMove) {
if (computerMove === 2 && playerMove === 0) {
console.log(`You won! ${convertToItem(playerMove)} beats ${convertToItem(computerMove)}.`)
} else {
console.log(`You lost! ${convertToItem(computerMove)} beats ${convertToItem(playerMove)}.`)
}
} else if (playerMove > computerMove) {
if (computerMove === 0 && playerMove === 2) {
console.log(`You lost! ${convertToItem(computerMove)} beats ${convertToItem(playerMove)}.`)
} else {
console.log(`You won! ${convertToItem(playerMove)} beats ${convertToItem(computerMove)}.`)
}
} else if (playerMove) {
console.log("Ties!")
}
}
這是對頁面行為的詳細解釋:如果我輸入 5,它將提示我 5 次石頭、紙或剪刀,并且除了第一個(即問題)之外的每個都記錄在控制臺中。我不知道為什么省略第一個。
我不確定我是否提供了足夠的資訊,如果沒有,我將發送整個代碼(6 行,不多)。其余代碼只是函式宣告,當我將 while 回圈更改為 for 回圈時,我沒有更改它們。
謝謝你。
編輯:
我看到很多評論都在強調代碼不足,所以這是我寫的完整代碼:
function computerPlay() {
return Math.floor(Math.random() * 3)
}
function convertToItem(num) {
switch (num) {
case 0:
return "rock";
case 1:
return "paper";
case 2:
return "scissors";
}
}
function convertToNumber(item) {
switch (item) {
case "rock":
return 0;
case "paper":
return 1;
case "scissors":
return 2;
}
}
function promptPlayer() {
let playerMove = prompt("Rock, Paper or Scissors?").toLowerCase()
if (playerMove !== "rock" && playerMove !== "paper" && playerMove !== "scissors") {
alert("Invalid answer! Try again.")
} else {
return playerMove
}
}
let rounds = prompt("How many rounds do you want to play?")
for (let i = 0; i < rounds; i ) {
let playerMove = convertToNumber(promptPlayer())
let computerMove = computerPlay()
if (computerMove > playerMove) {
if (computerMove === 2 && playerMove === 0) {
console.log(`You won! ${convertToItem(playerMove)} beats ${convertToItem(computerMove)}.`)
} else {
console.log(`You lost! ${convertToItem(computerMove)} beats ${convertToItem(playerMove)}.`)
}
} else if (playerMove > computerMove) {
if (computerMove === 0 && playerMove === 2) {
console.log(`You lost! ${convertToItem(computerMove)} beats ${convertToItem(playerMove)}.`)
} else {
console.log(`You won! ${convertToItem(playerMove)} beats ${convertToItem(computerMove)}.`)
}
} else if (playerMove) {
console.log("Ties!")
}
}
uj5u.com熱心網友回復:
你的回圈確實有效。這就是您收到 5 個提示的原因。但是你的 if 陳述句并不總是正確的,所以有時它不會在控制臺中輸出一些東西。尤其是最后一個很奇怪。如果其他一切都需要是領帶!然后只需使用else而不是另一個else if(這可能是錯誤的并且不會顯示訊息)
你的示例代碼對于一個作業示例來說是不夠的,所以我在下面做了一些更改,但是回圈是相同的,并且 if 陳述句的邏輯(所有人都認為我確實改變了一些順序,所以我不需要嵌套如果)。
let rounds = prompt("How many rounds do you want to play?");
for (let i = 0; i < rounds; i ) {
let playerMove = Number( prompt("What your gonna do? Rock=0; Paper=1; Scissors=2;") ); // Expect a number 0, 1 or 2
let computerMove = Math.floor(Math.random() * 3) // random number 0, 1 or 2
// if numbers from playerMove and computerMove are the same it's a tie
if (playerMove === computerMove) {
console.log("Ties!");
}
// if player has Rock(0) and computer Paper(1) or player has Paper(1) and computer Scissors(2) you lose..
// if player has Scissors(2) but computer has Rock(0) you lose as well
else if (playerMove 1 === computerMove || playerMove-2 === computerMove) {
console.log("You lost!");
}
// in all other cases you win
else {
console.log("You win!");
}
console.log("Played by player: " playerMove);
console.log("Played by computer: " computerMove);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/467868.html
標籤:javascript 循环 for循环
上一篇:這個C程式的輸出怎么是1?
下一篇:制作os時通過參考傳遞錯誤
