2013-12-23 2 views
0

Ive сделал небольшую игрушку с ножничной ножкой с javascript. Есть две вещи, которые я хотел бы сделать, чтобы сделать игру немного лучше.Как сделать так, что для ножниц для каменной бумаги могут быть выбраны только допустимые варианты.

1) Если игрок дает ответ, кроме рока, бумаги или ножниц подсказки говорит «Пожалуйста, выберите между одним из трех вариантов: рок, бумаги или ножниц»

я внедрившие что-то вроде но это только один пробег. Я хотел бы получить подсказку, пока не будет указан один из трех ответов

2) Я бы хотел, чтобы игра начала запускать код сверху, если это ничья. Как я могу заставить программу начать с вершины снова?

Вот код

var userChoice = prompt("Do you choose rock, paper or scissors?"); 
if (userChoice === "rock") 
{} 
else if (userChoice === "paper"){} 
else if (userChoice === "scissors"){} 
else { 
    userChoice = prompt ("Please pick between one of the three options: rock, paper or scissors"); 

} 
var computerChoice = Math.random(); 
if (computerChoice < 0.34) { 
    computerChoice = "rock"; 
} else if(computerChoice <= 0.67) { 
    computerChoice = "paper"; 
} else { 
    computerChoice = "scissors"; 
} 
console.log("The computer's choice is" + " " + computerChoice); 
console.log("Your choice was " + userChoice); 
var compare = function(choice1 , choice2) 
{ 
    if (choice1 === choice2) 
    { 
    return "The result is a tie!"; 

    } 


if (choice1 === "rock") 
{ 
    if (choice2 === "scissors") 
    { 
     return "rock wins"; 
    } 
    else 
    { 
     return "paper wins"; 
    } 
} 
if (choice1 === "paper") 
{ 
    if (choice2 === "rock") 
    { 
     return "paper wins"; 
    } 
    else 
    { 
     return "scissors wins"; 
    } 
} 
if (choice1 === "scissors") 
{ 
    if (choice2 === "rock") 
    { 
     return "rock wins"; 
    } 
    else 
    { 
     return "scissors wins"; 
    } 
} 
}; 
compare(userChoice, computerChoice); 

ответ

8

Что вы делаете в этой программе, это только проверка «Условная инструкция». Существует еще одна конструкция для структурированного программирования, которая называется «Циклы»

В общем, по-человечески можно скопировать-вставить сегмент кода 1000 раз и, возможно, даже миллионы, но не бесконечно. Поэтому для таких случаев программисты используют Loops, которые начинаются с начального состояния, выполняют один и тот же код кода, пока выполняется данное условие, и следует за изменением состояния.

В этом случае вы можете использовать цикл while, поскольку это простейшая структура для таких сценариев. Он принимает только условие, для которого он много продолжает выполнять тело кода. Структура цикла while такова.

while (condition) { 
    <the code that you want it to keep executing> 
} 

Если мы разложим вашу программу на разные части, в ней есть в основном 2 части. 1. Возьмите вход 2. Проверьте правильность ввода. Если не принимать вход снова. Из этого вы можете легко увидеть, каково должно быть условие для вашего цикла.

«В то время как вход не действует»

Так как

while (the input is not valid/the userChoice is not rock or paper or scissors) { 
    take the input 
} 

Чтобы сделать свой цикл бесконечный вы можете использовать

while (true) { 
    take the input 
} 

Чтобы вырваться из этого бесконечного цикла, то использовать «break»; где-нибудь внутри. Итак, «перерыв»; внутри, если заявление будет выйти из этого цикла, как этот

while (true) { 
    if (condition) { 
     break; 
    } 
} 

Таким образом, если мы будем следовать вашему стилю проверки состояния мы получаем.

var userChoice = prompt("Do you choose rock, paper or scissors?"); 
while (true) { 
    if (userChoice === "rock") 
    {break;} 
    else if (userChoice === "paper"){break;} 
    else if (userChoice === "scissors"){break;} 
    else { 
     userChoice = prompt ("Please pick between one of the three options: rock, paper or scissors"); 
    } 
} 

Но использование «перерывов» - плохая практика программирования. Так почему бы нам не воспользоваться преимуществом «условия»?

var userChoice = prompt("Do you choose rock, paper or scissors?"); 
while (userChoice !== "rock" && userChoice !== "paper" && userChoice !== "scissors") { 
    userChoice = prompt("Please pick between one of the three options: rock, paper or scissors"); 
} 

И так как вы хотите, чтобы игра продолжалась вечно, мы можем поставить всю игру внутри петли вправо? Но это полностью отключит ваш браузер, и вы ничего не сможете сделать, пока этот цикл ждет вашего ответа. Итак, мы оставляем для себя выход? Почему бы нам не добавить еще одно условие: если пользователь набирает «EXIT», игра прекращается?

while (true) { 
var userChoice = prompt("Do you choose rock, paper or scissors?"); 

while (userChoice !== "rock" && userChoice !== "paper" && userChoice !== "scissors" && userChoice !== "EXIT") { 
    userChoice = prompt("Please pick between one of the three options: rock, paper or scissors"); 

} 
if (userChoice === "EXIT") { 
    console.log("Thanks for playing :)"); 
    break; 
} 
var computerChoice = Math.random(); 
if (computerChoice < 0.34) { 
    computerChoice = "rock"; 
} else if(computerChoice <= 0.67) { 
    computerChoice = "paper"; 
} else { 
    computerChoice = "scissors"; 
} 
console.log("The computer's choice is" + " " + computerChoice); 
console.log("Your choice was " + userChoice); 
var compare = function(choice1 , choice2) 
{ 
    if (choice1 === choice2) 
    { 
    return "The result is a tie!"; 

    } 
if (choice1 === "rock") 
{ 
    if (choice2 === "scissors") 
    { 
     return "rock wins"; 
    } 
    else 
    { 
     return "paper wins"; 
    } 
} 
if (choice1 === "paper") 
{ 
    if (choice2 === "rock") 
    { 
     return "paper wins"; 
    } 
    else 
    { 
     return "scissors wins"; 
    } 
} 
if (choice1 === "scissors") 
{ 
    if (choice2 === "rock") 
    { 
     return "rock wins"; 
    } 
    else 
    { 
     return "scissors wins"; 
    } 
} 
}; 
compare(userChoice, computerChoice); 
} 

Теперь вы можете сделать это гораздо проще изменить позже (для вас и других), разбивая вашу программу вниз в функции именно так, как вы сделали для Compare части. Тогда принятие решения по userInput будет намного более надежным процессом.

function take_user_input() { 
    var userChoice = prompt("Do you choose rock, paper or scissors?"); 
    while (userChoice !== "rock" && userChoice !== "paper" && userChoice !== "scissors" && userChoice !== "EXIT") { 
     userChoice = prompt("Please pick between one of the three options: rock, paper or scissors"); 
    } 
    return userChoice; 
} 


function play(userChoice) { 

    var computerChoice = Math.random(); 
    if (computerChoice < 0.34) { 
     computerChoice = "rock"; 
    } else if(computerChoice <= 0.67) { 
     computerChoice = "paper"; 
    } else { 
     computerChoice = "scissors"; 
    } 
    console.log("The computer's choice is" + " " + computerChoice); 
    console.log("Your choice was " + userChoice); 
    var compare = function(choice1 , choice2) 
    { 
     if (choice1 === choice2) 
     { 
     return "The result is a tie!"; 

     } 
    if (choice1 === "rock") 
    { 
     if (choice2 === "scissors") 
     { 
      return "rock wins"; 
     } 
     else 
     { 
      return "paper wins"; 
     } 
    } 
    if (choice1 === "paper") 
    { 
     if (choice2 === "rock") 
     { 
      return "paper wins"; 
     } 
     else 
     { 
      return "scissors wins"; 
     } 
    } 
    if (choice1 === "scissors") 
    { 
     if (choice2 === "rock") 
     { 
      return "rock wins"; 
     } 
     else 
     { 
      return "scissors wins"; 
     } 
    } 
    }; 
    compare(userChoice, computerChoice); 
} 

while (true) { 
    var userChoice = take_user_input(); 

    if (userChoice === "EXIT") { 
     console.log("Thanks for playing :)"); 
     break; 
    } else { 
     play(userChoice); 
    } 
} 

И после этого, вы можете изучить больше на чтение DOM элементов и их модификации с помощью JQuery/модификации HTML с помощью JavaScript. :) Но это приносит совершенно новую тему. Но я предлагаю вам выглядеть так. Никто не хотел бы играть в Rock Paper Scissors, используя Console Log, когда они смогут сделать это с помощью графического интерфейса пользователя.

+0

спасибо. Этот ответ был чрезвычайно полезен –

2

Вы можете обернуть игру в функцию, которую вы затем позвонить в любой момент. Возможно, поместите начальную подсказку в ее собственную функцию, если она действительна, вызовите функцию игры.

function getUserInput() 
{ 
    // put prompt and validation logic here, then call when its a tie 
    // You might try consolidating the validation logic with regular expression: 
    // This returns an array of matches if only rock, paper or scissors was entered. 
     userChoice.match(/(rock|paper|scissors)/) 

    if(userChoice) 
    { 
     runGameLogic(); 
    } 

} 
Смежные вопросы