finished persistence + added the files
continuous-integration/drone/push Build is failing Details

test_old_branch
Jules LASCRET 11 months ago
parent 87911f1ee0
commit 15e512aa86

@ -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
}
]
}

File diff suppressed because it is too large Load Diff

@ -20,21 +20,25 @@ namespace QwirkleClassLibrary.Games
[DataContract]
public class Game : IPlayer, IRules
{
public ReadOnlyDictionary<Player, int> ScoreBoard => scoreBoard.AsReadOnly();
private readonly Dictionary<Player, int> 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<Player> PlayerList => players.AsReadOnly();
[DataMember]
private readonly List<Player> players = new();
[DataMember]
private readonly Dictionary<Player, int> scoreBoard = new();
public ReadOnlyDictionary<Player, int> ScoreBoard => scoreBoard.AsReadOnly();
public ReadOnlyCollection<Cell> CellsUsed => cellUsed.AsReadOnly();
private readonly List<Cell> 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);

@ -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<Score> Lb => leaderboard.AsReadOnly();
[DataMember]
private readonly List<Score> leaderboard = new();

@ -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<Tile> playerTiles = new ObservableCollection<Tile>();
public ObservableCollection<Tile> Tiles
{
get { return playerTiles; }
set
{
playerTiles = value;
OnPropertyChanged(nameof(Tiles));
}
}
[DataMember]
public ObservableCollection<Tile> 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<Tile>();
}
public string NameTag { get; }
[DataMember]
public string NameTag { get; set; }
[DataMember]
public bool IsPlaying { get; set; } = false;
/// <summary>
@ -53,7 +52,7 @@ namespace QwirkleClassLibrary.Players
/// <param name="tile"></param>
public void AddTileToPlayer(Tile tile)
{
playerTiles.Add(tile);
Tiles.Add(tile);
OnPropertyChanged(nameof(Tiles));
}
@ -64,7 +63,7 @@ namespace QwirkleClassLibrary.Players
/// <returns>bool</returns>
public bool RemoveTileToPlayer(Tile tile)
{
if (playerTiles.Remove(tile))
if (Tiles.Remove(tile))
{
OnPropertyChanged(nameof(Tiles));
return true;

@ -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; }
/// <summary>

@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.Text;
using System.Threading.Tasks;

@ -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);
break;
Game loadedGame;
case 3:
return;
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)!;
}
}
// MainGame();
var game = new Game();
game.AddPlayerInGame(["Player1", "Player2", "Player3", "Player4"]);
MainMenuContinue(loadedGame);
leaderboard.AddScoreInLead(loadedGame.ScoreBoard);
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);
break;
Directory.SetCurrentDirectory(Path.Combine(Directory.GetCurrentDirectory(), "..\\..\\..\\..\\Files"));
case 3:
ShowLeaderboard(leaderboard);
break;
var serializer = new DataContractJsonSerializer(typeof(Game));
using (Stream s = File.Create("game.json"))
{
serializer.WriteObject(s, game);
}
case 4:
return;
}
Game game2;
using (Stream s = File.OpenRead("game.json"))
{
game2 = (serializer.ReadObject(s) as Game)!;
}
}
WriteLine(game2.GetBoard()!.GetCell(0, 0)!.GetTile);
MainGame();
Loading…
Cancel
Save