Skip to content

Commit 7c4f086

Browse files
committed
Change TUI printing logic
1 parent cd1c9a7 commit 7c4f086

File tree

8 files changed

+44
-37
lines changed

8 files changed

+44
-37
lines changed

.gitignore

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,4 +29,6 @@ metals.sbt
2929
# IDEA
3030
.idea
3131
.idea_modules
32-
/.worksheet/
32+
/.worksheet/
33+
34+
out/artifacts/
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
Manifest-Version: 1.0
2+
Main-Class: de.htwg.se.set.Set
3+

src/main/scala/de/htwg/se/set/Set.scala

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,10 @@ import de.htwg.se.set.view.{Gui, Tui}
77

88
import java.awt.GraphicsEnvironment
99

10-
@main
11-
def main(): Unit =
12-
val injector = Guice.createInjector(new SetModule)
13-
val controller = injector.getInstance(classOf[IController])
14-
if !GraphicsEnvironment.isHeadless then Gui(controller)
15-
Tui(controller)
10+
object Set:
11+
12+
def main(args: Array[String]): Unit =
13+
val injector = Guice.createInjector(new SetModule)
14+
val controller = injector.getInstance(classOf[IController])
15+
if !GraphicsEnvironment.isHeadless then Gui(controller)
16+
Tui(controller)

src/main/scala/de/htwg/se/set/controller/IController.scala

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ trait IController extends Observable:
1313
def game: IGame
1414

1515
def changeState(s: IState): Unit
16-
def printState(): Unit
16+
def currentState: String
1717
def actionFromInput(input: String): IAction
1818
def handleAction(action: IAction): Unit
1919
def snapshot: Snapshot
@@ -52,8 +52,7 @@ trait ISnapshot:
5252
def toJson: JsValue
5353

5454
trait IState:
55-
56-
def print(): Unit
55+
5756
def message: String
5857
def actionFromInput(input: String): IAction
5958
def handleInput(input: IUserInput): IAction

src/main/scala/de/htwg/se/set/controller/controller/Controller.scala

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import play.api.libs.json.Json
77

88
import java.nio.charset.StandardCharsets
99
import java.nio.file.{Files, Paths}
10-
import java.security.MessageDigest
1110
import java.time.LocalDateTime
1211
import java.time.format.DateTimeFormatter
1312
import scala.xml.{Elem, PrettyPrinter, Utility, XML}
@@ -17,12 +16,12 @@ case class Controller @Inject() (var settings: ISettings, var game: IGame) exten
1716
private val undoManager = new UndoManager
1817
private var state: IState = SettingsState(this)
1918

19+
override def currentState: String = state.toString
20+
2021
override def changeState(s: IState): Unit =
2122
state = s
2223
notifyObservers(Event.STATE_CHANGED)
2324

24-
override def printState(): Unit = state.print()
25-
2625
override def actionFromInput(input: String): IAction = state.actionFromInput(input)
2726

2827
override def handleAction(action: IAction): Unit =

src/main/scala/de/htwg/se/set/controller/controller/State.scala

Lines changed: 23 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,6 @@ import scala.xml.Elem
99

1010
private class State extends IState:
1111

12-
def print(): Unit = ()
13-
1412
def message: String = ""
1513

1614
def actionFromInput(input: String): IAction = NoAction()
@@ -28,10 +26,10 @@ private class State extends IState:
2826

2927
case class SettingsState(controller: IController) extends State:
3028

31-
override def print(): Unit =
32-
println(PrintUtil.bold("1") + " Start game")
33-
println(PrintUtil.bold("2") + " Change number of players")
34-
println(PrintUtil.bold("3") + " Switch to " + (if controller.settings.easy then "normal" else "easy") + " mode")
29+
override def toString: String =
30+
PrintUtil.bold("1") + " Start game" + "\n" +
31+
PrintUtil.bold("2") + " Change number of players" + "\n" +
32+
PrintUtil.bold("3") + " Switch to " + (if controller.settings.easy then "normal" else "easy") + " mode"
3533

3634
override def actionFromInput(input: String): IAction =
3735
InputUtil.intInput(input, 1, 3, controller.canUndo, controller.canRedo, false) match
@@ -42,7 +40,7 @@ case class SettingsState(controller: IController) extends State:
4240

4341
case class ChangePlayerCountState(controller: IController) extends State:
4442

45-
override def print(): Unit = println("Enter number of players:")
43+
override def toString: String = "Enter number of players:"
4644

4745
override def actionFromInput(input: String): IAction =
4846
InputUtil.intInput(input, 1, 10, controller.canUndo, controller.canRedo, false) match
@@ -51,9 +49,11 @@ case class ChangePlayerCountState(controller: IController) extends State:
5149

5250
case class SelectPlayerState(controller: IController) extends State:
5351

54-
override def print(): Unit =
52+
override def toString: String =
5553
if !controller.settings.singlePlayer then
56-
println("Input player who found a SET (e.g. 1) or 0 if no SET can be found:")
54+
"Input player who found a SET (e.g. 1) or 0 if no SET can be found:"
55+
else
56+
""
5757

5858
override def message: String = "Select player who found a SET or press ADD CARDS if no SET can be found."
5959

@@ -69,18 +69,18 @@ case class SelectPlayerState(controller: IController) extends State:
6969
case other => super.handleInput(other)
7070

7171
case class GameState(controller: IController) extends State:
72+
73+
override def toString: String =
74+
if controller.settings.singlePlayer then
75+
"Select 3 cards for a SET (e.g. A1 B2 C3):"
76+
else
77+
"Player " + player.number + ", select 3 cards for a SET (e.g. A1 B2 C3):"
7278

7379
private def player =
7480
controller.game.selectedPlayer match
7581
case Some(p) => p
7682
case None => throw IllegalStateException("No player selected")
7783

78-
override def print(): Unit =
79-
if controller.settings.singlePlayer then
80-
println("Select 3 cards for a SET (e.g. A1 B2 C3):")
81-
else
82-
println("Player " + player.number + ", select 3 cards for a SET (e.g. A1 B2 C3):")
83-
8484
override def message: String =
8585
if controller.settings.singlePlayer then
8686
"Select 3 cards for a SET."
@@ -95,11 +95,14 @@ case class GameState(controller: IController) extends State:
9595

9696
case class GameEndState(controller: IController) extends State:
9797

98-
override def print(): Unit =
99-
println("\n" + PrintUtil.yellow(PrintUtil.bold("All SETs found!")))
100-
if !controller.settings.singlePlayer then
101-
controller.game.players.sortBy(player => (-player.sets.length, player.number)).foreach(player => println(player))
102-
println("\nType f to finish:")
98+
override def toString: String =
99+
val players = controller.game.players
100+
.sortBy(player => (-player.sets.length, player.number))
101+
.map(player => player.toString)
102+
.mkString("\n")
103+
"\n" + PrintUtil.yellow(PrintUtil.bold("All SETs found!"))
104+
+ (if !controller.settings.singlePlayer then "\n" + players else "")
105+
+ "\nType f to finish:"
103106

104107
override def actionFromInput(input: String): IAction =
105108
InputUtil.finishInput(input, controller.canUndo, controller.canRedo) match

src/main/scala/de/htwg/se/set/model/game/Grid.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ case class Grid(columns: Int, cards: List[ICard], easy: Boolean) extends IGrid:
1010
private def columnWidth: Int = if easy then 3 else 4
1111

1212
private def legend(columns: Int): String =
13-
" " + (65 until 65 + columns).map(_.toChar).map("" + _ + (" " * (columnWidth - 1))).mkString
13+
">>" + (65 until 65 + columns).map(_.toChar).map("" + _ + (">" * (columnWidth - 1))).mkString
1414

1515
private def line(columns: Int): String = "──" + ("" + "" * columnWidth) * columns
1616

src/main/scala/de/htwg/se/set/view/Tui.scala

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package de.htwg.se.set.view
22

3-
import de.htwg.se.set.controller.controller.InvalidAction
3+
import de.htwg.se.set.controller.controller.{InvalidAction, NoAction}
44
import de.htwg.se.set.controller.{Event, IAction, IController}
55
import de.htwg.se.set.util.{Observer, PrintUtil}
66

@@ -13,7 +13,7 @@ case class Tui(controller: IController) extends Observer:
1313

1414
println(PrintUtil.bold("Welcome to the SET Game!"))
1515
println(controller.settingsToString)
16-
controller.printState()
16+
println(controller.currentState)
1717
loop()
1818

1919
@tailrec
@@ -34,5 +34,5 @@ case class Tui(controller: IController) extends Observer:
3434
case Event.SETTINGS_CHANGED => println(controller.settingsToString)
3535
case Event.CARDS_CHANGED => println(controller.gameToString)
3636
case Event.SETTINGS_OR_GAME_CHANGED => println(controller)
37-
case Event.STATE_CHANGED => controller.printState()
37+
case Event.STATE_CHANGED => println(controller.currentState)
3838
case _ =>

0 commit comments

Comments
 (0)