From f41a373e254b5e205b72578f5dea434c44b93e4b Mon Sep 17 00:00:00 2001 From: Christian Kauer Date: Fri, 29 Dec 2023 11:54:40 +0100 Subject: [PATCH] dev --- GameData/Dummy/DummyGameRepository.cs | 25 +++++++++++++++++++ .../GameHandler/DeathGameHandlerTests.cs | 24 +++++++++--------- .../GameHandler/FreeGameHandlerTests.cs | 14 +++++++++-- GameHandler/GameService.cs | 25 ++++++++++++------- GameModel/Contracts/IGameRepository.cs | 14 +++++++++++ GameModel/GameState.cs | 6 ++--- 6 files changed, 82 insertions(+), 26 deletions(-) create mode 100644 GameData/Dummy/DummyGameRepository.cs create mode 100644 GameModel/Contracts/IGameRepository.cs diff --git a/GameData/Dummy/DummyGameRepository.cs b/GameData/Dummy/DummyGameRepository.cs new file mode 100644 index 0000000..b439e3a --- /dev/null +++ b/GameData/Dummy/DummyGameRepository.cs @@ -0,0 +1,25 @@ +using GameModel; +using GameModel.Contracts; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace GameData.Dummy +{ + public class DummyGameRepository : IGameRepository + { + List gameStates = new List(); + + public void Save(GameState gameState) + { + gameStates.Add(gameState); + } + + public GameState Load(Guid gameId) + { + return gameStates.Last(); + } + } +} diff --git a/GameHandler.UnitTests/GameHandler/DeathGameHandlerTests.cs b/GameHandler.UnitTests/GameHandler/DeathGameHandlerTests.cs index 9a6a394..b8d45f5 100644 --- a/GameHandler.UnitTests/GameHandler/DeathGameHandlerTests.cs +++ b/GameHandler.UnitTests/GameHandler/DeathGameHandlerTests.cs @@ -81,7 +81,7 @@ namespace GameHandler.UnitTests.DeathGame failed = ((GameExenseEventArgs)arg).Triggers; failedCoffinPlayerId = ((GameExenseEventArgs)arg).PlayerId; }; - var newGm = _gh.CalcNextModel(gm, 2, true, false); + var newGm = _gh.CalcNextModel(gm, 2, true, false, true); Assert.That(failedCoffinPlayerId, Is.EqualTo(newGm.Coffins.Last().PlayerId)); } @@ -97,7 +97,7 @@ namespace GameHandler.UnitTests.DeathGame failed = ((GameExenseEventArgs)arg).Triggers; failedCoffinPlayerId = ((GameExenseEventArgs)arg).PlayerId; }; - var newGm = _gh.CalcNextModel(gm, 3, true, false); + var newGm = _gh.CalcNextModel(gm, 3, true, false, true); Assert.That(failed, Is.Empty); Assert.That(failedCoffinPlayerId, Is.Zero); @@ -109,7 +109,7 @@ namespace GameHandler.UnitTests.DeathGame { var gm = _gh.InitGameModel(_players, _settings); - var newGm = _gh.CalcNextModel(gm, 2, true, false); + var newGm = _gh.CalcNextModel(gm, 2, true, false, true); Assert.That(newGm.Coffins.Last().XCount, Is.EqualTo(1)); } @@ -118,7 +118,7 @@ namespace GameHandler.UnitTests.DeathGame { var gm = _gh.InitGameModel(_players, _settings); - var newGm = _gh.CalcNextModel(gm, 2, true, true); + var newGm = _gh.CalcNextModel(gm, 2, true, true, true); Assert.That(newGm.Coffins.Last().XCount, Is.EqualTo(1)); } @@ -127,7 +127,7 @@ namespace GameHandler.UnitTests.DeathGame { var gm = _gh.InitGameModel(_players, _settings); - var newGm = _gh.CalcNextModel(gm, 0, false, false); + var newGm = _gh.CalcNextModel(gm, 0, false, false, true); Assert.That(newGm.Coffins.Last().LineCount, Is.EqualTo(1)); Assert.That(newGm.Coffins.Last().XCount, Is.EqualTo(0)); } @@ -142,7 +142,7 @@ namespace GameHandler.UnitTests.DeathGame coffins.Insert(0, first); var gm2 = gm with { Coffins = coffins.ToArray(), Id = 2 }; - var newGm = _gh.CalcNextModel(gm2, 2, true, true); + var newGm = _gh.CalcNextModel(gm2, 2, true, true, true); Assert.That(newGm.Coffins.Last().XCount, Is.EqualTo(0)); Assert.That(newGm.Coffins.Last().LineCount, Is.EqualTo(first.LineCount + 2)); // one for third x, one for failed throw @@ -156,7 +156,7 @@ namespace GameHandler.UnitTests.DeathGame var first = gm.Coffins.First(); DeathGameModel? newGm = null; - Assert.That(() => { newGm = _gh.CalcNextModel(gm, 2, false, false); }, Throws.Nothing); + Assert.That(() => { newGm = _gh.CalcNextModel(gm, 2, false, false, true); }, Throws.Nothing); Assert.That(first.PlayerId,Is.EqualTo(newGm.Coffins.Last().PlayerId)); Assert.That(gm.Coffins.Count, Is.EqualTo(newGm.Coffins.Count())); @@ -168,7 +168,7 @@ namespace GameHandler.UnitTests.DeathGame var gm = _gh.InitGameModel(_players, _settings); var prev = gm.Coffins.Last(); - var newGm = _gh.CalcNextModel(gm, 2, false, true); + var newGm = _gh.CalcNextModel(gm, 2, false, true, true); var prevNew = newGm.Coffins.First(_ => _.PlayerId == prev.PlayerId); Assert.That(prevNew.LineCount, Is.EqualTo(prev.LineCount + 1)); @@ -187,7 +187,7 @@ namespace GameHandler.UnitTests.DeathGame coffins.Insert(0, first); var gm2 = gm with { Coffins = coffins.ToArray(), Id = 2 }; - var newGm = _gh.CalcNextModel(gm2, 0, false, false); + var newGm = _gh.CalcNextModel(gm2, 0, false, false, true); @@ -208,7 +208,7 @@ namespace GameHandler.UnitTests.DeathGame coffins.Insert(gm.Coffins.Length - 1, last); var gm2 = gm with { Coffins = coffins.ToArray(), Id = 2 }; - var newGm = _gh.CalcNextModel(gm2, 2, false, true); + var newGm = _gh.CalcNextModel(gm2, 2, false, true, true); Assert.That(deadCoffin.PlayerId, Is.EqualTo(last.PlayerId)); Assert.That(newGm.Coffins.FirstOrDefault(_ => _.PlayerId == deadCoffin.PlayerId), Is.Null); @@ -228,7 +228,7 @@ namespace GameHandler.UnitTests.DeathGame var gm2 = gm with { Coffins = coffins.ToArray(), Id = 2 }; - var newGm = _gh.CalcNextModel(gm2, 2, false, true); + var newGm = _gh.CalcNextModel(gm2, 2, false, true, true); Assert.That(deadCoffin.PlayerId, Is.EqualTo(next.PlayerId)); Assert.That(newGm.Coffins.FirstOrDefault(_ => _.PlayerId == deadCoffin.PlayerId), Is.Null); @@ -256,7 +256,7 @@ namespace GameHandler.UnitTests.DeathGame var gm2 = gm with { Coffins = coffins.ToArray(), Id = 2 }; - var newGm = _gh.CalcNextModel(gm2, 2, false, true); + var newGm = _gh.CalcNextModel(gm2, 2, false, true, true); Assert.That(bodies.Count, Is.EqualTo(2)); foreach (var body in bodies) diff --git a/GameHandler.UnitTests/GameHandler/FreeGameHandlerTests.cs b/GameHandler.UnitTests/GameHandler/FreeGameHandlerTests.cs index fedd3f6..88a74ec 100644 --- a/GameHandler.UnitTests/GameHandler/FreeGameHandlerTests.cs +++ b/GameHandler.UnitTests/GameHandler/FreeGameHandlerTests.cs @@ -32,13 +32,23 @@ namespace GameHandler.UnitTests.GameHandler [Test] public void Update_ThrowsExceptionWhenModelIsNull() { - Assert.That(() => _gh.Update(PinThrow.Create(2, false, true), null, BoardState.Create()), Throws.TypeOf()); + Assert.That(() => _gh.Update( + PinThrow.Create(2, false, true), + null, + BoardState.Create(), + null) + , Throws.TypeOf()); } [Test] public void Update_ThrowsExceptionWhenModelIsNotInitialized() { - Assert.That(() => _gh.Update(PinThrow.Create(2, false, true), new FreeGameModel(null,0,Array.Empty()), BoardState.Create()), Throws.TypeOf()); + Assert.That(() => _gh.Update( + PinThrow.Create(2, false, true), + new FreeGameModel(null,0,Array.Empty()), + BoardState.Create(), + null) + , Throws.TypeOf()); } } } diff --git a/GameHandler/GameService.cs b/GameHandler/GameService.cs index e4665f5..e250126 100644 --- a/GameHandler/GameService.cs +++ b/GameHandler/GameService.cs @@ -56,7 +56,7 @@ namespace GameHandler return Start(defaultPlayerIds, new DeathGameSettings(6), gameName); } - public GameState Start(int[] playerIds, IGameSettings gameSettings, string gameName = FreeGameHandler.GAMENAME_FREETRAINING) + public GameState Start(int[] playerIds, IGameSettings gameSettings, string gameName = FreeGameHandler.GAMENAME_FREETRAINING) { if (_isStarted) { @@ -64,19 +64,26 @@ namespace GameHandler } _isStarted = true; + InitGameServiceBehaviour(gameName); + _lastState = InitGameState(playerIds, gameSettings, gameName); + + return _lastState; + } + + private GameState InitGameState(int[] playerIds, IGameSettings gameSettings, string gameName) + { + var gm = _gh.InitGameModel(playerIds, gameSettings); + var throwState = ThrowState.Create(_gh.ThrowMode(), _gh.ThrowsPerRount()); + return GameState.Create(gameName, throwState, _gh.GetCurrentPlayerId(gm), gm, ExpenseModel.Create()); + } + + private void InitGameServiceBehaviour(string gameName) + { _scope = _rootContainer?.BeginLifetimeScope(); _gh = this.GetGameHandler(gameName); _gh.GameExpenseOccured += _gh_GameExpenseOccured; - var gm = _gh.InitGameModel(playerIds, gameSettings); - _th = new ThrowHandler(); _eh = new ExpenseHandler(_expenseRepository); - - var throwState = ThrowState.Create(_gh.ThrowMode(), _gh.ThrowsPerRount()); - _lastState = GameState.Create(throwState, _gh.GetCurrentPlayerId(gm), gm, ExpenseModel.Create()); - - return _lastState; - } private void _gh_GameExpenseOccured(object? sender, EventArgs e) diff --git a/GameModel/Contracts/IGameRepository.cs b/GameModel/Contracts/IGameRepository.cs new file mode 100644 index 0000000..c75caf3 --- /dev/null +++ b/GameModel/Contracts/IGameRepository.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace GameModel.Contracts +{ + public interface IGameRepository + { + GameState Load(Guid gameId); + void Save(GameState gameState); + } +} diff --git a/GameModel/GameState.cs b/GameModel/GameState.cs index 0048ae5..15cb4c0 100644 --- a/GameModel/GameState.cs +++ b/GameModel/GameState.cs @@ -7,11 +7,11 @@ using System.Threading.Tasks; namespace GameModel { - public record GameState(ThrowState ThrowState, int NextPlayerId, IGameModel GameModel, ExpenseModel ExpenseModel) + public record GameState(Guid GameId, string GameName, ThrowState ThrowState, int NextPlayerId, IGameModel GameModel, ExpenseModel ExpenseModel) { - public static GameState Create(ThrowState throwState, int nextPlayerId, IGameModel gameModel, ExpenseModel expenseModel) + public static GameState Create(string gameName, ThrowState throwState, int nextPlayerId, IGameModel gameModel, ExpenseModel expenseModel) { - return new GameState(throwState, nextPlayerId, gameModel, expenseModel); + return new GameState(Guid.NewGuid(), gameName, throwState, nextPlayerId, gameModel, expenseModel); } } }