Всем доброго времени суток! Недавно начала изучать Kotlin. Слышала много раз, что надо публиковать свой код, чтобы улучшить свои навыки, вот и решила выложить свой код.
Я написала игру "Камень, ножницы, бумага", где пользователь играет с компьютером. В начале у пользователя спрашивают, хочет ли он поиграть в игру. Если пользователь отказывается, соответственно программа завершается. Если пользователь соглашается, то появляется запись с вариантами ответа, где пользователь должен ввести цифры от 1 до 3 чтобы сделать выбор между камнем, ножницами и бумагой. Далее идет сравнение ответов пользователя и компьютера, чтобы определить кто побдил или получается ничья. После сравнения в командную строку выводится результат. После результата у пользователся снова спрашивают, хочет ли он сыграть еще раз. Таким образом все повторяется до тех пор, пока пользователь не ответит отрицательно.
Ниже я прикрепила код игры чтобы вы посмотрели и подсказали где у меня ошибки, читабельный ли код, достаточно ли информации в названиях переменных (тк я слышала, что называния должны быть как можно более информативными).
Заранее благодарю за ваше внимание!
val options = mapOf(1 to "Rock", 2 to "Paper", 3 to "Scissors")
/*варианты ответов на вопросы о проведении игры
с ними будет происходить сравнение ответа пользователя*/
val positiveAnswer = "y"
val negativeAnswer = "n"
//запрос на проведение игры
println("Hi! Here is the \"Rock.Paper.Scissors.\" game. Do you want to play? [Y] or [N]")
//ответ пользователя
var playGameAnswer = readLine()
//зацикливаю программу до тех пор, пока пользователь не введет корректный ответ
while ((negativeAnswer != playGameAnswer) || (positiveAnswer != playGameAnswer))
{
when (playGameAnswer)
{
//если польователь отвечает положительно, то начинается игра
positiveAnswer ->
{
val gameChose = getGameChose(options)
val userChoice = getUserChose(options)
getResult(gameChose, userChoice)
println("Do you want to play any more?")
playGameAnswer = readLine()
}
//при отрицательном ответе программа завершится
negativeAnswer ->
{
println("Oh..so sad. So, goodbye")
break
}
//в случае некорректного ввода будет задан повторный вопрос с указанием вариантов ответа
else ->
{
println("Please, enter [Y] or [N]")
playGameAnswer = readLine()
}
}
}
}
/**
* Функция сравнения и вывода результата игры
*/
fun getResult(gameChose: String, userChoice: String) {
when
{
userChoice == gameChose -> println("Tie")
(userChoice == "1" && gameChose == "3") ||
(userChoice == "2" && gameChose == "1") ||
(userChoice == "3" && gameChose == "2") ->
println("You win!")
else -> println("You lose.")
}
/**
* Функция для ввода варианта ответа пользователем
*/
fun getUserChose(options: Map<Int, String>): String {
//флаг с помощью которого будем делать зацикливание
var isValidChoice = false
var userChoice = ""
//вывод на экран вариантов ответа
println("Chose one of this (write a number): ")
for ((key, value) in options)
{
println("$key. $value")
}
while (!isValidChoice)
{
val userInput = readLine()
//обрабатываю исключение в случае ввода букв, а не цифр
try
{
if (userInput != null && options.contains(userInput.toInt()))
{
isValidChoice = true
userChoice = userInput
}
if (userInput != null)
{
if (!options.contains(userInput.toInt()))
println("Please enter 1 or 2 or 3")
}
}
//в случае ввода букв, выведется сообщение
catch (e: Exception)
{
println("Please enter 1 or 2 or 3")
}
}
return userChoice
}
/**
* Функция рандомного выбора компьютера
*/
fun getGameChose(options: Map<Int, String>): String {
val value = options.keys
val random = (1 + Math.random() * value.size).toInt()
when (random) {
1 -> options[1]
2 -> options[2]
3 -> options[3]
}
return random.toString()
}