diff --git a/Qwirkle/Files/LeaderBoard.json b/Qwirkle/Files/LeaderBoard.json new file mode 100644 index 0000000..232acb4 --- /dev/null +++ b/Qwirkle/Files/LeaderBoard.json @@ -0,0 +1,16 @@ +{ + "leaderboard": [ + { + "Date": "\/Date(1717106400000+0200)\/", + "PlayerName": "Jérémy", + "Points": 0, + "Victories": 1 + }, + { + "Date": "\/Date(1717106400000+0200)\/", + "PlayerName": "Jules", + "Points": 0, + "Victories": 0 + } + ] +} \ No newline at end of file diff --git a/Qwirkle/Files/game.json b/Qwirkle/Files/game.json new file mode 100644 index 0000000..9a02614 --- /dev/null +++ b/Qwirkle/Files/game.json @@ -0,0 +1,1037 @@ +{ + "GameRunning": true, + "board": { + "cells": [ + { + "Tile": null, + "x": 0, + "y": 0 + }, + { + "Tile": null, + "x": 0, + "y": 1 + }, + { + "Tile": null, + "x": 0, + "y": 2 + }, + { + "Tile": null, + "x": 0, + "y": 3 + }, + { + "Tile": null, + "x": 0, + "y": 4 + }, + { + "Tile": null, + "x": 0, + "y": 5 + }, + { + "Tile": null, + "x": 0, + "y": 6 + }, + { + "Tile": null, + "x": 0, + "y": 7 + }, + { + "Tile": null, + "x": 0, + "y": 8 + }, + { + "Tile": null, + "x": 0, + "y": 9 + }, + { + "Tile": null, + "x": 0, + "y": 10 + }, + { + "Tile": null, + "x": 0, + "y": 11 + }, + { + "Tile": null, + "x": 0, + "y": 12 + }, + { + "Tile": null, + "x": 0, + "y": 13 + }, + { + "Tile": null, + "x": 0, + "y": 14 + }, + { + "Tile": null, + "x": 1, + "y": 0 + }, + { + "Tile": null, + "x": 1, + "y": 1 + }, + { + "Tile": null, + "x": 1, + "y": 2 + }, + { + "Tile": null, + "x": 1, + "y": 3 + }, + { + "Tile": null, + "x": 1, + "y": 4 + }, + { + "Tile": null, + "x": 1, + "y": 5 + }, + { + "Tile": null, + "x": 1, + "y": 6 + }, + { + "Tile": null, + "x": 1, + "y": 7 + }, + { + "Tile": null, + "x": 1, + "y": 8 + }, + { + "Tile": null, + "x": 1, + "y": 9 + }, + { + "Tile": null, + "x": 1, + "y": 10 + }, + { + "Tile": null, + "x": 1, + "y": 11 + }, + { + "Tile": null, + "x": 1, + "y": 12 + }, + { + "Tile": null, + "x": 1, + "y": 13 + }, + { + "Tile": null, + "x": 1, + "y": 14 + }, + { + "Tile": null, + "x": 2, + "y": 0 + }, + { + "Tile": null, + "x": 2, + "y": 1 + }, + { + "Tile": null, + "x": 2, + "y": 2 + }, + { + "Tile": null, + "x": 2, + "y": 3 + }, + { + "Tile": null, + "x": 2, + "y": 4 + }, + { + "Tile": null, + "x": 2, + "y": 5 + }, + { + "Tile": null, + "x": 2, + "y": 6 + }, + { + "Tile": null, + "x": 2, + "y": 7 + }, + { + "Tile": null, + "x": 2, + "y": 8 + }, + { + "Tile": null, + "x": 2, + "y": 9 + }, + { + "Tile": null, + "x": 2, + "y": 10 + }, + { + "Tile": null, + "x": 2, + "y": 11 + }, + { + "Tile": null, + "x": 2, + "y": 12 + }, + { + "Tile": null, + "x": 2, + "y": 13 + }, + { + "Tile": null, + "x": 2, + "y": 14 + }, + { + "Tile": null, + "x": 3, + "y": 0 + }, + { + "Tile": null, + "x": 3, + "y": 1 + }, + { + "Tile": null, + "x": 3, + "y": 2 + }, + { + "Tile": null, + "x": 3, + "y": 3 + }, + { + "Tile": null, + "x": 3, + "y": 4 + }, + { + "Tile": null, + "x": 3, + "y": 5 + }, + { + "Tile": null, + "x": 3, + "y": 6 + }, + { + "Tile": null, + "x": 3, + "y": 7 + }, + { + "Tile": null, + "x": 3, + "y": 8 + }, + { + "Tile": null, + "x": 3, + "y": 9 + }, + { + "Tile": null, + "x": 3, + "y": 10 + }, + { + "Tile": null, + "x": 3, + "y": 11 + }, + { + "Tile": null, + "x": 3, + "y": 12 + }, + { + "Tile": null, + "x": 3, + "y": 13 + }, + { + "Tile": null, + "x": 3, + "y": 14 + }, + { + "Tile": null, + "x": 4, + "y": 0 + }, + { + "Tile": null, + "x": 4, + "y": 1 + }, + { + "Tile": null, + "x": 4, + "y": 2 + }, + { + "Tile": null, + "x": 4, + "y": 3 + }, + { + "Tile": null, + "x": 4, + "y": 4 + }, + { + "Tile": null, + "x": 4, + "y": 5 + }, + { + "Tile": null, + "x": 4, + "y": 6 + }, + { + "Tile": null, + "x": 4, + "y": 7 + }, + { + "Tile": null, + "x": 4, + "y": 8 + }, + { + "Tile": null, + "x": 4, + "y": 9 + }, + { + "Tile": null, + "x": 4, + "y": 10 + }, + { + "Tile": null, + "x": 4, + "y": 11 + }, + { + "Tile": null, + "x": 4, + "y": 12 + }, + { + "Tile": null, + "x": 4, + "y": 13 + }, + { + "Tile": null, + "x": 4, + "y": 14 + }, + { + "Tile": null, + "x": 5, + "y": 0 + }, + { + "Tile": null, + "x": 5, + "y": 1 + }, + { + "Tile": null, + "x": 5, + "y": 2 + }, + { + "Tile": null, + "x": 5, + "y": 3 + }, + { + "Tile": null, + "x": 5, + "y": 4 + }, + { + "Tile": null, + "x": 5, + "y": 5 + }, + { + "Tile": null, + "x": 5, + "y": 6 + }, + { + "Tile": null, + "x": 5, + "y": 7 + }, + { + "Tile": null, + "x": 5, + "y": 8 + }, + { + "Tile": null, + "x": 5, + "y": 9 + }, + { + "Tile": null, + "x": 5, + "y": 10 + }, + { + "Tile": null, + "x": 5, + "y": 11 + }, + { + "Tile": null, + "x": 5, + "y": 12 + }, + { + "Tile": null, + "x": 5, + "y": 13 + }, + { + "Tile": null, + "x": 5, + "y": 14 + }, + { + "Tile": null, + "x": 6, + "y": 0 + }, + { + "Tile": null, + "x": 6, + "y": 1 + }, + { + "Tile": null, + "x": 6, + "y": 2 + }, + { + "Tile": null, + "x": 6, + "y": 3 + }, + { + "Tile": null, + "x": 6, + "y": 4 + }, + { + "Tile": null, + "x": 6, + "y": 5 + }, + { + "Tile": null, + "x": 6, + "y": 6 + }, + { + "Tile": null, + "x": 6, + "y": 7 + }, + { + "Tile": null, + "x": 6, + "y": 8 + }, + { + "Tile": null, + "x": 6, + "y": 9 + }, + { + "Tile": null, + "x": 6, + "y": 10 + }, + { + "Tile": null, + "x": 6, + "y": 11 + }, + { + "Tile": null, + "x": 6, + "y": 12 + }, + { + "Tile": null, + "x": 6, + "y": 13 + }, + { + "Tile": null, + "x": 6, + "y": 14 + }, + { + "Tile": null, + "x": 7, + "y": 0 + }, + { + "Tile": null, + "x": 7, + "y": 1 + }, + { + "Tile": null, + "x": 7, + "y": 2 + }, + { + "Tile": null, + "x": 7, + "y": 3 + }, + { + "Tile": null, + "x": 7, + "y": 4 + }, + { + "Tile": null, + "x": 7, + "y": 5 + }, + { + "Tile": null, + "x": 7, + "y": 6 + }, + { + "Tile": null, + "x": 7, + "y": 7 + }, + { + "Tile": null, + "x": 7, + "y": 8 + }, + { + "Tile": null, + "x": 7, + "y": 9 + }, + { + "Tile": null, + "x": 7, + "y": 10 + }, + { + "Tile": null, + "x": 7, + "y": 11 + }, + { + "Tile": null, + "x": 7, + "y": 12 + }, + { + "Tile": null, + "x": 7, + "y": 13 + }, + { + "Tile": null, + "x": 7, + "y": 14 + }, + { + "Tile": null, + "x": 8, + "y": 0 + }, + { + "Tile": null, + "x": 8, + "y": 1 + }, + { + "Tile": null, + "x": 8, + "y": 2 + }, + { + "Tile": null, + "x": 8, + "y": 3 + }, + { + "Tile": null, + "x": 8, + "y": 4 + }, + { + "Tile": null, + "x": 8, + "y": 5 + }, + { + "Tile": null, + "x": 8, + "y": 6 + }, + { + "Tile": null, + "x": 8, + "y": 7 + }, + { + "Tile": null, + "x": 8, + "y": 8 + }, + { + "Tile": null, + "x": 8, + "y": 9 + }, + { + "Tile": null, + "x": 8, + "y": 10 + }, + { + "Tile": null, + "x": 8, + "y": 11 + }, + { + "Tile": null, + "x": 8, + "y": 12 + }, + { + "Tile": null, + "x": 8, + "y": 13 + }, + { + "Tile": null, + "x": 8, + "y": 14 + }, + { + "Tile": null, + "x": 9, + "y": 0 + }, + { + "Tile": null, + "x": 9, + "y": 1 + }, + { + "Tile": null, + "x": 9, + "y": 2 + }, + { + "Tile": null, + "x": 9, + "y": 3 + }, + { + "Tile": null, + "x": 9, + "y": 4 + }, + { + "Tile": null, + "x": 9, + "y": 5 + }, + { + "Tile": null, + "x": 9, + "y": 6 + }, + { + "Tile": null, + "x": 9, + "y": 7 + }, + { + "Tile": null, + "x": 9, + "y": 8 + }, + { + "Tile": null, + "x": 9, + "y": 9 + }, + { + "Tile": null, + "x": 9, + "y": 10 + }, + { + "Tile": null, + "x": 9, + "y": 11 + }, + { + "Tile": null, + "x": 9, + "y": 12 + }, + { + "Tile": null, + "x": 9, + "y": 13 + }, + { + "Tile": null, + "x": 9, + "y": 14 + }, + { + "Tile": null, + "x": 10, + "y": 0 + }, + { + "Tile": null, + "x": 10, + "y": 1 + }, + { + "Tile": null, + "x": 10, + "y": 2 + }, + { + "Tile": null, + "x": 10, + "y": 3 + }, + { + "Tile": null, + "x": 10, + "y": 4 + }, + { + "Tile": null, + "x": 10, + "y": 5 + }, + { + "Tile": null, + "x": 10, + "y": 6 + }, + { + "Tile": null, + "x": 10, + "y": 7 + }, + { + "Tile": null, + "x": 10, + "y": 8 + }, + { + "Tile": null, + "x": 10, + "y": 9 + }, + { + "Tile": null, + "x": 10, + "y": 10 + }, + { + "Tile": null, + "x": 10, + "y": 11 + }, + { + "Tile": null, + "x": 10, + "y": 12 + }, + { + "Tile": null, + "x": 10, + "y": 13 + }, + { + "Tile": null, + "x": 10, + "y": 14 + }, + { + "Tile": null, + "x": 11, + "y": 0 + }, + { + "Tile": null, + "x": 11, + "y": 1 + }, + { + "Tile": null, + "x": 11, + "y": 2 + }, + { + "Tile": null, + "x": 11, + "y": 3 + }, + { + "Tile": null, + "x": 11, + "y": 4 + }, + { + "Tile": null, + "x": 11, + "y": 5 + }, + { + "Tile": null, + "x": 11, + "y": 6 + }, + { + "Tile": null, + "x": 11, + "y": 7 + }, + { + "Tile": null, + "x": 11, + "y": 8 + }, + { + "Tile": null, + "x": 11, + "y": 9 + }, + { + "Tile": null, + "x": 11, + "y": 10 + }, + { + "Tile": null, + "x": 11, + "y": 11 + }, + { + "Tile": null, + "x": 11, + "y": 12 + }, + { + "Tile": null, + "x": 11, + "y": 13 + }, + { + "Tile": null, + "x": 11, + "y": 14 + } + ] + }, + "players": [ + { + "IsPlaying": true, + "NameTag": "Jules", + "Tiles": [ + { + "color": 2, + "shape": 4 + }, + { + "color": 5, + "shape": 3 + }, + { + "color": 0, + "shape": 5 + }, + { + "color": 1, + "shape": 0 + }, + { + "color": 0, + "shape": 0 + }, + { + "color": 3, + "shape": 1 + } + ] + }, + { + "IsPlaying": false, + "NameTag": "Jérémy", + "Tiles": [ + { + "color": 0, + "shape": 3 + }, + { + "color": 3, + "shape": 3 + }, + { + "color": 4, + "shape": 3 + }, + { + "color": 3, + "shape": 1 + }, + { + "color": 3, + "shape": 3 + }, + { + "color": 5, + "shape": 4 + } + ] + } + ], + "scoreBoard": [ + { + "Key": { + "IsPlaying": true, + "NameTag": "Jules", + "Tiles": [ + { + "color": 2, + "shape": 4 + }, + { + "color": 5, + "shape": 3 + }, + { + "color": 0, + "shape": 5 + }, + { + "color": 1, + "shape": 0 + }, + { + "color": 0, + "shape": 0 + }, + { + "color": 3, + "shape": 1 + } + ] + }, + "Value": 0 + }, + { + "Key": { + "IsPlaying": false, + "NameTag": "Jérémy", + "Tiles": [ + { + "color": 0, + "shape": 3 + }, + { + "color": 3, + "shape": 3 + }, + { + "color": 4, + "shape": 3 + }, + { + "color": 3, + "shape": 1 + }, + { + "color": 3, + "shape": 3 + }, + { + "color": 5, + "shape": 4 + } + ] + }, + "Value": 0 + } + ] +} \ No newline at end of file diff --git a/Qwirkle/QwirkleClassLibrary/Games/Game.cs b/Qwirkle/QwirkleClassLibrary/Games/Game.cs index 2c32d3b..94f8b32 100644 --- a/Qwirkle/QwirkleClassLibrary/Games/Game.cs +++ b/Qwirkle/QwirkleClassLibrary/Games/Game.cs @@ -20,20 +20,24 @@ namespace QwirkleClassLibrary.Games [DataContract] public class Game : IPlayer, IRules { - public ReadOnlyDictionary ScoreBoard => scoreBoard.AsReadOnly(); - private readonly Dictionary scoreBoard = new(); - private TileBag? bag = null; [DataMember] - public bool GameRunning { get; private set; } + public bool GameRunning { get; set; } [DataMember] private Board board = new Board(15, 12); public Board Board => board; - + public ReadOnlyCollection PlayerList => players.AsReadOnly(); + + [DataMember] private readonly List players = new(); + + [DataMember] + private readonly Dictionary scoreBoard = new(); + + public ReadOnlyDictionary ScoreBoard => scoreBoard.AsReadOnly(); public ReadOnlyCollection CellsUsed => cellUsed.AsReadOnly(); private readonly List cellUsed = new(); @@ -259,7 +263,7 @@ namespace QwirkleClassLibrary.Games { for (int j = 0; j < 6; j++) { - if (bag != null) + if (bag != null && p.Tiles.Count < 6) { int val = RandomNumberGenerator.GetInt32(0, bag.TilesBag.Count); diff --git a/Qwirkle/QwirkleClassLibrary/Players/Leaderboard.cs b/Qwirkle/QwirkleClassLibrary/Players/Leaderboard.cs index 2971291..3a06518 100644 --- a/Qwirkle/QwirkleClassLibrary/Players/Leaderboard.cs +++ b/Qwirkle/QwirkleClassLibrary/Players/Leaderboard.cs @@ -3,14 +3,18 @@ using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Runtime.ExceptionServices; +using System.Runtime.Serialization; using System.Text; using System.Threading.Tasks; namespace QwirkleClassLibrary.Players { + [DataContract] public class Leaderboard { public ReadOnlyCollection Lb => leaderboard.AsReadOnly(); + + [DataMember] private readonly List leaderboard = new(); diff --git a/Qwirkle/QwirkleClassLibrary/Players/Player.cs b/Qwirkle/QwirkleClassLibrary/Players/Player.cs index 7533147..2f7ae77 100644 --- a/Qwirkle/QwirkleClassLibrary/Players/Player.cs +++ b/Qwirkle/QwirkleClassLibrary/Players/Player.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Collections.ObjectModel; using System.ComponentModel; using System.Linq; +using System.Runtime.Serialization; using System.Runtime.CompilerServices; using System.Text; using System.Threading.Tasks; @@ -11,20 +12,15 @@ using QwirkleClassLibrary.Tiles; namespace QwirkleClassLibrary.Players { + [DataContract] public class Player : INotifyPropertyChanged { - private ObservableCollection playerTiles = new ObservableCollection(); - public ObservableCollection Tiles - { - get { return playerTiles; } - set - { - playerTiles = value; - OnPropertyChanged(nameof(Tiles)); - } - } + [DataMember] + public ObservableCollection Tiles { get; private set; } + public event PropertyChangedEventHandler? PropertyChanged; + void OnPropertyChanged([CallerMemberName] string? propertyName = null) => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); @@ -41,10 +37,13 @@ namespace QwirkleClassLibrary.Players } NameTag = name; + Tiles = new ObservableCollection(); } - public string NameTag { get; } + [DataMember] + public string NameTag { get; set; } + [DataMember] public bool IsPlaying { get; set; } = false; /// @@ -53,7 +52,7 @@ namespace QwirkleClassLibrary.Players /// public void AddTileToPlayer(Tile tile) { - playerTiles.Add(tile); + Tiles.Add(tile); OnPropertyChanged(nameof(Tiles)); } @@ -64,7 +63,7 @@ namespace QwirkleClassLibrary.Players /// bool public bool RemoveTileToPlayer(Tile tile) { - if (playerTiles.Remove(tile)) + if (Tiles.Remove(tile)) { OnPropertyChanged(nameof(Tiles)); return true; diff --git a/Qwirkle/QwirkleClassLibrary/Players/Score.cs b/Qwirkle/QwirkleClassLibrary/Players/Score.cs index cb02b98..d8f193b 100644 --- a/Qwirkle/QwirkleClassLibrary/Players/Score.cs +++ b/Qwirkle/QwirkleClassLibrary/Players/Score.cs @@ -3,16 +3,25 @@ using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; +using System.Runtime.Serialization; using System.Text; using System.Threading.Tasks; namespace QwirkleClassLibrary.Players { + [DataContract] public class Score { + [DataMember] public string PlayerName { get; private set; } + + [DataMember] public DateTime Date { get; set; } + + [DataMember] public int Points { get; set; } + + [DataMember] public int Victories { get; set; } /// diff --git a/Qwirkle/QwirkleClassLibrary/Tiles/Color.cs b/Qwirkle/QwirkleClassLibrary/Tiles/Color.cs index 780d96c..e7e526d 100644 --- a/Qwirkle/QwirkleClassLibrary/Tiles/Color.cs +++ b/Qwirkle/QwirkleClassLibrary/Tiles/Color.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Runtime.Serialization; using System.Text; using System.Threading.Tasks; diff --git a/Qwirkle/QwirkleConsoleApp/Program.cs b/Qwirkle/QwirkleConsoleApp/Program.cs index 4754c99..6b57ed5 100644 --- a/Qwirkle/QwirkleConsoleApp/Program.cs +++ b/Qwirkle/QwirkleConsoleApp/Program.cs @@ -173,7 +173,7 @@ static void MenuSwitch(Game game) { int enter = 0; - while (enter != 3) + while (enter != 3 && game.GameRunning) { ShowBoard(game); @@ -186,6 +186,7 @@ static void MenuSwitch(Game game) WriteLine("[1] Place your tiles"); WriteLine("[2] Swap your tiles"); WriteLine("[3] End your turn / Skip your turn"); + WriteLine("[4] Save the game"); Write("Enter your choice : "); try @@ -215,7 +216,23 @@ static void MenuSwitch(Game game) game.EmptyCellUsed(); game.DrawTiles(game.GetPlayingPlayer()); game.CheckGameOver(game.GetPlayingPlayer()); + + var inGameSerializer = new DataContractJsonSerializer(typeof(Game)); + using (Stream s = File.Create("game.json")) + { + inGameSerializer.WriteObject(s, game); + } + return; + case 4: + var postGameSerializer = new DataContractJsonSerializer(typeof(Game)); + using (Stream s = File.Create("game.json")) + { + postGameSerializer.WriteObject(s, game); + } + + game.GameRunning = false; + break; } } } @@ -231,20 +248,20 @@ static void ShowBoard(Game game) Cell? cell = board.GetCell(y, i); if (cell != null && !cell.IsFree) { - Tile? tile = cell.GetTile; + Tile? tile = cell.Tile; if (tile != null) { - Console.Write("| " + tile.GetShape.ToString()[0] + tile.GetShape.ToString()[1] + + Write("| " + tile.GetShape.ToString()[0] + tile.GetShape.ToString()[1] + tile.GetColor.ToString()[0] + " |"); } } else { - Console.Write("| |"); + Write("| |"); } } - Console.WriteLine(); + WriteLine(); } } @@ -281,9 +298,9 @@ static void MainMenu(Game game) { game.GiveTilesToPlayers(); - Console.ForegroundColor = ConsoleColor.Green; + ForegroundColor = ConsoleColor.Green; WriteLine("Game is starting !"); - Console.ResetColor(); + ResetColor(); NotificationClass nc = new NotificationClass(); @@ -309,12 +326,40 @@ static void MainMenu(Game game) ShowScoreBoard(game); } +static void MainMenuContinue(Game game) +{ + ForegroundColor = ConsoleColor.Green; + WriteLine("Game loaded ! You can continue the game !"); + ResetColor(); + + NotificationClass nc = new NotificationClass(); + + do + { + game.NextPlayerNotified += nc.NotificationNextPlayer; + game.EndOfGameNotified += nc.NotificationEndOfGame; + + game.SetNextPlayer(); + + WriteLine(" --------------------- GAME ! ------------------------"); + + MenuSwitch(game); + + game.NextPlayerNotified -= nc.NotificationNextPlayer; + game.EndOfGameNotified -= nc.NotificationEndOfGame; + + } while (game.GameRunning); +} + static void MainGame() { + Directory.SetCurrentDirectory(Path.Combine(Directory.GetCurrentDirectory(), "..\\..\\..\\..\\Files")); + Leaderboard leaderboard = new Leaderboard(); - Console.ForegroundColor = ConsoleColor.DarkGray; + + ForegroundColor = ConsoleColor.DarkGray; WriteLine(" ===================== WELCOME TO QWIRKLE ! ====================="); - Console.ResetColor(); + ResetColor(); int enter = 0; @@ -322,8 +367,9 @@ static void MainGame() { ForegroundColor = ConsoleColor.DarkCyan; WriteLine("[1] Create game"); - WriteLine("[2] Show leaderboard"); - WriteLine("[3] Exit"); + WriteLine("[2] Load game"); + WriteLine("[3] Show leaderboard"); + WriteLine("[4] Exit"); WriteLine(); ResetColor(); WriteLine("Enter your choice : "); @@ -347,47 +393,52 @@ static void MainGame() ForegroundColor = ConsoleColor.DarkYellow; WriteLine("Enter minimun 2 player and max 4 player !\n"); ResetColor(); + Game game = new Game(); AddPlayers(game); + game.StartGame(); MainMenu(game); + leaderboard.AddScoreInLead(game.ScoreBoard); + + var leaderboardSerializer = new DataContractJsonSerializer(typeof(Leaderboard)); + using (Stream s = File.Create("LeaderBoard.json ")) + { + leaderboardSerializer.WriteObject(s, leaderboard); + } + break; case 2: - ShowLeaderboard(leaderboard); + Game loadedGame; + + var serializer = new DataContractJsonSerializer(typeof(Game)); + using (Stream s = File.OpenRead("game.json")) + { + loadedGame = (serializer.ReadObject(s) as Game)!; + } + + var loadedLeaderboardSerializer = new DataContractJsonSerializer(typeof(Leaderboard)); + using (Stream s = File.OpenRead("leaderboard.json")) + { + leaderboard = (loadedLeaderboardSerializer.ReadObject(s) as Leaderboard)!; + } + + MainMenuContinue(loadedGame); + leaderboard.AddScoreInLead(loadedGame.ScoreBoard); + break; case 3: + ShowLeaderboard(leaderboard); + break; + + case 4: return; } } } -// MainGame(); - -var game = new Game(); -game.AddPlayerInGame(["Player1", "Player2", "Player3", "Player4"]); - -game.StartGame(); -game.SetNextPlayer(); - -game.PlaceTile(game.GetPlayingPlayer(), new Tile(Shape.Round, Color.Blue), 0, 0); -game.PlaceTile(game.GetPlayingPlayer(), new Tile(Shape.Square, Color.Blue), 0, 1); - -Directory.SetCurrentDirectory(Path.Combine(Directory.GetCurrentDirectory(), "..\\..\\..\\..\\Files")); - -var serializer = new DataContractJsonSerializer(typeof(Game)); -using (Stream s = File.Create("game.json")) -{ - serializer.WriteObject(s, game); -} - -Game game2; -using (Stream s = File.OpenRead("game.json")) -{ - game2 = (serializer.ReadObject(s) as Game)!; -} - -WriteLine(game2.GetBoard()!.GetCell(0, 0)!.GetTile); \ No newline at end of file +MainGame(); \ No newline at end of file