Advertisement
Guest User

Untitled

a guest
Feb 28th, 2020
245
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.16 KB | None | 0 0
  1. package exercises
  2.  
  3. import scala.collection.mutable.ListBuffer
  4. // Используя функции io.readLine и io.printLine напишите игру "Виселица"
  5. // Пример ввода и тест можно найти в файле src/test/scala/fintech/homework01/HangmanTest.scala
  6. // Тест можно запустить через в IDE или через sbt (написав в консоли sbt test)
  7.  
  8. // Правила игры "Виселица"
  9. // 1) Загадывается слово
  10. // 2) Игрок угадывает букву
  11. // 3) Если такая буква есть в слове - они открывается
  12. // 4) Если нет - рисуется следующий элемент висельника
  13. // 5) Последней рисуется "веревка". Это означает что игрок проиграл
  14. // 6) Если игрок все еще жив - перейти к пункту 2
  15.  
  16. // Пример игры:
  17.  
  18. // Word: _____
  19. // Guess a letter:
  20. // a
  21. // Word: __a_a
  22. // Guess a letter:
  23. // b
  24. // +----
  25. // |
  26. // |
  27. // |
  28. // |
  29. // |
  30.  
  31. // и т.д.
  32.  
  33. class Hangman(io: IODevice)
  34. {
  35. def replaceLetters(list: ListBuffer[Int], letter: String, prWord: StringBuilder): Unit =
  36. {
  37. for (i <- prWord.indices)
  38. {
  39. if (list.contains(i))
  40. prWord.replace(i,i+1,letter)
  41. }
  42. io.printLine("Word: " + prWord.toString())
  43. }
  44.  
  45. def play(inputWord: String): Unit = {
  46. try {
  47. val word = inputWord.toLowerCase
  48. var currentStage = 0
  49. val predictedWord = new StringBuilder(word.length)
  50. for (i <- 0 until word.length) {
  51. predictedWord.append("_")
  52. }
  53.  
  54. io.printLine("Word: " + predictedWord.toString)
  55.  
  56. var notEndGame = true
  57. while (notEndGame) {
  58. var currentLetter: String = ""
  59. io.printLine("Guess a letter:")
  60. currentLetter = io.readLine().toLowerCase
  61.  
  62. var letterCountInWord = 0
  63. val letterPositions: ListBuffer[Int] = ListBuffer()
  64. for (i <- 0 until word.length) {
  65. if (word.charAt(i).toString == currentLetter) {
  66. letterCountInWord += 1
  67. letterPositions += i
  68. }
  69. if (i == word.length - 1 && letterCountInWord == 0) {
  70. io.printLine(stages(currentStage))
  71. //if (currentStage == 8)
  72. //Breaks.break()
  73. currentStage += 1
  74. io.printLine("Word: " + predictedWord.toString())
  75. }
  76. if (i == word.length - 1 && letterCountInWord != 0) {
  77. replaceLetters(letterPositions, currentLetter, predictedWord)
  78. }
  79.  
  80. }
  81.  
  82. if (currentStage == 8)
  83. {
  84. io.printLine("You are dead")
  85. notEndGame = false
  86. //Breaks.break()
  87. }
  88. if (predictedWord.toString() == word) {
  89. io.printLine("GG")
  90. notEndGame = false
  91. //Breaks.break()
  92. }
  93. }
  94. }
  95. catch
  96. {
  97. case e: Exception =>
  98. {
  99. e.printStackTrace(System.err)
  100. }
  101. }
  102. }
  103.  
  104. val stages = List(
  105. """+----
  106. ||
  107. ||
  108. ||
  109. ||
  110. ||
  111. |""".stripMargin,
  112. """+----
  113. ||
  114. || O
  115. ||
  116. ||
  117. ||
  118. |""".stripMargin,
  119. """+----
  120. ||
  121. || O
  122. || |
  123. ||
  124. ||
  125. |""".stripMargin,
  126. """+----
  127. ||
  128. || O
  129. || |
  130. || /
  131. ||
  132. |""".stripMargin,
  133. """+----
  134. ||
  135. || O
  136. || |
  137. || / \
  138. ||
  139. |""".stripMargin,
  140. """+----
  141. ||
  142. || O
  143. || /|
  144. || / \
  145. ||
  146. |""".stripMargin,
  147. """+----
  148. ||
  149. || O
  150. || /|\
  151. || / \
  152. ||
  153. |""".stripMargin,
  154. """+----
  155. || |
  156. || O
  157. || /|\
  158. || / \
  159. ||
  160. |""".stripMargin
  161. )
  162. }
  163.  
  164. trait IODevice {
  165. def printLine(text: String): Unit
  166. def readLine(): String
  167. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement