From 4779340cb42fc23ebf8c142fd6283ef9ccea9137 Mon Sep 17 00:00:00 2001 From: Christian Kauer Date: Sat, 23 Dec 2023 15:17:44 +0100 Subject: [PATCH] dev --- GameHandler/GameService.cs | 29 ++++++++++++++++-------- GameHandler/Parser/ThrowCommandParser.cs | 4 ++-- GameModel/Contracts/IGameHandler.cs | 1 + KoogleCli/Program.cs | 13 ++++++++++- 4 files changed, 34 insertions(+), 13 deletions(-) diff --git a/GameHandler/GameService.cs b/GameHandler/GameService.cs index 9aa42b8..7022120 100644 --- a/GameHandler/GameService.cs +++ b/GameHandler/GameService.cs @@ -40,12 +40,12 @@ namespace GameHandler static int[] defaultPlayerIds => new[] {1,2,3,4}; - public ThrowState Start(string gameName = FreeGameHandler.GAMENAME_FREETRAINING) // TODO: add players + public ThrowState Start(string gameName = FreeGameHandler.GAMENAME_FREETRAINING) { return Start(defaultPlayerIds, new DeathGameSettings(6), gameName); } - public ThrowState Start(int[] playerIds, IGameSettings gameSettings, string gameName = FreeGameHandler.GAMENAME_FREETRAINING) // TODO: add players + public ThrowState Start(int[] playerIds, IGameSettings gameSettings, string gameName = FreeGameHandler.GAMENAME_FREETRAINING) { if (_isStarted) { @@ -58,19 +58,11 @@ namespace GameHandler _th = new ThrowHandler(); - //var throwMode = GameTypeId == 0 ? ThrowMode.Reposition : ThrowMode.Decrease; - //var throwsPerRount = GameTypeId == 0 ? INFINIT_THROWS : 3; - _lastState = ThrowState.Create(_gh.ThrowMode(), _gh.ThrowsPerRount()); return _lastState; } - //private IGameHandler GetGameHandler(string gameName) - //{ - // throw new NotImplementedException(); - //} - public ThrowState HandleThrow(PinThrow pinThrow) { if (!_isStarted) @@ -78,10 +70,27 @@ namespace GameHandler throw new InvalidGameStateExcpetion("Game not started"); } + pinThrow = AutoCompletePlayerId(pinThrow); + _lastState = _th.Update(_lastState, pinThrow); return _lastState; } + private PinThrow AutoCompletePlayerId(PinThrow pinThrow) + { + if (_gh.FreePlayerSelection() && pinThrow.PlayerId == 0) + { + throw new InvalidPinThrowException("PlayerId connot be 0"); + } + + if (_gh.FreePlayerSelection()) + { + return pinThrow; + } + + return pinThrow with { PlayerId = _gh.GetCurrentPlayerId() }; + } + public void Stop() { if (!_isStarted) diff --git a/GameHandler/Parser/ThrowCommandParser.cs b/GameHandler/Parser/ThrowCommandParser.cs index affce3b..0a27271 100644 --- a/GameHandler/Parser/ThrowCommandParser.cs +++ b/GameHandler/Parser/ThrowCommandParser.cs @@ -16,9 +16,9 @@ namespace GameHandler.Parser if (string.IsNullOrEmpty(data)) throw new ArgumentNullException("data"); - if (!withFreePlayerSelection && playerId == 0) + if (!withFreePlayerSelection && playerId != 0) { - throw new ArgumentNullException("playerid required"); + throw new ArgumentNullException("playerid not selectable"); } string pindata; diff --git a/GameModel/Contracts/IGameHandler.cs b/GameModel/Contracts/IGameHandler.cs index bb4e4cc..5a520d8 100644 --- a/GameModel/Contracts/IGameHandler.cs +++ b/GameModel/Contracts/IGameHandler.cs @@ -20,6 +20,7 @@ namespace GameModel.Contract bool FreePlayerSelection() => true; IGameModel InitGameModel(int[] playerIds, IGameSettings gameSettings); + int GetCurrentPlayerId(); } } diff --git a/KoogleCli/Program.cs b/KoogleCli/Program.cs index 479fe84..9a2e818 100644 --- a/KoogleCli/Program.cs +++ b/KoogleCli/Program.cs @@ -1,9 +1,11 @@ // See https://aka.ms/new-console-template for more information using CommandLine; using GameHandler; +using GameHandler.DeathGame; using GameHandler.Extensions; using GameModel; using GameModel.Contract; +using GameModel.DeathGame; using KoogleCli.Model; using Spectre.Console; using static System.Runtime.InteropServices.JavaScript.JSType; @@ -74,7 +76,7 @@ void NewGameAction() void StartGameAction(string gameName) { _gs = new GameService(); - var bs = _gs.Start(new[] { 1,2,3,4}, null, gameName ); + var bs = _gs.Start(new[] { 1,2,3,4}, GetGameSettings(gameName), gameName ); Show(bs); @@ -115,6 +117,15 @@ void StartGameAction(string gameName) ShowMainMenu(); } +IGameSettings GetGameSettings(string gameName) +{ + if (gameName == DeathGameHandler.GAMENAME_DEATHBOX) + { + return new DeathGameSettings(6); + } + return null; +} + void Show(ThrowState throwState) { AnsiConsole.Clear();