This commit is contained in:
Christian Kauer 2023-12-29 10:06:27 +01:00
parent 2bc78fc7b1
commit b9ac801281
4 changed files with 12 additions and 10 deletions

View File

@ -72,14 +72,15 @@ namespace GameHandler.DeathGame
return new DeathGameModel(1, coffins.OrderBy(_ => random.Next()).ToList().ToArray(), deathGameSettings, playerIds); return new DeathGameModel(1, coffins.OrderBy(_ => random.Next()).ToList().ToArray(), deathGameSettings, playerIds);
} }
public IGameModel Update(PinThrow pinThrow, IGameModel gameModel, BoardState boardStateBeforeUpdate) public IGameModel Update(PinThrow pinThrow, IGameModel gameModel, BoardState boardStateBeforeUpdate, ThrowState throwStateAfterUpdate)
{ {
var isTrowIntoAllPins = boardStateBeforeUpdate.PinPicture.UpCount == 9; var isTrowIntoAllPins = boardStateBeforeUpdate.PinPicture.UpCount == 9;
var boardCleared = pinThrow.IsCleared; var boardCleared = pinThrow.IsCleared;
return CalcNextModel(gameModel as DeathGameModel, pinThrow.PinCount, isTrowIntoAllPins, boardCleared); var firstThrowInRound = throwStateAfterUpdate.ThrowCount == 1;
return CalcNextModel(gameModel as DeathGameModel, pinThrow.PinCount, isTrowIntoAllPins, boardCleared, firstThrowInRound);
} }
public DeathGameModel CalcNextModel(DeathGameModel gm, int pinCount, bool isTrowIntoAllPins, bool boardCleared) public DeathGameModel CalcNextModel(DeathGameModel gm, int pinCount, bool isTrowIntoAllPins, bool boardCleared, bool firstThrowInRound)
{ {
var current = gm.Coffins.First(); var current = gm.Coffins.First();
var next = gm.Coffins.Skip(1).First(); var next = gm.Coffins.Skip(1).First();
@ -90,7 +91,7 @@ namespace GameHandler.DeathGame
if (isTrowIntoAllPins) // into all pins if (isTrowIntoAllPins) // into all pins
{ {
incX = true; incX = true;
if (pinCount < 3) if ((pinCount < 3) && firstThrowInRound)
{ {
OnFirstThrowFailed(gm, current); OnFirstThrowFailed(gm, current);
incLine = true; incLine = true;

View File

@ -33,7 +33,7 @@ namespace GameHandler.GameHandler
return new FreeGameModel(playerIds, playerIds.First(), throws); return new FreeGameModel(playerIds, playerIds.First(), throws);
} }
public IGameModel Update(PinThrow pinThrow, IGameModel gameModel, BoardState boardStateBeforeUpdate) public IGameModel Update(PinThrow pinThrow, IGameModel gameModel, BoardState boardStateBeforeUpdate, ThrowState throwStateAfterUpdate)
{ {
if (gameModel == null) if (gameModel == null)
{ {

View File

@ -96,11 +96,11 @@ namespace GameHandler
pinThrow = AutoCompletePlayerId(pinThrow); pinThrow = AutoCompletePlayerId(pinThrow);
var throwState = _th.Update(_lastState.ThrowState, pinThrow); var throwStateAfterUpdate = _th.Update(_lastState.ThrowState, pinThrow);
var gameModel = _gh.Update(pinThrow, _lastState.GameModel, boardStateBeforeUpdate); var gameModel = _gh.Update(pinThrow, _lastState.GameModel, boardStateBeforeUpdate, throwStateAfterUpdate);
var expenseModel = _eh.CheckThrow(throwState.BoardState, pinThrow, gameModel.PlayerIds, _lastState.ExpenseModel); var expenseModel = _eh.CheckThrow(throwStateAfterUpdate.BoardState, pinThrow, gameModel.PlayerIds, _lastState.ExpenseModel);
_lastState = _lastState with { ThrowState = throwState, GameModel = gameModel, NextPlayerId = _gh.GetCurrentPlayerId(gameModel), ExpenseModel = expenseModel }; _lastState = _lastState with { ThrowState = throwStateAfterUpdate, GameModel = gameModel, NextPlayerId = _gh.GetCurrentPlayerId(gameModel), ExpenseModel = expenseModel };
return _lastState ; return _lastState ;
} }

View File

@ -22,7 +22,8 @@ namespace GameModel.Contract
IGameModel InitGameModel(int[] playerIds, IGameSettings gameSettings); IGameModel InitGameModel(int[] playerIds, IGameSettings gameSettings);
int GetCurrentPlayerId(IGameModel gameModel); int GetCurrentPlayerId(IGameModel gameModel);
IGameModel Update(PinThrow pinThrow, IGameModel gameModel, BoardState boardStateBeforeUpdate); IGameModel Update(PinThrow pinThrow, IGameModel gameModel, BoardState boardStateBeforeUpdate,
ThrowState throwStateAfterUpdate);
event EventHandler GameExpenseOccured; event EventHandler GameExpenseOccured;
} }