2012-02-25 6 views
0

저는 자바 스크립트 바위 종이 가위 응용 프로그램을 쓰고 있습니다.하지만 전에 응용 프로그램을 작성한 적이 없습니다. 누구든지 나를 도울 수 있습니까? Rock의 경우, 항상 Paper에 대해 의 추첨을 출력하고, 항상 가위에 대해 의 손실을 출력합니다. 항상 가위를 출력합니다.가위 바위 가위에 무슨 문제가 있습니까?

<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

Rock, PaperScissors 모든 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']; 

... 그들이 필요하지 않을로 완전히 변수를 제거 그것은 해결하기 위해 오히려 간단합니다.)

무슨 일인지 것은 : 당신은 세 가지 변수를 선언

1) - 락, 종이와 가위를하지만, 그들에게 어떤 값을 할당하지 않는, 그래서 그들은 undefined을 유지. 그런 다음 그 값에서 배열을 만듭니다. 기본적으로 정의되지 않은 세 개의 동일한 요소로 이루어진 배열입니다.

2) 그런 다음 임의의 값을 생성하려고 시도하지만 그 배열에 다른 어떤 것도 없으므로 undefined으로 끝납니다. 따라서 result이며 항상undefined입니다.

3) undefined (결과)은 정확히 undefined (잠금)과 같기 때문에 첫 번째 if 검사가 성공합니다. 결과는 분명합니다 : "종이"(문자열)가 이기고, "가위"(다시 문자열)가 사라지고 '록'(나는 문자열도 언급 했습니까?)이 그립니다.

최종 편집 : undefined'undefined' (문자열)을 혼동하지 마십시오. 이것들 역시 다릅니다 : 예를 들어 전은 위선입니다. 후자는 그렇지 않습니다.

관련 문제