This commit is contained in:
Christian Kauer 2023-12-23 15:17:44 +01:00
parent 99513fb9a1
commit 4779340cb4
4 changed files with 34 additions and 13 deletions

View File

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

View File

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

View File

@ -20,6 +20,7 @@ namespace GameModel.Contract
bool FreePlayerSelection() => true;
IGameModel InitGameModel(int[] playerIds, IGameSettings gameSettings);
int GetCurrentPlayerId();
}
}

View File

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