This commit is contained in:
Christian Kauer 2023-12-24 11:29:49 +01:00
parent 12c9c14b97
commit fb5ac3c4b3
5 changed files with 56 additions and 38 deletions

View File

@ -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;
}
}
}

View File

@ -6,6 +6,10 @@
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\GameModel\GameModel.csproj" />
</ItemGroup>

View File

@ -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 ;
}

View File

@ -10,6 +10,7 @@
<ItemGroup>
<PackageReference Include="CommandLineParser" Version="2.9.1" />
<PackageReference Include="Spectre.Console" Version="0.48.0" />
<PackageReference Include="Spectre.Console.Json" Version="0.48.0" />
</ItemGroup>
<ItemGroup>

View File

@ -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);
}