{"id":14286,"url":"\/distributions\/14286\/click?bit=1&hash=d1e315456c2550b969eff5276b8894057db7c9f3635d69a38d108a0d3b909097","hash":"d1e315456c2550b969eff5276b8894057db7c9f3635d69a38d108a0d3b909097","title":"\u041f\u043e\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0430\u0434 \u043a\u0440\u0443\u043f\u043d\u0435\u0439\u0448\u0438\u043c\u0438 \u0418\u0422-\u043f\u0440\u043e\u0435\u043a\u0442\u0430\u043c\u0438 \u0441\u0442\u0440\u0430\u043d\u044b","buttonText":"","imageUuid":""}

Пишущий да обрящет. Часть 2

Продолжаем выяснять, кто сильнее камень или Спок

Если пропустили первую часть реккомендую ознакомится. А мы продолжаем.

Ранее мы запустили программу и предоставили выбрать оружие нашему ЭВМ. Сейчас попробуем спросить у пользователя, чем же он хочет биться.

fun getUserChoice (option: Array<String>): String { var isValidChoice = false var userChoice = "" // создаем функцию с названием getUserChoice и переменную option с типом строка создаем внутри две переменные - булевую со значением false и userChoice
while (!isValidChoice) { //зацикливаем выражение, оно будет выполняться, пока isValidChoice не станет true print("Please enter one of the following:") //печатаем текст заключенный в ковычках for (item in option) print(" $item") // цикл for переберает все элементы в массиве и выводит на печать println(".") // печать точки о_О val userPrint = readLine() // присваиваем переменной userPrint значение readLine() это в свою очередь присвоит значение введенное пользовалтелем if (userPrint != null && userPrint in option) { isValidChoice = true userChoice = userPrint } // выражение if проверяет, что значение userPrint не null и соответствует одному из вариантов в массиве option и если все в порядке значению userChoice присваивается значение userPrint, а isValidChoice становится true прерывая цикл if (!isValidChoice) println("You must enter a valid choice.") } // выражение if выводит на печать строку, если isValidChoice false и цикл запускается снова } return userChoice //возвращаем значение userChoice равное теперь введенному игроком значению }

Что имеем на данный момент. Компьютер выбирает случайным образом вариант, например Paper. Пользователь вводит в консоль вариант paper. Из за неверного регистра, цикл запускается снова и пользователь вводит верное значение Paper. Теперь нам необходимо сравнить два варианта и определить победителя.

Для этого создаем новую функцию printResult

printResult(computerChoice, userChoice) //Эта строка лежит в main и передает выбор игрока и компьютера fun printResult (PC: String, USER: String) { val result: String if (PC == USER) result = "Tie" // Если выбор совпадает - ничья else if ((USER == "Paper" && (PC == "Rock" || PC == "Spock")) || // если пользователь выбрал Paper, а ЭВМ Rock или Spock то пользователь победил. Дальше перебираем варианты, когда пользователь побеждает. (USER == "Rock" && (PC == "Scissors" || PC == "Lizard")) || (USER == "Scissors" && (PC == "Paper" || PC == "Lizard")) || (USER == "Spock" && (PC == "Rock" || PC == "Scissors")) || (USER == "Lizard" && (PC == "Paper" || PC == "Spock"))) result = "You Win!" else result = "You lose!" //если не побеждает, то проигрывает println("You chose $USER. I chose $PC. $result") // выводит результат на печать }

Полный код приложения:

fun main () { val options = arrayOf("Paper", "Rock", "Scissors", "Lizard", "Spock") val computerChoice = getComputerChoice(options) val userChoice = getUserChoice(options) printResult(computerChoice, userChoice) } fun getComputerChoice (comp: Array<String>) = comp[(Math.random() * comp.size).toInt()] fun getUserChoice (option: Array<String>): String { var isValidChoice = false var userChoice = "" while (!isValidChoice) { print("Please enter one of the following:") for (item in option) print(" $item") println(".") val userPrint = readLine() if (userPrint != null && userPrint in option) { isValidChoice = true userChoice = userPrint } if (!isValidChoice) println("You must enter a valid choice.") } return userChoice } fun printResult (PC: String, USER: String) { val result: String if (PC == USER) result = "Tie" else if ((USER == "Paper" && (PC == "Rock" || PC == "Spock")) || (USER == "Rock" && (PC == "Scissors" || PC == "Lizard")) || (USER == "Scissors" && (PC == "Paper" || PC == "Lizard")) || (USER == "Spock" && (PC == "Rock" || PC == "Scissors")) || (USER == "Lizard" && (PC == "Paper" || PC == "Spock"))) result = "You Win!" else result = "You lose!" println("You chose $USER. I chose $PC. $result") }

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

0
Комментарии
-3 комментариев
Раскрывать всегда