Exit e-book
Show all chapters
21
Implementación del bucle del juego
21. 
Implementación del bucle del juego

Sign up to our Newsletter

Signing up to our newsletter allows you to read all our ebooks.

    Introducción a la Programación con Efectos Funcionales usando ZIO
    21

    Implementación del bucle del juego

    La implementación del bucle del juego usa las funcionalidades que hemos definido anteriormente:

    def gameLoop(oldState: State): ZIO[Console, IOException, Unit] =
      for {
        guess       <- renderState(oldState) *> getGuess
        newState    = oldState.addGuess(guess)
        guessResult = analyzeNewGuess(oldState, newState, guess)
        _ <- guessResult match {
              case GuessResult.Won =>
                putStrLn(s"Congratulations ${newState.name.name}! You won!") *> renderState(newState)
              case GuessResult.Lost =>
                putStrLn(s"Sorry ${newState.name.name}! You Lost! Word was: ${newState.word.word}") *>
                  renderState(newState)
              case GuessResult.Correct =>
                putStrLn(s"Good guess, ${newState.name.name}!") *> gameLoop(newState)
              case GuessResult.Incorrect =>
                putStrLn(s"Bad guess, ${newState.name.name}!") *> gameLoop(newState)
              case GuessResult.Unchanged =>
                putStrLn(s"${newState.name.name}, You've already tried that letter!") *> gameLoop(newState)
            }
      } yield ()

    Como podemos ver, lo que hace la función gameLoop es lo siguiente:

    • Muestra por consola el estado del juego y obtiene una letra por parte del jugador.
    • Se actualiza el estado del juego con la nueva letra adivinada por el jugador.
    • Se analiza la nueva letra adivinada por el jugador y:
      • Si el jugador ganó, se muestra un mensaje de felicitación y se muestra por última vez el estado del juego.
      • Si el jugador perdió, se muestra un mensaje indicando cuál era la palabra a adivinar y se muestra por última vez el estado del juego.
      • Si el jugador ha adivinado una letra correctamente pero aún no ganó el juego, se muestra un mensaje indicando que adivinó correctamente y se vuelve a llamar a gameLoop, con el estado actualizado del juego.
      • Si el jugador ha adivinado una letra incorrectamente pero aún no perdió el juego, se muestra un mensaje indicando que adivinó incorrectamente y se vuelve a llamar a gameLoop, con el estado actualizado del juego.
      • Si el jugador intenta una letra que ya había adivinado antes, se muestra un mensaje y se vuelve a llamar a gameLoop, con el estado actualizado del juego.

    Al final, gameLoop retorna un efecto ZIO que depende del módulo Console (esto es obvio porque necesita leer texto por teclado y escribir por consola), puede fallar con un IOException o terminar exitosamente con un valor Unit.

    PREVIOUS
    Chapter
    20
    NEXT
    Chapter
    22