⚗️ Add features to prototype, test DB further
continuous-integration/drone/push Build is passing Details

pull/110/head
Alexis Drai 2 years ago
parent 901a1128e9
commit 621d6c3bc2

@ -1,36 +1,36 @@
using Data; using Data;
using Data.EF; using Data.EF;
using Data.EF.Players; using Data.EF.Players;
using Model.Dice; using Model.Dice;
using Model.Dice.Faces; using Model.Dice.Faces;
using Model.Games; using Model.Games;
using Model.Players; using Model.Players;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Diagnostics; using System.Diagnostics;
using System.Drawing; using System.Drawing;
using System.Linq; using System.Linq;
namespace App namespace App
{ {
internal static class Program internal static class Program
{ {
static void Main(string[] args) static void Main(string[] args)
{ {
// MODEL stuff // MODEL stuff
ILoader loader = new Stub(); ILoader loader = new Stub();
GameRunner gameRunner; GameRunner gameRunner;
try try
{ {
gameRunner = loader.LoadApp(); gameRunner = loader.LoadApp();
} }
catch (Exception ex) catch (Exception ex)
{ {
Console.WriteLine(ex.Message); Console.WriteLine(ex.Message);
Console.WriteLine(ex.StackTrace); Console.WriteLine(ex.StackTrace);
gameRunner = new(new PlayerManager(), new DieManager(), null); gameRunner = new(new PlayerManager(), new DieManager(), null);
} }
try try
{ {
// DB stuff when the app opens // DB stuff when the app opens
@ -45,110 +45,133 @@ namespace App
foreach (PlayerEntity entity in entities) foreach (PlayerEntity entity in entities)
{ {
// persist them as models ! try
gameRunner.GlobalPlayerManager.Add(entity.ToModel()); {
} // persist them as models !
} gameRunner.GlobalPlayerManager.Add(entity.ToModel());
Debug.WriteLine($"{entity.ID} -- {entity.Name}");
}
catch (Exception ex) { Debug.WriteLine($"{ex.Message}\n... Never mind"); }
}
}
}
catch (Exception ex) { Debug.WriteLine($"{ex.Message}\n... Couldn't use the database"); }
string menuChoice = "nothing";
while (menuChoice != "q")
{
Console.WriteLine(
"l... load a game\n" +
"n... start new game\n" +
"d... delete a game\n" +
"i... see all dice\n" +
"c... create a group of dice\n" +
"p... see all players\n" +
"y... create players\n" +
"q... QUIT\n" +
">"
);
menuChoice = Console.ReadLine();
switch (menuChoice)
{
case "q":
break;
case "l":
string loadName = ChooseGame(gameRunner);
if (gameRunner.GetOneByName(loadName) != null)
{
Play(gameRunner, loadName);
}
break;
case "n":
if (!gameRunner.GlobalDieManager.GetAll().Any())
{
Console.WriteLine("make at least one dice group first, then try again");
break;
}
Console.WriteLine("add dice to the game");
IEnumerable<Die> newGameDice = PrepareDice(gameRunner);
string newGameName;
Console.WriteLine("give this new game a name\n>");
newGameName = Console.ReadLine();
Console.WriteLine("add players to the game");
PlayerManager playerManager = PreparePlayers(gameRunner);
gameRunner.StartNewGame(newGameName, playerManager, newGameDice);
Play(gameRunner, newGameName);
break;
case "d":
string deleteName = ChooseGame(gameRunner);
gameRunner.Remove(gameRunner.GetOneByName(deleteName));
break;
case "c":
string newGroupName;
Console.WriteLine("give this new dice group a name");
newGroupName = Console.ReadLine();
List<Die> newGroupDice = new();
string menuChoiceNewDice = "";
while (!(menuChoiceNewDice.Equals("ok") && newGroupDice.Any()))
{
Die die = null;
Console.WriteLine("create a die you want to add (at least one), or enter 'ok' if you're finished");
Console.WriteLine("what type of die ?\n" +
"n... number\n" +
"c... color\n" +
"i... image");
menuChoiceNewDice = Console.ReadLine();
switch (menuChoiceNewDice)
{
case "n":
die = MakeNumberDie();
break;
case "c":
die = MakeColorDie();
break;
case "i":
die = MakeImageDie();
break;
}
// almost no checks, this is temporary
if (die is not null)
{
newGroupDice.Add(die);
}
}
gameRunner.GlobalDieManager.Add(new KeyValuePair<string, IEnumerable<Die>>(newGroupName, newGroupDice));
break;
case "p":
ShowPlayers(gameRunner);
break;
case "i":
ShowDice(gameRunner);
break;
case "y":
PreparePlayers(gameRunner);
break;
default:
Console.WriteLine("u wot m8?");
break;
}
} }
catch (Exception ex) { Debug.WriteLine($"{ex.Message}\n... Couldn't use the database"); }
string menuChoice = "nothing";
while (menuChoice != "q")
{
Console.WriteLine(
"l... load a game\n" +
"n... start new game\n" +
"d... delete a game\n" +
"c... create a group of dice\n" +
"q... QUIT\n" +
">"
);
menuChoice = Console.ReadLine();
switch (menuChoice)
{
case "q":
break;
case "l":
string loadName = ChooseGame(gameRunner);
if (gameRunner.GetOneByName(loadName) != null)
{
Play(gameRunner, loadName);
}
break;
case "n":
if (!gameRunner.GlobalDieManager.GetAll().Any())
{
Console.WriteLine("make at least one dice group first, then try again");
break;
}
IEnumerable<Die> newGameDice = PrepareDice(gameRunner);
string newGameName;
Console.WriteLine("give this new game a name\n>");
newGameName = Console.ReadLine();
PlayerManager playerManager = PreparePlayers(gameRunner);
gameRunner.StartNewGame(newGameName, playerManager, newGameDice);
Play(gameRunner, newGameName);
break;
case "d":
string deleteName = ChooseGame(gameRunner);
gameRunner.Remove(gameRunner.GetOneByName(deleteName));
break;
case "c":
string newGroupName;
Console.WriteLine("give this new dice group a name");
newGroupName = Console.ReadLine();
List<Die> newGroupDice = new();
string menuChoiceNewDice = "";
while (!(menuChoiceNewDice.Equals("ok") && newGroupDice.Any()))
{
Die die = null;
Console.WriteLine("create a die you want to add (at least one), or enter 'ok' if you're finished");
Console.WriteLine("what type of die ?\n" +
"n... number\n" +
"c... color\n" +
"i... image");
menuChoiceNewDice = Console.ReadLine();
switch (menuChoiceNewDice)
{
case "n":
die = MakeNumberDie();
break;
case "c":
die = MakeColorDie();
break;
case "i":
die = MakeImageDie();
break;
}
// almost no checks, this is temporary
if (die is not null)
{
newGroupDice.Add(die);
}
}
gameRunner.GlobalDieManager.Add(new KeyValuePair<string, IEnumerable<Die>>(newGroupName, newGroupDice));
break;
default:
Console.WriteLine("u wot m8?");
break;
}
}
try try
{ {
// DB stuff when the app closes // DB stuff when the app closes
@ -166,188 +189,199 @@ namespace App
{ {
try // to persist them try // to persist them
{ // as entities ! { // as entities !
playerDbManager.Add(model.ToEntity()); PlayerEntity entity = model.ToEntity();
playerDbManager.Add(entity);
Debug.WriteLine($"{entity.ID} -- {entity.Name}");
} }
// what if there's already a player with that name? Exception (see PlayerEntity's annotations) // what if there's already a player with that name? Exception (see PlayerEntity's annotations)
catch (ArgumentException ex) { Debug.WriteLine($"{ex.Message}\n... Never mind"); } catch (ArgumentException ex) { Debug.WriteLine($"{ex.Message}\n... Never mind"); }
} }
} }
} catch (Exception ex) { Debug.WriteLine($"{ex.Message}\n... Couldn't use the database"); } } catch (Exception ex) { Debug.WriteLine($"{ex.Message}\n... Couldn't use the database"); }
} }
private static void Play(GameRunner gameRunner, string name) private static void Play(GameRunner gameRunner, string name)
{ {
string menuChoicePlay = ""; string menuChoicePlay = "";
while (menuChoicePlay != "q") while (menuChoicePlay != "q")
{ {
Game game = gameRunner.GetOneByName(name); Game game = gameRunner.GetOneByName(name);
Console.WriteLine($"{game.GetWhoPlaysNow()}'s turn\n" + Console.WriteLine($"{game.GetWhoPlaysNow()}'s turn\n" +
"q... quit\n" + "q... quit\n" +
"h... show history\n" + "h... show history\n" +
"s... save\n" + "s... save\n" +
"any other... throw"); "any other... throw");
menuChoicePlay = Console.ReadLine(); menuChoicePlay = Console.ReadLine();
switch (menuChoicePlay) switch (menuChoicePlay)
{ {
case "q": case "q":
break; break;
case "h": case "h":
foreach (Turn turn in game.GetHistory()) foreach (Turn turn in game.GetHistory())
{ {
Console.WriteLine(turn); Console.WriteLine(turn);
} }
break; break;
case "s": case "s":
gameRunner.Add(game); gameRunner.Add(game);
break; break;
default: default:
GameRunner.PlayGame(game); GameRunner.PlayGame(game);
Console.WriteLine(game.GetHistory().Last()); Console.WriteLine(game.GetHistory().Last());
break; break;
} }
} }
} }
private static string ChooseGame(GameRunner gameRunner) private static string ChooseGame(GameRunner gameRunner)
{ {
string name; string name;
Console.WriteLine("which of these games?\n(choose by name)\n>"); Console.WriteLine("which of these games?\n(choose by name)\n>");
foreach (Game game in gameRunner.GetAll()) foreach (Game game in gameRunner.GetAll())
{ {
Console.WriteLine(game); Console.WriteLine(game);
} }
name = Console.ReadLine(); name = Console.ReadLine();
return name; return name;
} }
private static NumberDie MakeNumberDie() private static void ShowPlayers(GameRunner gameRunner)
{ {
NumberDie die; Console.WriteLine("Look at all them players!");
List<NumberFace> faces = new(); foreach (Player player in gameRunner.GlobalPlayerManager.GetAll())
string menuChoiceNewFaces = ""; {
Console.WriteLine(player);
while (menuChoiceNewFaces != "ok") }
{ }
Console.WriteLine("create a face with a number, or enter 'ok' if you're finished");
menuChoiceNewFaces = Console.ReadLine(); private static void ShowDice(GameRunner gameRunner)
{
if (!menuChoiceNewFaces.Equals("ok") && int.TryParse(menuChoiceNewFaces, out int num)) foreach ((string name, IEnumerable<Die> dice) in gameRunner.GlobalDieManager.GetAll())
{ {
faces.Add(new(num)); Console.WriteLine($"{name} -- {dice}");
} }
} }
die = new NumberDie(faces.ToArray()); private static NumberDie MakeNumberDie()
return die; {
} NumberDie die;
List<NumberFace> faces = new();
private static ColorDie MakeColorDie() string menuChoiceNewFaces = "";
{
ColorDie die; while (menuChoiceNewFaces != "ok")
List<ColorFace> faces = new(); {
string menuChoiceNewFaces = ""; Console.WriteLine("create a face with a number, or enter 'ok' if you're finished");
menuChoiceNewFaces = Console.ReadLine();
while (!menuChoiceNewFaces.Equals("ok"))
{ if (!menuChoiceNewFaces.Equals("ok") && int.TryParse(menuChoiceNewFaces, out int num))
Console.WriteLine("create a face with an color name, or enter 'ok' if you're finished"); {
menuChoiceNewFaces = Console.ReadLine(); faces.Add(new(num));
if (menuChoiceNewFaces != "ok") faces.Add(new(Color.FromName(menuChoiceNewFaces))); }
} }
die = new ColorDie(faces.ToArray()); die = new NumberDie(faces.ToArray());
return die; return die;
} }
private static ImageDie MakeImageDie() private static ColorDie MakeColorDie()
{ {
ImageDie die; ColorDie die;
List<ImageFace> faces = new(); List<ColorFace> faces = new();
string menuChoiceNewFaces = ""; string menuChoiceNewFaces = "";
while (!menuChoiceNewFaces.Equals("ok")) while (!menuChoiceNewFaces.Equals("ok"))
{ {
Console.WriteLine("create a face with an image uri, or enter 'ok' if you're finished"); Console.WriteLine("create a face with an color name, or enter 'ok' if you're finished");
menuChoiceNewFaces = Console.ReadLine(); menuChoiceNewFaces = Console.ReadLine();
if (menuChoiceNewFaces != "ok") faces.Add(new(Color.FromName(menuChoiceNewFaces)));
if (menuChoiceNewFaces != "ok") }
{
try die = new ColorDie(faces.ToArray());
{ return die;
faces.Add(new(new Uri(menuChoiceNewFaces))); }
}
catch (ArgumentNullException ex) private static ImageDie MakeImageDie()
{ {
Console.WriteLine(ex.Message); ImageDie die;
} List<ImageFace> faces = new();
catch (UriFormatException ex) string menuChoiceNewFaces = "";
{
Console.WriteLine("that URI was not valid"); while (!menuChoiceNewFaces.Equals("ok"))
Console.WriteLine(ex.Message); {
} Console.WriteLine("create a face with an image uri, or enter 'ok' if you're finished");
} menuChoiceNewFaces = Console.ReadLine();
}
die = new ImageDie(faces.ToArray()); if (menuChoiceNewFaces != "ok")
return die; {
} try
{
private static IEnumerable<Die> PrepareDice(GameRunner gameRunner) faces.Add(new(new Uri(menuChoiceNewFaces)));
{ }
List<Die> result = new(); catch (ArgumentNullException ex)
Console.WriteLine("add dice to the game"); {
Console.WriteLine("all known dice or groups of dice:"); Console.WriteLine(ex.Message);
foreach ((string name, IEnumerable<Die> dice) in gameRunner.GlobalDieManager.GetAll()) }
{ catch (UriFormatException ex)
Console.WriteLine($"{name} -- {dice}"); {
} Console.WriteLine("that URI was not valid");
string menuChoiceDice = ""; Console.WriteLine(ex.Message);
while (!(menuChoiceDice.Equals("ok") && result.Any())) }
{ }
Console.WriteLine("write the name of a dice group you want to add (at least one), or 'ok' if you're finished"); }
menuChoiceDice = Console.ReadLine(); die = new ImageDie(faces.ToArray());
if (!menuChoiceDice.Equals("ok")) return die;
{ }
IEnumerable<Die> chosenDice = gameRunner.GlobalDieManager.GetOneByName(menuChoiceDice).Value;
foreach (Die die in chosenDice) private static IEnumerable<Die> PrepareDice(GameRunner gameRunner)
{ {
result.Add(die); List<Die> result = new();
} Console.WriteLine("all known dice or groups of dice:");
} ShowDice(gameRunner);
} string menuChoiceDice = "";
return result.AsEnumerable(); while (!(menuChoiceDice.Equals("ok") && result.Any()))
} {
private static PlayerManager PreparePlayers(GameRunner gameRunner) Console.WriteLine("write the name of a dice group you want to add (at least one), or 'ok' if you're finished");
{ menuChoiceDice = Console.ReadLine();
PlayerManager result = new(); if (!menuChoiceDice.Equals("ok"))
Console.WriteLine("add players to the game"); {
Console.WriteLine("all known players:"); IEnumerable<Die> chosenDice = gameRunner.GlobalDieManager.GetOneByName(menuChoiceDice).Value;
foreach (Player player in gameRunner.GlobalPlayerManager.GetAll()) foreach (Die die in chosenDice)
{ {
Console.WriteLine(player); result.Add(die);
} }
string menuChoicePlayers = ""; }
while (!(menuChoicePlayers.Equals("ok") && result.GetAll().Any())) }
{ return result.AsEnumerable();
Console.WriteLine("write the name of a player you want to add (at least one), or 'ok' if you're finished"); }
menuChoicePlayers = Console.ReadLine(); private static PlayerManager PreparePlayers(GameRunner gameRunner)
if (!menuChoicePlayers.Equals("ok")) {
{ PlayerManager result = new();
Player player = new(menuChoicePlayers); Console.WriteLine("all known players:");
if (!gameRunner.GlobalPlayerManager.GetAll().Contains(player)) ShowPlayers(gameRunner);
{ string menuChoicePlayers = "";
// if the player didn't exist, now it does... this is temporary while (!(menuChoicePlayers.Equals("ok") && result.GetAll().Any()))
gameRunner.GlobalPlayerManager.Add(player); {
} Console.WriteLine("write the name of a player you want to add (at least one), or 'ok' if you're finished");
// almost no checks, this is temporary menuChoicePlayers = Console.ReadLine();
try if (!menuChoicePlayers.Equals("ok"))
{ {
result.Add(player); Player player = new(menuChoicePlayers);
} if (!gameRunner.GlobalPlayerManager.GetAll().Contains(player))
catch (ArgumentException ex) { Debug.WriteLine($"{ex.Message}\n... Never mind"); } {
// if the player didn't exist, now it does... this is temporary
} gameRunner.GlobalPlayerManager.Add(player);
} }
// almost no checks, this is temporary
return result; try
} {
} result.Add(player);
}
catch (ArgumentException ex) { Debug.WriteLine($"{ex.Message}\n... Never mind"); }
}
}
return result;
}
}
} }
Loading…
Cancel
Save