Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package exercises
- import scala.collection.mutable.ListBuffer
- // Используя функции io.readLine и io.printLine напишите игру "Виселица"
- // Пример ввода и тест можно найти в файле src/test/scala/fintech/homework01/HangmanTest.scala
- // Тест можно запустить через в IDE или через sbt (написав в консоли sbt test)
- // Правила игры "Виселица"
- // 1) Загадывается слово
- // 2) Игрок угадывает букву
- // 3) Если такая буква есть в слове - они открывается
- // 4) Если нет - рисуется следующий элемент висельника
- // 5) Последней рисуется "веревка". Это означает что игрок проиграл
- // 6) Если игрок все еще жив - перейти к пункту 2
- // Пример игры:
- // Word: _____
- // Guess a letter:
- // a
- // Word: __a_a
- // Guess a letter:
- // b
- // +----
- // |
- // |
- // |
- // |
- // |
- // и т.д.
- class Hangman(io: IODevice)
- {
- def replaceLetters(list: ListBuffer[Int], letter: String, prWord: StringBuilder): Unit =
- {
- for (i <- prWord.indices)
- {
- if (list.contains(i))
- prWord.replace(i,i+1,letter)
- }
- io.printLine("Word: " + prWord.toString())
- }
- def play(inputWord: String): Unit = {
- try {
- val word = inputWord.toLowerCase
- var currentStage = 0
- val predictedWord = new StringBuilder(word.length)
- for (i <- 0 until word.length) {
- predictedWord.append("_")
- }
- io.printLine("Word: " + predictedWord.toString)
- var notEndGame = true
- while (notEndGame) {
- var currentLetter: String = ""
- io.printLine("Guess a letter:")
- currentLetter = io.readLine().toLowerCase
- var letterCountInWord = 0
- val letterPositions: ListBuffer[Int] = ListBuffer()
- for (i <- 0 until word.length) {
- if (word.charAt(i).toString == currentLetter) {
- letterCountInWord += 1
- letterPositions += i
- }
- if (i == word.length - 1 && letterCountInWord == 0) {
- io.printLine(stages(currentStage))
- //if (currentStage == 8)
- //Breaks.break()
- currentStage += 1
- io.printLine("Word: " + predictedWord.toString())
- }
- if (i == word.length - 1 && letterCountInWord != 0) {
- replaceLetters(letterPositions, currentLetter, predictedWord)
- }
- }
- if (currentStage == 8)
- {
- io.printLine("You are dead")
- notEndGame = false
- //Breaks.break()
- }
- if (predictedWord.toString() == word) {
- io.printLine("GG")
- notEndGame = false
- //Breaks.break()
- }
- }
- }
- catch
- {
- case e: Exception =>
- {
- e.printStackTrace(System.err)
- }
- }
- }
- val stages = List(
- """+----
- ||
- ||
- ||
- ||
- ||
- |""".stripMargin,
- """+----
- ||
- || O
- ||
- ||
- ||
- |""".stripMargin,
- """+----
- ||
- || O
- || |
- ||
- ||
- |""".stripMargin,
- """+----
- ||
- || O
- || |
- || /
- ||
- |""".stripMargin,
- """+----
- ||
- || O
- || |
- || / \
- ||
- |""".stripMargin,
- """+----
- ||
- || O
- || /|
- || / \
- ||
- |""".stripMargin,
- """+----
- ||
- || O
- || /|\
- || / \
- ||
- |""".stripMargin,
- """+----
- || |
- || O
- || /|\
- || / \
- ||
- |""".stripMargin
- )
- }
- trait IODevice {
- def printLine(text: String): Unit
- def readLine(): String
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement