@@ -6,11 +6,11 @@ import cats.syntax.all._
66import scala .io .StdIn
77import scala .util .matching .Regex
88
9- object GameRunner extends IOApp {
9+ object GameRunner extends IOApp . Simple {
1010
11- val p1 = Player ('X' , " Player1" )
12- val p2 = Player ('O' , " Player2" )
13- val selectColumn : Regex = " ([1-7])" .r
11+ private val p1 = Player ('X' , " Player1" )
12+ private val p2 = Player ('O' , " Player2" )
13+ private val selectColumn : Regex = " ([1-7])" .r
1414
1515 def dropCoin (b : Board , currentPlayer : Player , column : String ): Either [String , Board ] = column match {
1616 case selectColumn(c) => b.play(currentPlayer, c.toInt)
@@ -19,22 +19,19 @@ object GameRunner extends IOApp {
1919
2020 def swapPlayer (p : Player ): Player = if (p == p1) p2 else p1
2121
22- def eval (command : String , board : Board , p : Player ): IO [ExitCode ] = IO .suspend {
22+ def eval (command : String , board : Board , p : Player ): IO [Unit ] =
2323 if (command == null ) IO .pure(ExitCode .Success ) else dropCoin(board, p, command) match {
2424 case Left (err) => IO (println(s " Err: $err" )) *> loop(board, p)
2525 case Right (b) if b.gameState == Playing => IO (println(b.draw())) *> loop(b, swapPlayer(p))
26- case Right (b) => IO (println(s " Game finished as ${b.gameState} : \n ${b.draw()}" )) *> IO .pure( ExitCode . Success )
26+ case Right (b) => IO (println(s " Game finished as ${b.gameState} : \n ${b.draw()}" )) *> IO .unit
2727 }
28- }
2928
30- def loop (board : Board , p : Player ): IO [ExitCode ] = IO .suspend {
29+ def loop (board : Board , p : Player ): IO [Unit ] =
3130 for {
3231 _ <- IO (print(s " > Choose a column ${p.name}: " ))
3332 line <- IO (StdIn .readLine)
34- exitCode <- eval(line, board, p)
35- } yield exitCode
36- }
33+ _ <- eval(line, board, p)
34+ } yield ()
3735
38- def run (args : List [String ]): IO [ExitCode ] = loop(new Board (), p1)
39- .guaranteeCase(_ => IO (println(" Bye!" )))
36+ def run : IO [Unit ] = loop(new Board (), p1)
4037}
0 commit comments