2012-02-25 16 views
0

私はJavascriptのロックペーパーハサミアプリケーションを書いていますが、以前はアプリケーションを書かなかったことがあります。誰か助けてくれますか?岩の場合、常に紙の場合は のドローを出力し、常に鋏の場合は のロスを出力し、常に勝利を出力します。私のロックペーパーはさみに何が問題なのですか?

<script type="text/javascript"> 
var Rock; 
var Paper; 
var Scissors; 
var choice = prompt("Specify your choice of 'Rock', 'Paper', or 'Scissors'."); 
var game = [Rock, Paper, Scissors]; 

document.write("Rock."); 
document.write("Paper.."); 
document.write("Scissors..."); 

var result = game[Math.floor(Math.random() * game.length)]; 

if (result === Rock) { 
if (choice === "Rock") { 
document.write("It's a draw! Try again."); 
} 
else if (choice === "Paper") { 
document.write("You lose! Unlucky."); 
} 
else if (choice === "Scissors") { 
document.write("You win! Nice."); 
}} 

else if (result === Paper) { 
if (choice === "Rock") { 
document.write("You win! Nice."); 
} 
else if (choice === "Paper") { 
document.write("It's a draw! Try again."); 
} 
else if (choice === "Scissors") { 
document.write("You lose! Unlucky."); 
}} 

else if (result === Scissors) { 
if (choice === "Rock") { 
document.write("You lose! Unlucky."); 
} 
else if (choice === "Paper") { 
document.write("You win! Nice."); 
} 
else if (choice === "Scissors") { 
document.write("It's a draw! Try again."); 
}} 
</script> 

答えて

4

RockPaperScissorsはすべてundefinedているので、彼らは常に等しくなります。それらを何かに設定すればうまくいくはずです。

var Rock = 'Rock'; 
var Paper = 'Paper'; 
var Scissors = 'Scissors'; 
3

あなたgameアレイは、実際には3つの等しい値の配列である:var Rockvar Papervar Scissorsと同じである:彼らは値を持たない、すなわち、すべての未定義です。

var Rock=1,var Paper=2var Scissors=3などの値を割り当てたばかりの場合は、プログラムが動作するはずです。あなたはちょうどここで文字列を使用しているかもしれないと言いましたが、配列は["Rock", "Paper", "Scissors"]でなければなりません。 choice変数のように、文字列に対して再度テストするだけです。

編集:

楽しみのためだけに、ここで私は物事が数字でより簡単であることについて以下のコメントで意味したものです:

要するに
var words = ['rock', 'paper', 'scissors']; 
var played = words.indexOf(choice); 
// if played is -1 here, your player typed in something other than the 3 words you accept 

var result = Math.floor(Math.random() * game.length); 
var outcome = (played - result + 2) % 3; 
var message 
if (outcome == 2) { 
    message = "It's a draw! Try again."; 
} else if (outcome == 1) { 
    message = "You lose! Unlucky."; 
} else { 
    message = "You win! Nice."); 
} 
document.write(message); 
+0

ありがとうございました – loucidity

+0

プロンプトで文字列全体を入力することを期待している限り、 '文字列の配列'を使用し、数字ではない方が良いです。 – raina77ow

+0

まあ、まあまあです。もし私が上記の論理を書かなければならないなら、私はその声明を逆にするでしょう:私たちが数字を扱うなら、論理ははるかに簡単でしょう。 –

1

、あなたは文字列リテラルと割り当てられていない変数を配合しているので、それはですあなたのアプリケーションで。そのように、あなたの岩、紙とはさみの前後に引用符を置く:

var game = ['Rock', 'Paper', 'Scissors']; 

...そしてそれらが必要ていないとして、完全に変数を取り除くそれは修正するために、むしろ簡単です。 )

何が起こっているのは、次のとおりです。次の3つの変数を宣言

1) - 岩、紙とはさみを、それらに任意の値を代入していないので、彼らはundefinedをご利用いただけます。次に、それらの値から配列を作ります - 本質的には、3つの同一要素の配列、未定義です。

2)次に、ランダムな値を生成しようとしますが、undefinedで終わります。したがって、result、常にundefinedです。

3)undefined(結果)がundefined(ロック)と厳密に等しいため、最初のifチェックが成功します。結果は明らかです:「紙」(文字列)が勝ち、「はさみ」(やはり文字列)が失われ、「ロック」(それも文字列ですか?)が引き出します。

最後の編集:undefined'undefined'(文字列)を混同しないでください。これらは異なっています。例えば、前者は偽であり、後者はそうではありません。

関連する問題