diff --git a/GameHandler/Extensions/GameServiceExtension.cs b/GameHandler/Extensions/GameServiceExtension.cs
index 94fcb2f..a3c93c5 100644
--- a/GameHandler/Extensions/GameServiceExtension.cs
+++ b/GameHandler/Extensions/GameServiceExtension.cs
@@ -1,5 +1,6 @@
using GameHandler.Exceptions;
using GameModel.Contract;
+using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
@@ -41,5 +42,11 @@ namespace GameHandler.Extensions
return res;
}
+
+ public static string GetJson(this GameService gameService)
+ {
+ string json = JsonConvert.SerializeObject(gameService.GameModel, Formatting.Indented);
+ return json;
+ }
}
}
diff --git a/GameHandler/GameHandler.csproj b/GameHandler/GameHandler.csproj
index 044def4..3a5ec60 100644
--- a/GameHandler/GameHandler.csproj
+++ b/GameHandler/GameHandler.csproj
@@ -6,6 +6,10 @@
enable
+
+
+
+
diff --git a/GameHandler/GameService.cs b/GameHandler/GameService.cs
index cbd0401..3183ca3 100644
--- a/GameHandler/GameService.cs
+++ b/GameHandler/GameService.cs
@@ -21,7 +21,9 @@ namespace GameHandler
private bool _isStarted = false;
private IGameHandler _gh;
private ThrowHandler _th;
+ private ExpenseHandler _eh;
private GameState _lastState;
+ public GameState GameModel { get { return _lastState; } }
public GameService()
{
@@ -59,6 +61,7 @@ namespace GameHandler
var gm = _gh.InitGameModel(playerIds, gameSettings);
_th = new ThrowHandler();
+ _eh = new ExpenseHandler();
var throwState = ThrowState.Create(_gh.ThrowMode(), _gh.ThrowsPerRount());
_lastState = GameState.Create(throwState, _gh.GetCurrentPlayerId(gm), gm);
@@ -82,7 +85,7 @@ namespace GameHandler
// todo: update expense model
- _lastState = _lastState with { ThrowState = throwState, GameModel = gameModel };
+ _lastState = _lastState with { ThrowState = throwState, GameModel = gameModel, NextPlayerId = _gh.GetCurrentPlayerId(gameModel) };
return _lastState ;
}
diff --git a/KoogleCli/KoogleCli.csproj b/KoogleCli/KoogleCli.csproj
index a502f8c..c235076 100644
--- a/KoogleCli/KoogleCli.csproj
+++ b/KoogleCli/KoogleCli.csproj
@@ -10,6 +10,7 @@
+
diff --git a/KoogleCli/Program.cs b/KoogleCli/Program.cs
index f2c3ef1..4fb85e6 100644
--- a/KoogleCli/Program.cs
+++ b/KoogleCli/Program.cs
@@ -8,6 +8,7 @@ using GameModel.Contract;
using GameModel.DeathGame;
using KoogleCli.Model;
using Spectre.Console;
+using Spectre.Console.Json;
using static System.Runtime.InteropServices.JavaScript.JSType;
AnsiConsole.MarkupLine("Welcome to [green]koogle[/]");
@@ -134,33 +135,35 @@ void Show(GameState gameState)
ShowThrow(gameState);
ShowBoard(gameState.ThrowState.BoardState);
+
+
+ var json = new JsonText(_gs.GetJson());
+ AnsiConsole.Write(
+ new Panel(json)
+ .Header("Datamodel:")
+ .Collapse()
+ .RoundedBorder()
+ .BorderColor(Color.Yellow));
}
void ShowThrow(GameState gameState)
{
int throwCount = gameState.ThrowState.ThrowCount;
int throwsPerRount = gameState.ThrowState.ThrowsPerRount;
- Text text1;
+ Text textThrows;
if (throwsPerRount == IGameHandler.INFINIT_THROWS)
{
- text1 = new Text($"Würfe: {throwCount}", new Style(Color.Red, Color.Black));
+ textThrows = new Text($"Würfe: {throwCount}", new Style(Color.Red, Color.Black));
}
else
{
- text1 = new Text($"Würfe: {throwCount}/{throwsPerRount}", new Style(Color.Red, Color.Black));
+ textThrows = new Text($"Würfe: {throwCount}/{throwsPerRount}", new Style(Color.Red, Color.Black));
}
- var text1_2 = new Text($"Modus: {_gs.ThrowModeName}", new Style(Color.Red, Color.Black));
+ var textMode = new Text($"Modus: {_gs.ThrowModeName}", new Style(Color.Red, Color.Black));
// Create three text elements
- var paddedText_II = new Text($"Spieler: {gameState.NextPlayerId}", new Style(Color.Green, Color.Black));
- var paddedText_III = new Text("Spielzeit: ", new Style(Color.Blue, Color.Black));
-
- // Apply padding to the three text elements
- var pad1_1 = new Padder(text1).PadRight(16).PadBottom(0).PadTop(2);
- var pad1_2 = new Padder(text1_2).PadRight(0).PadBottom(0).PadTop(2);
-
- var pad_II = new Padder(paddedText_II).PadBottom(0).PadTop(2);
- var pad_III = new Padder(paddedText_III).PadLeft(16).PadBottom(0).PadTop(0);
+ var textPlayer = new Text($"Spieler: {gameState.NextPlayerId}", new Style(Color.Green, Color.Black));
+ var textGametime = new Text("Spielzeit: ", new Style(Color.Blue, Color.Black));
// Insert padded elements within single-row grid
var grid = new Grid();
@@ -169,8 +172,8 @@ void ShowThrow(GameState gameState)
grid.AddColumn();
grid.AddColumn();
- grid.AddRow(pad1_2);
- grid.AddRow(pad1_1, pad_II, pad_III);
+ grid.AddRow(textMode);
+ grid.AddRow(textThrows, textPlayer, textGametime);
// Write grid and it's padded contents to the Console
AnsiConsole.Write(grid);
@@ -186,22 +189,22 @@ void ShowBoard(BoardState board)
grid.AddColumn();
grid.AddColumn();
- Padder pad_1, pad_2, pad_3, pad_4, pad_5;
+ Text text1, text2, text3, text4, text5;
- GetRow(1, out pad_1, out pad_2, out pad_3, out pad_4, out pad_5, board);
- grid.AddRow(pad_1, pad_2, pad_3, pad_4, pad_5);
+ GetRow(1, out text1, out text2, out text3, out text4, out text5, board);
+ grid.AddRow(text1, text2, text3, text4, text5);
- GetRow(2, out pad_1, out pad_2, out pad_3, out pad_4, out pad_5, board);
- grid.AddRow(pad_1, pad_2, pad_3, pad_4, pad_5);
+ GetRow(2, out text1, out text2, out text3, out text4, out text5, board);
+ grid.AddRow(text1, text2, text3, text4, text5);
- GetRow(3, out pad_1, out pad_2, out pad_3, out pad_4, out pad_5, board);
- grid.AddRow(pad_1, pad_2, pad_3, pad_4, pad_5);
+ GetRow(3, out text1, out text2, out text3, out text4, out text5, board);
+ grid.AddRow(text1, text2, text3, text4, text5);
- GetRow(4, out pad_1, out pad_2, out pad_3, out pad_4, out pad_5, board);
- grid.AddRow(pad_1, pad_2, pad_3, pad_4, pad_5);
+ GetRow(4, out text1, out text2, out text3, out text4, out text5, board);
+ grid.AddRow(text1, text2, text3, text4, text5);
- GetRow(5, out pad_1, out pad_2, out pad_3, out pad_4, out pad_5, board);
- grid.AddRow(pad_1, pad_2, pad_3, pad_4, pad_5);
+ GetRow(5, out text1, out text2, out text3, out text4, out text5, board);
+ grid.AddRow(text1, text2, text3, text4, text5);
// Write grid and it's padded contents to the Console
AnsiConsole.Write(grid);
@@ -212,7 +215,7 @@ void ShowPlayer()
};
-static void GetRow(int row, out Padder pad_1, out Padder pad_2, out Padder pad_3, out Padder pad_4, out Padder pad_5, BoardState board)
+static void GetRow(int row, out Text text1, out Text text2, out Text text3, out Text text4, out Text text5, BoardState board)
{
string txt1 = "0";
string txt2 = "0";
@@ -261,16 +264,16 @@ static void GetRow(int row, out Padder pad_1, out Padder pad_2, out Padder pad_3
txt5 = " ";
}
// Create three text elements
- var paddedText_1 = new Text(txt1, new Style(txt1 == "0" ? Color.DarkSlateGray3 : Color.Blue, Color.Black));
- var paddedText_2 = new Text(txt2, new Style(txt2 == "0" ? Color.DarkSlateGray3 : Color.Blue, Color.Black));
- var paddedText_3 = new Text(txt3, new Style(txt3 == "0" ? Color.DarkSlateGray3 : Color.Blue, Color.Black));
- var paddedText_4 = new Text(txt4, new Style(txt4 == "0" ? Color.DarkSlateGray3 : Color.Blue, Color.Black));
- var paddedText_5 = new Text(txt5, new Style(txt5 == "0" ? Color.DarkSlateGray3 : Color.Blue, Color.Black));
+ text1 = new Text(txt1, new Style(txt1 == "0" ? Color.DarkSlateGray3 : Color.Blue, Color.Black));
+ text2 = new Text(txt2, new Style(txt2 == "0" ? Color.DarkSlateGray3 : Color.Blue, Color.Black));
+ text3 = new Text(txt3, new Style(txt3 == "0" ? Color.DarkSlateGray3 : Color.Blue, Color.Black));
+ text4 = new Text(txt4, new Style(txt4 == "0" ? Color.DarkSlateGray3 : Color.Blue, Color.Black));
+ text5 = new Text(txt5, new Style(txt5 == "0" ? Color.DarkSlateGray3 : Color.Blue, Color.Black));
// Apply padding to the three text elements
- pad_1 = new Padder(paddedText_1); //.PadRight(16).PadBottom(0).PadTop(4);
- pad_2 = new Padder(paddedText_2); //.PadBottom(0).PadTop(2);
- pad_3 = new Padder(paddedText_3); //.PadLeft(16).PadBottom(0).PadTop(0);
- pad_4 = new Padder(paddedText_4); //.PadLeft(16).PadBottom(0).PadTop(0);
- pad_5 = new Padder(paddedText_5); //.PadLeft(16).PadBottom(0).PadTop(0);
+ //padCol1 = new Padder(text1).PadRight(0).PadBottom(0).PadTop(4);
+ //padCol2 = new Padder(text2); //.PadBottom(0).PadTop(2);
+ //pacCol3 = new Padder(text3); //.PadLeft(16).PadBottom(0).PadTop(0);
+ //padCol4 = new Padder(text4); //.PadLeft(16).PadBottom(0).PadTop(0);
+ //padCol5 = new Padder(text5); //.PadLeft(16).PadBottom(0).PadTop(0);
}
\ No newline at end of file