This commit is contained in:
Christian Kauer 2023-12-29 20:08:45 +01:00
parent e8ecac57c1
commit dd24bd4871
9 changed files with 202 additions and 116 deletions

View File

@ -1,9 +1,13 @@
using GameData.Repository;
using GameModel;
using GameModel.DeathGame;
using Newtonsoft.Json;
using System.Data.Common;
namespace GameData.UnitTests
{
record TestRecord(PinState PinState);
public class Tests
{
[SetUp]
@ -11,9 +15,38 @@ namespace GameData.UnitTests
{
}
[Test]
public void Serialize_PinPicture()
{
var r = new TestRecord(PinState.Down);
var p = PinPicture.Create();
string s = JsonConvert.SerializeObject(p);
string s2 = JsonConvert.SerializeObject(r);
var p2 = JsonConvert.DeserializeObject<PinPicture>(s);
}
[Test]
public void Test1()
{
var setting = new DeathGameSettings(77);
var gm = new DeathGameModel(1, new[] { new Coffin(1, 0, 0) }, setting, new[] { 1, 2, 3 });
var gameState = GameState.Create(Guid.NewGuid(), "test", ThrowState.Create(ThrowMode.Reposition,99), 1, gm);
string test = JsonConvert.SerializeObject(
gameState,
new JsonSerializerSettings()
{
TypeNameHandling = TypeNameHandling.Auto
});
var obj = JsonConvert.DeserializeObject<GameState>(test, new JsonSerializerSettings()
{
TypeNameHandling = TypeNameHandling.Auto
});
//var client = new ExpenseRepository(null, null, null);
//var test = client.GetAll();
}

View File

@ -12,10 +12,10 @@ namespace GameData.Dummy
{
List<GameState> gameStates = new List<GameState>();
public Task Save(GameState gameState)
public Task<GameState> Save(GameState gameState)
{
gameStates.Add(gameState);
return Task.CompletedTask;
return Task.FromResult(gameState);
}
public GameState Load(Guid gameId)

View File

@ -7,7 +7,7 @@ using System.Threading.Tasks;
namespace GameData.Model
{
public record GameStateDo(Guid Id, Guid GameId, string GameName, GameState GameState)
public record GameStateDo(Guid Id, Guid GameId, string GameName, string GameState)
{
}
}

View File

@ -2,11 +2,13 @@
using GameModel;
using GameModel.Contracts;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static System.Net.Mime.MediaTypeNames;
namespace GameData.Repository
{
@ -29,10 +31,22 @@ namespace GameData.Repository
throw new NotImplementedException();
}
public async Task Save(GameState gameState)
public async Task<GameState> Save(GameState gameState)
{
var gameStateDo = new GameStateDo(gameState.Id, gameState.GameId, gameState.GameName, gameState);
var str = JsonConvert.SerializeObject(gameState, new JsonSerializerSettings()
{
TypeNameHandling = TypeNameHandling.Auto
});
var gameStateDo = new GameStateDo(gameState.Id, gameState.GameId, gameState.GameName, str);
var res = await _client.Post<GameStateDo>(gameStateDo,UrlGameState);
var obj = JsonConvert.DeserializeObject<GameState>(res.GameState, new JsonSerializerSettings()
{
TypeNameHandling = TypeNameHandling.Auto
});
return obj;
}
public async Task Update(Game game)

View File

@ -20,9 +20,9 @@ namespace GameHandler.UnitTests.Mocks
throw new NotImplementedException();
}
public Task Save(GameState gameState)
public Task<GameState> Save(GameState gameState)
{
return Task.CompletedTask;
return Task.FromResult(gameState);
}
public Task Update(Game game)

View File

@ -10,7 +10,7 @@ namespace GameModel.Contracts
{
Task<Game> Create(Game game);
GameState Load(Guid gameId);
Task Save(GameState gameState);
Task<GameState> Save(GameState gameState);
Task Update(Game game);
}
}

View File

@ -6,4 +6,8 @@
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
</ItemGroup>
</Project>

View File

@ -1,4 +1,5 @@
using GameModel.Exceptions;
using Newtonsoft.Json;
using System;
using System.Collections;
using System.Collections.Generic;
@ -6,165 +7,21 @@ using System.Linq;
using System.Net.NetworkInformation;
using System.Numerics;
using System.Reflection.Metadata.Ecma335;
using System.Text;
using System.Threading.Tasks;
namespace GameModel
{
public record PinPicture(PinState PinState1, PinState PinState2, PinState PinState3, PinState PinState4, PinState PinState5, PinState PinState6, PinState PinState7, PinState PinState8, PinState PinState9)
: IEnumerable<PinState>, IEnumerable
{
public static PinPicture Create(PinState pinState1, PinState pinState2, PinState pinState3, PinState pinState4, PinState pinState5, PinState pinState6, PinState pinState7, PinState pinState8, PinState pinState9)
{
return new PinPicture(pinState1, pinState2, pinState3, pinState4, pinState5, pinState6, pinState7, pinState8, pinState9);
}
public static PinPicture Create()
{
return PinPicture.Create(PinState.Up, PinState.Up, PinState.Up, PinState.Up, PinState.Up, PinState.Up, PinState.Up, PinState.Up, PinState.Up);
//pins.Add(PinState1);
//pins.Add(pinState2);
//pins.Add(pinState3);
//pins.Add(pinState4);
//pins.Add(pinState5);
//pins.Add(pinState6);
//pins.Add(pinState7);
//pins.Add(pinState8);
//pins.Add(pinState9);
//ValidatePinPicture(pins);
}
//private PinPicture(IEnumerable<PinState> pins)
//{
// this.pins = pins.Select(_ => _).ToList();
// ValidatePinPicture(this.pins);
//}
//private void ValidatePinPicture(IEnumerable<PinState> pins)
//{
//if (pins.Count() != 9)
//{
// throw new InvalidPinPictureException();
//}
//if (pins.All(_ => _ == PinState.Down))
//{
// throw new InvalidPinPictureException();
//}
//if (pins.Count(_ => _ == PinState.Up) == 0)
//{
// throw new InvalidPinPictureException();
//}
//if (ThrowCounter >= ThrowsPerRound)
//{
// throw new InvalidPinPictureException();
//}
//}
private List<PinState> pins
public static PinPicture Create(PinState pinState1, PinState pinState2, PinState pinState3, PinState pinState4, PinState pinState5, PinState pinState6, PinState pinState7, PinState pinState8, PinState pinState9)
{
get
{
return new List<PinState>(new[] { PinState1, PinState2, PinState3, PinState4, PinState5, PinState6, PinState7, PinState8, PinState9 });
}
}
public PinState this[int index]
{
get
{
if (index < 1 || index > 9)
{
throw new InvalidPinIndexException();
}
return pins[index - 1];
}
//set
//{
// if (index < 1 || index > 9)
// {
// throw new InvalidPinIndexException();
// }
// pins[index - 1] = value;
//}
}
//public PinState PinState1 { get; init; }
//public PinState PinState2 { get; init; }
//public PinState PinState3 { get; init; }
//public PinState PinState4 { get; init; }
//public PinState PinState5 { get; init; }
//public PinState PinState6 { get; init; }
//public PinState PinState7 { get; init; }
//public PinState PinState8 { get; init; }
//public PinState PinState9 { get; init; }
////public PinState PinState1 { get { return this[1]; } set { this[1] = value; } }
//public PinState PinState2 { get { return this[2]; } set { this[2] = value; } }
//public PinState PinState3 { get { return this[3]; } set { this[3] = value; } }
//public PinState PinState4 { get { return this[4]; } set { this[4] = value; } }
//public PinState PinState5 { get { return this[5]; } set { this[5] = value; } }
//public PinState PinState6 { get { return this[6]; } set { this[6] = value; } }
//public PinState PinState7 { get { return this[7]; } set { this[7] = value; } }
//public PinState PinState8 { get { return this[8]; } set { this[8] = value; } }
//public PinState PinState9 { get { return this[9]; } set { this[9] = value; } }
public int UpCount
{
get { return pins.Count(_ => _ == PinState.Up); }
}
public int DownCount
{
get { return pins.Count(_ => _ == PinState.Down); }
}
public bool AllUp
{
get
{
return DownCount == 0;
}
}
public static PinPicture operator +(PinPicture pic, PinThrow pinThrow)
{
if (pinThrow.IsSink)
return pic with { };
//if (pic.PinState1 == PinState.Down && pinThrow.PicPicture.PinState1 == PinState.Down)
//{
// throw new InvalidPinCalcExcetion();
//}
return pic with
{
PinState1 = pinThrow.PicPicture.PinState1 == PinState.Down ? PinState.Down : pic.PinState1,
PinState2 = pinThrow.PicPicture.PinState2 == PinState.Down ? PinState.Down : pic.PinState2,
PinState3 = pinThrow.PicPicture.PinState3 == PinState.Down ? PinState.Down : pic.PinState3,
PinState4 = pinThrow.PicPicture.PinState4 == PinState.Down ? PinState.Down : pic.PinState4,
PinState5 = pinThrow.PicPicture.PinState5 == PinState.Down ? PinState.Down : pic.PinState5,
PinState6 = pinThrow.PicPicture.PinState6 == PinState.Down ? PinState.Down : pic.PinState6,
PinState7 = pinThrow.PicPicture.PinState7 == PinState.Down ? PinState.Down : pic.PinState7,
PinState8 = pinThrow.PicPicture.PinState8 == PinState.Down ? PinState.Down : pic.PinState8,
PinState9 = pinThrow.PicPicture.PinState9 == PinState.Down ? PinState.Down : pic.PinState9
};
}
public IEnumerator<PinState> GetEnumerator()
{
foreach (var pin in pins)
{
yield return pin;
}
}
IEnumerator IEnumerable.GetEnumerator()
{
return this.GetEnumerator();
return new PinPicture(pinState1, pinState2, pinState3, pinState4, pinState5, pinState6, pinState7, pinState8, pinState9);
}
public static PinPicture Create(int pinNumber, PinState pinState)
@ -220,5 +77,183 @@ namespace GameModel
return PinPicture.Create(states);
}
public static PinPicture operator +(PinPicture pic, PinThrow pinThrow)
{
if (pinThrow.IsSink)
return pic with { };
//if (pic.PinState1 == PinState.Down && pinThrow.PicPicture.PinState1 == PinState.Down)
//{
// throw new InvalidPinCalcExcetion();
//}
return pic with
{
PinState1 = pinThrow.PicPicture.PinState1 == PinState.Down ? PinState.Down : pic.PinState1,
PinState2 = pinThrow.PicPicture.PinState2 == PinState.Down ? PinState.Down : pic.PinState2,
PinState3 = pinThrow.PicPicture.PinState3 == PinState.Down ? PinState.Down : pic.PinState3,
PinState4 = pinThrow.PicPicture.PinState4 == PinState.Down ? PinState.Down : pic.PinState4,
PinState5 = pinThrow.PicPicture.PinState5 == PinState.Down ? PinState.Down : pic.PinState5,
PinState6 = pinThrow.PicPicture.PinState6 == PinState.Down ? PinState.Down : pic.PinState6,
PinState7 = pinThrow.PicPicture.PinState7 == PinState.Down ? PinState.Down : pic.PinState7,
PinState8 = pinThrow.PicPicture.PinState8 == PinState.Down ? PinState.Down : pic.PinState8,
PinState9 = pinThrow.PicPicture.PinState9 == PinState.Down ? PinState.Down : pic.PinState9
};
}
public int UpCount
{
get
{
var res = 0;
res += Convert.ToInt32((PinState1 == PinState.Up));
res += Convert.ToInt32((PinState2 == PinState.Up));
res += Convert.ToInt32((PinState3 == PinState.Up));
res += Convert.ToInt32((PinState4 == PinState.Up));
res += Convert.ToInt32((PinState5 == PinState.Up));
res += Convert.ToInt32((PinState6 == PinState.Up));
res += Convert.ToInt32((PinState7 == PinState.Up));
res += Convert.ToInt32((PinState8 == PinState.Up));
res += Convert.ToInt32((PinState9 == PinState.Up));
return res;
}
}
public int DownCount
{
get
{
var res = 0;
res += Convert.ToInt32((PinState1 == PinState.Down));
res += Convert.ToInt32((PinState2 == PinState.Down));
res += Convert.ToInt32((PinState3 == PinState.Down));
res += Convert.ToInt32((PinState4 == PinState.Down));
res += Convert.ToInt32((PinState5 == PinState.Down));
res += Convert.ToInt32((PinState6 == PinState.Down));
res += Convert.ToInt32((PinState7 == PinState.Down));
res += Convert.ToInt32((PinState8 == PinState.Down));
res += Convert.ToInt32((PinState9 == PinState.Down));
return res;
}
}
public bool AllUp
{
get
{
return DownCount == 0;
}
}
}
public record PinPictureEnum : PinPicture, IEnumerable<PinState>, IEnumerable
{
public PinPictureEnum(PinState PinState1, PinState PinState2, PinState PinState3, PinState PinState4, PinState PinState5, PinState PinState6, PinState PinState7, PinState PinState8, PinState PinState9) : base(PinState1, PinState2, PinState3, PinState4, PinState5, PinState6, PinState7, PinState8, PinState9)
{
}
//private PinPicture(IEnumerable<PinState> pins)
//{
// this.pins = pins.Select(_ => _).ToList();
// ValidatePinPicture(this.pins);
//}
//private void ValidatePinPicture(IEnumerable<PinState> pins)
//{
//if (pins.Count() != 9)
//{
// throw new InvalidPinPictureException();
//}
//if (pins.All(_ => _ == PinState.Down))
//{
// throw new InvalidPinPictureException();
//}
//if (pins.Count(_ => _ == PinState.Up) == 0)
//{
// throw new InvalidPinPictureException();
//}
//if (ThrowCounter >= ThrowsPerRound)
//{
// throw new InvalidPinPictureException();
//}
//}
[JsonIgnore]
private List<PinState> pins
{
get
{
return new List<PinState>(new[] { PinState1, PinState2, PinState3, PinState4, PinState5, PinState6, PinState7, PinState8, PinState9 });
}
}
[JsonIgnore]
public PinState this[int index]
{
get
{
if (index < 1 || index > 9)
{
throw new InvalidPinIndexException();
}
return pins[index - 1];
}
//set
//{
// if (index < 1 || index > 9)
// {
// throw new InvalidPinIndexException();
// }
// pins[index - 1] = value;
//}
}
//public PinState PinState1 { get; init; }
//public PinState PinState2 { get; init; }
//public PinState PinState3 { get; init; }
//public PinState PinState4 { get; init; }
//public PinState PinState5 { get; init; }
//public PinState PinState6 { get; init; }
//public PinState PinState7 { get; init; }
//public PinState PinState8 { get; init; }
//public PinState PinState9 { get; init; }
////public PinState PinState1 { get { return this[1]; } set { this[1] = value; } }
//public PinState PinState2 { get { return this[2]; } set { this[2] = value; } }
//public PinState PinState3 { get { return this[3]; } set { this[3] = value; } }
//public PinState PinState4 { get { return this[4]; } set { this[4] = value; } }
//public PinState PinState5 { get { return this[5]; } set { this[5] = value; } }
//public PinState PinState6 { get { return this[6]; } set { this[6] = value; } }
//public PinState PinState7 { get { return this[7]; } set { this[7] = value; } }
//public PinState PinState8 { get { return this[8]; } set { this[8] = value; } }
//public PinState PinState9 { get { return this[9]; } set { this[9] = value; } }
public IEnumerator<PinState> GetEnumerator()
{
foreach (var pin in pins)
{
yield return pin;
}
}
IEnumerator IEnumerable.GetEnumerator()
{
return this.GetEnumerator();
}
}
}

View File

@ -8,7 +8,7 @@ namespace GameModel
{
public record PinThrow(int PlayerId, PinPicture PicPicture, bool IsBell, bool IsSink)
{
public bool IsCircle => !IsSink && PicPicture.DownCount == 8 && (PicPicture[5] == PinState.Up);
public bool IsCircle => !IsSink && PicPicture.DownCount == 8 && (PicPicture.PinState5 == PinState.Up);
public bool IsNinePins => !IsSink && PinCount == 9;