私はfunction{computerPlay()}
を呼び出して、呼び出すたびに新しい乱数を生成します。上に宣言された配列から項目を返します。それは私がconsole
でそれをテストするときにそれをどのようにしたいと思うか動作します。しかし、私のゲームが正常に動作するためには、私はそれをfor
ループに入れて、ページを更新しない限り同じ値を返し続けます。私はどこでも答えを見つけることができず、これが私の最初の質問です。私はコードが不調だと確信しているので、無視してください。ここにコードがあります。Javascript - forループで呼び出されているときにMath.random関数が同じ結果を返します
let playOptionsArray = ["Rock", "Paper", "Scissors"];
let totalTies = 0;
let playerPoints = 0;
let computerPoints = 0;
let round = 1;
//formats a player's entry so it will match playOptionsArray
function firstLetterUppercase(string){
let firstLetter = string.charAt(0);
let firstLetterCapitalized = firstLetter.toUpperCase();
let restOfResponse = string.slice(1);
let formattedResponse = firstLetterCapitalized + restOfResponse;
return formattedResponse;
}
//compares player entry to ensure it matches an item on the playOptions array
function checkPlayerResponse(response){
if (response === "Rock" || response === "Paper" || response === "Scissors") {
return response;
} else {
return alert("You must choose either 'Rock', 'Paper', or 'Scissor' as your play. Please try again.");
}
}
//generates a random option for the computer's play
function computerPlay() {
let computerSelection = playOptionsArray[Math.floor(Math.random()*(playOptionsArray.length))];
return computerSelection;
}
let computerSelection = computerPlay();
function getPlayerSelection() {
let playerEntry = window.prompt("You are playing the computer in a game of Rock, Paper, Scissors. First player to five points wins. Choose either Rock, Paper, or Scissors as your play", "Rock");
if (playerEntry != null) {
let playerEntryLowercase = playerEntry.toLowerCase();
playerSelection = firstLetterUppercase(playerEntryLowercase);
} else {
getPlayerSelection();
}
checkPlayerResponse(playerSelection);
return playerSelection;
}
let playerSelection = getPlayerSelection;
//emulates a single round of rock paper scissor
function singleRound(){
if (playerSelection === "Rock" && computerSelection === "Scissors"){
alert('You have won this round. The computer chose ' + computerSelection + '.');
playerPoints++;
round++;
} else if (playerSelection === "Scissors" && computerSelection === "Paper"){
alert('You have won this round. The computer chose ' + computerSelection + '.');
playerPoints++;
round++
} else if (playerSelection === "Paper" && computerSelection === "Rock"){
alert('You have won this round. The computer chose ' + computerSelection + '.');
playerPoints++;
round++
} else if (playerSelection === computerSelection){
alert('You have tied this round. The computer chose ' + computerSelection + '.');
totalTies++;
} else {
alert('Something went wrong. Refresh the page.')
}
}
function updateScore() {
document.getElementById("player-points").innerHTML = playerPoints;
document.getElementById("round").innerHTML = round;
document.getElementById("computer-points").innerHTML = computerPoints;
document.getElementById("total-ties").innerHTML = totalTies;
}
//keeps track of player points and ends when a player gets 5 points
function game() {
for (round = 0; computerPoints < 5 && playerPoints < 5; round) {
getPlayerSelection();
computerPlay();
singleRound();
updateScore();
}
}
game();
必須の乱数漫画http://dilbert.com/strip/2001-10-25 – j08691
'game'では' computerPlay'から返された値で何もしません。それは意図的なのでしょうか? – Andy
あなたは 'computerPlay'を呼び出し続けますが、あなたのラウンドのスコアリングは一度だけ設定するグローバル変数' computerSelection'をチェックします(関数内のローカル 'computerSelection'はグローバルをシャドウします)。おめでとう!あなたは副作用が悪いことを学んだだけです。燃えた手が最高のものを教える。 –