Compare commits
58 Commits
test_old_b
...
master
File diff suppressed because one or more lines are too long
@ -1,36 +1,47 @@
|
||||
using System.Runtime.Serialization;
|
||||
using QwirkleClassLibrary.Games;
|
||||
|
||||
namespace QwirkleClassLibrary.Persistences;
|
||||
|
||||
public class GamePersistenceXml : IGamePersistence
|
||||
namespace QwirkleClassLibrary.Persistences
|
||||
{
|
||||
public void SaveGame(Game game)
|
||||
/// <summary>
|
||||
/// This class takes care of managing persistence with regard to the information of the current game, allowing the last game played to be resumed even when returning to the menu or exiting the application.
|
||||
/// </summary>
|
||||
public class GamePersistenceXml : IGamePersistence
|
||||
{
|
||||
var serializer = new DataContractSerializer(typeof(Game),
|
||||
new DataContractSerializerSettings() { PreserveObjectReferences = true });
|
||||
|
||||
using (Stream writer = File.Create("Game.xml"))
|
||||
/// <summary>
|
||||
/// The main purpose of this method is to save the data from the game when the user quits the app, so players can continue it later.
|
||||
/// </summary>
|
||||
/// <param name="game"></param>
|
||||
public void SaveGame(Game game)
|
||||
{
|
||||
serializer.WriteObject(writer, game);
|
||||
}
|
||||
}
|
||||
var serializer = new DataContractSerializer(typeof(Game),
|
||||
new DataContractSerializerSettings() { PreserveObjectReferences = true });
|
||||
|
||||
public Game LoadGame()
|
||||
{
|
||||
var serializer = new DataContractSerializer(typeof(Game));
|
||||
|
||||
try
|
||||
{
|
||||
using (Stream reader = File.OpenRead("Game.xml"))
|
||||
using (Stream writer = File.Create("Game.xml"))
|
||||
{
|
||||
var newGame = serializer.ReadObject(reader) as Game;
|
||||
return newGame!;
|
||||
serializer.WriteObject(writer, game);
|
||||
}
|
||||
}
|
||||
catch
|
||||
/// <summary>
|
||||
/// This method is used to retrieve the information needed to resume the last game launched on the application.
|
||||
/// </summary>
|
||||
/// <returns>A Game.</returns>
|
||||
public Game LoadGame()
|
||||
{
|
||||
return new Game();
|
||||
var serializer = new DataContractSerializer(typeof(Game));
|
||||
|
||||
try
|
||||
{
|
||||
using (Stream reader = File.OpenRead("Game.xml"))
|
||||
{
|
||||
var newGame = serializer.ReadObject(reader) as Game;
|
||||
return newGame!;
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
return new Game();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,27 +1,39 @@
|
||||
using System.Runtime.Serialization.Json;
|
||||
using QwirkleClassLibrary.Players;
|
||||
|
||||
namespace QwirkleClassLibrary.Persistences;
|
||||
|
||||
public class LeaderboardPersistenceJson : ILeaderboardPersistence
|
||||
namespace QwirkleClassLibrary.Persistences
|
||||
{
|
||||
public void SaveLeaderboard(Leaderboard leaderboard)
|
||||
/// <summary>
|
||||
/// This is the persistence class for the leaderboard : it is in charge of managing all the parameters necessary for the backup and recovery of data concerning the leaderboard.
|
||||
/// </summary>
|
||||
public class LeaderboardPersistenceJson : ILeaderboardPersistence
|
||||
{
|
||||
var serializer = new DataContractJsonSerializer(typeof(Leaderboard));
|
||||
|
||||
using (Stream writer = File.Create("Leaderboard.json"))
|
||||
/// <summary>
|
||||
/// As the name suggest, this class is used to save the data from the leaderboard.
|
||||
/// </summary>
|
||||
/// <param name="leaderboard">The current leaderboard we want to save data from.</param>
|
||||
public void SaveLeaderboard(Leaderboard leaderboard)
|
||||
{
|
||||
serializer.WriteObject(writer, leaderboard);
|
||||
}
|
||||
}
|
||||
var serializer = new DataContractJsonSerializer(typeof(Leaderboard));
|
||||
|
||||
public Leaderboard LoadLeaderboard()
|
||||
{
|
||||
var serializer = new DataContractJsonSerializer(typeof(Leaderboard));
|
||||
|
||||
using (Stream reader = File.OpenRead("Leaderboard.json"))
|
||||
using (Stream writer = File.Create("Leaderboard.json"))
|
||||
{
|
||||
serializer.WriteObject(writer, leaderboard);
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// This method is used to load the leaderboard into the app when the application starts.
|
||||
/// </summary>
|
||||
/// <returns>Leaderboard</returns>
|
||||
/// <exception cref="InvalidOperationException"></exception>
|
||||
public Leaderboard LoadLeaderboard()
|
||||
{
|
||||
return serializer.ReadObject(reader) as Leaderboard ?? throw new InvalidOperationException();
|
||||
var serializer = new DataContractJsonSerializer(typeof(Leaderboard));
|
||||
|
||||
using (Stream reader = File.OpenRead("Leaderboard.json"))
|
||||
{
|
||||
return serializer.ReadObject(reader) as Leaderboard ?? throw new InvalidOperationException();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,77 +1,73 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
|
||||
x:Class="Qwirkle.Pages.Leaderboard"
|
||||
xmlns:controls="clr-namespace:Qwirkle.Views"
|
||||
Title="Leaderboard">
|
||||
|
||||
Title="Leaderboard"
|
||||
x:Name="root">
|
||||
|
||||
<ScrollView>
|
||||
<VerticalStackLayout Spacing="25" Padding="5, 5, 5, 10">
|
||||
<Grid Style="{StaticResource GridMain}">
|
||||
<controls:GoBack></controls:GoBack>
|
||||
<Label Text="Leaderboard"
|
||||
Style="{StaticResource Title}"/>
|
||||
<Label Text="Leaderboard"
|
||||
Style="{StaticResource Title}" />
|
||||
</Grid>
|
||||
|
||||
<Border Style="{StaticResource TabBorder}">
|
||||
|
||||
<Border.Shadow>
|
||||
<Shadow/>
|
||||
<Shadow />
|
||||
</Border.Shadow>
|
||||
<Border.StrokeShape>
|
||||
<RoundRectangle CornerRadius="3"/>
|
||||
<RoundRectangle CornerRadius="3" />
|
||||
</Border.StrokeShape>
|
||||
|
||||
<VerticalStackLayout>
|
||||
<controls:LeaderboardLine></controls:LeaderboardLine>
|
||||
<Rectangle/>
|
||||
|
||||
<controls:LeaderboardLine></controls:LeaderboardLine>
|
||||
<Rectangle/>
|
||||
|
||||
<controls:LeaderboardLine></controls:LeaderboardLine>
|
||||
<Rectangle/>
|
||||
|
||||
<controls:LeaderboardLine></controls:LeaderboardLine>
|
||||
<Rectangle/>
|
||||
|
||||
<controls:LeaderboardLine></controls:LeaderboardLine>
|
||||
<Rectangle/>
|
||||
|
||||
<controls:LeaderboardLine></controls:LeaderboardLine>
|
||||
<Rectangle/>
|
||||
|
||||
<controls:LeaderboardLine></controls:LeaderboardLine>
|
||||
<Rectangle/>
|
||||
|
||||
<controls:LeaderboardLine></controls:LeaderboardLine>
|
||||
<Rectangle/>
|
||||
|
||||
<controls:LeaderboardLine></controls:LeaderboardLine>
|
||||
<Rectangle/>
|
||||
|
||||
<controls:LeaderboardLine></controls:LeaderboardLine>
|
||||
<Rectangle/>
|
||||
|
||||
<controls:LeaderboardLine></controls:LeaderboardLine>
|
||||
<Rectangle/>
|
||||
|
||||
<controls:LeaderboardLine></controls:LeaderboardLine>
|
||||
<Rectangle/>
|
||||
|
||||
<controls:LeaderboardLine></controls:LeaderboardLine>
|
||||
<Rectangle/>
|
||||
|
||||
<controls:LeaderboardLine></controls:LeaderboardLine>
|
||||
<Rectangle/>
|
||||
|
||||
<controls:LeaderboardLine></controls:LeaderboardLine>
|
||||
</VerticalStackLayout>
|
||||
<StackLayout>
|
||||
<Grid ColumnDefinitions="4*, auto, 2*, auto, 2*, auto, 2*"
|
||||
RowDefinitions="50">
|
||||
<Label
|
||||
Text="Player tag"
|
||||
Style="{StaticResource ContentTab}" />
|
||||
<Rectangle
|
||||
Style="{StaticResource RectangleTab}"
|
||||
Grid.Column="1" />
|
||||
<Label
|
||||
Grid.Column="2"
|
||||
Text="Date"
|
||||
Style="{StaticResource ContentTab}" />
|
||||
<Rectangle
|
||||
Style="{StaticResource RectangleTab}"
|
||||
Grid.Column="3" />
|
||||
<Label
|
||||
Grid.Column="4"
|
||||
Text="Points"
|
||||
Style="{StaticResource ContentTab}" />
|
||||
<Rectangle
|
||||
Style="{StaticResource RectangleTab}"
|
||||
Grid.Column="5" />
|
||||
<Label
|
||||
Grid.Column="6"
|
||||
Style="{StaticResource ContentTab}"
|
||||
Text="Victories" />
|
||||
</Grid>
|
||||
|
||||
<CollectionView ItemsSource="{Binding Lb}">
|
||||
<CollectionView.ItemsLayout>
|
||||
<GridItemsLayout Orientation="Vertical" />
|
||||
</CollectionView.ItemsLayout>
|
||||
<CollectionView.ItemTemplate>
|
||||
<DataTemplate>
|
||||
<controls:LeaderboardLine PlayerName="{Binding PlayerName}" Date="{Binding Date}"
|
||||
Points="{Binding Points}" Victories="{Binding Victories}" />
|
||||
</DataTemplate>
|
||||
</CollectionView.ItemTemplate>
|
||||
</CollectionView>
|
||||
|
||||
</StackLayout>
|
||||
</Border>
|
||||
|
||||
</VerticalStackLayout>
|
||||
|
||||
|
||||
</ScrollView>
|
||||
|
||||
</ContentPage>
|
@ -0,0 +1,28 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<toolkit:Popup xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
|
||||
x:Class="Qwirkle.PopUpEndGame"
|
||||
xmlns:toolkit="http://schemas.microsoft.com/dotnet/2022/maui/toolkit"
|
||||
x:Name="root"
|
||||
CanBeDismissedByTappingOutsideOfPopup="False"
|
||||
xmlns:controls="clr-namespace:Qwirkle.Views"
|
||||
>
|
||||
|
||||
<VerticalStackLayout HeightRequest="400" WidthRequest="500">
|
||||
|
||||
<Label
|
||||
Text="THE END :("
|
||||
Style="{StaticResource SuperTitle}"
|
||||
FontSize="Medium"
|
||||
/>
|
||||
|
||||
<Label Text="THE WINNER IS :"></Label>
|
||||
|
||||
<Label Text="{Binding ScoreboardList[0].Key, Source={x:Reference root}}" Style="{StaticResource SuperTitle}" TextColor="HotPink" FontSize="Medium"></Label>
|
||||
|
||||
<controls:Scoreboard></controls:Scoreboard>
|
||||
|
||||
<Button Text="Skip" Style="{StaticResource GameButton}" Clicked="OnButtonNextClick"></Button>
|
||||
|
||||
</VerticalStackLayout>
|
||||
</toolkit:Popup>
|
@ -0,0 +1,40 @@
|
||||
using CommunityToolkit.Maui.Views;
|
||||
using Microsoft.Maui.Controls;
|
||||
using QwirkleClassLibrary.Games;
|
||||
using System.Collections.ObjectModel;
|
||||
|
||||
namespace Qwirkle;
|
||||
|
||||
public partial class PopUpEndGame : Popup
|
||||
{
|
||||
public PopUpEndGame()
|
||||
{
|
||||
InitializeComponent();
|
||||
|
||||
var scoreboard = game.ObservableScoreBoard.OrderByDescending(x => x.Value).ThenBy(x => x.Key);
|
||||
ScoreboardList = new ObservableCollection<KeyValuePair<string, int>>(scoreboard);
|
||||
}
|
||||
|
||||
private Game game = ((App)Application.Current!).Game;
|
||||
|
||||
private ObservableCollection<KeyValuePair<string, int>>? scoreboardList;
|
||||
public ObservableCollection<KeyValuePair<string, int>>? ScoreboardList
|
||||
{
|
||||
get => scoreboardList;
|
||||
set
|
||||
{
|
||||
if (scoreboardList != value)
|
||||
{
|
||||
scoreboardList = value;
|
||||
OnPropertyChanged(nameof(ScoreboardList));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public async void OnButtonNextClick(object sender, EventArgs e)
|
||||
{
|
||||
Close();
|
||||
await Shell.Current.GoToAsync("MainPage");
|
||||
}
|
||||
|
||||
}
|
@ -1,7 +1,7 @@
|
||||
{
|
||||
"profiles": {
|
||||
"Windows Machine": {
|
||||
"commandName": "MsixPackage",
|
||||
"commandName": "Project",
|
||||
"nativeDebugging": false
|
||||
}
|
||||
}
|
||||
|
Before Width: | Height: | Size: 228 B After Width: | Height: | Size: 591 KiB |
After Width: | Height: | Size: 586 KiB |
After Width: | Height: | Size: 38 KiB |
@ -1,42 +1,42 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<ContentView xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
|
||||
x:Class="Qwirkle.Views.LeaderboardLine">
|
||||
x:Class="Qwirkle.Views.LeaderboardLine"
|
||||
x:Name="root">
|
||||
|
||||
<Grid ColumnDefinitions="4*, auto, 2*, auto, 2*, auto, 2*"
|
||||
RowDefinitions="50">
|
||||
|
||||
|
||||
<Label
|
||||
Text="Player Tag"
|
||||
Style="{StaticResource ContentTab}"
|
||||
/>
|
||||
Text="{Binding PlayerName}"
|
||||
Style="{StaticResource ContentTab}"/>
|
||||
|
||||
<Rectangle
|
||||
Style="{StaticResource RectangleTab}"
|
||||
Grid.Column="1"/>
|
||||
|
||||
|
||||
<Label
|
||||
Grid.Column="2"
|
||||
Text="Date"
|
||||
Text="{Binding Date, StringFormat='{0:MM/dd/yyyy}'}"
|
||||
Style="{StaticResource ContentTab}"/>
|
||||
|
||||
|
||||
<Rectangle
|
||||
Style="{StaticResource RectangleTab}"
|
||||
Grid.Column="3"/>
|
||||
|
||||
|
||||
<Label
|
||||
Grid.Column="4"
|
||||
Text="Points"
|
||||
Text="{Binding Points}"
|
||||
Style="{StaticResource ContentTab}"/>
|
||||
|
||||
|
||||
<Rectangle
|
||||
Style="{StaticResource RectangleTab}"
|
||||
Grid.Column="5"/>
|
||||
|
||||
|
||||
<Label
|
||||
Grid.Column="6"
|
||||
Style="{StaticResource ContentTab}"
|
||||
Text="Victories"
|
||||
/>
|
||||
|
||||
Text="{Binding Victories}"/>
|
||||
|
||||
</Grid>
|
||||
</ContentView>
|
||||
</ContentView>
|
||||
|
@ -1,27 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<ContentView xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
|
||||
x:Class="Qwirkle.Views.ScoreboardLine"
|
||||
x:Name="root">
|
||||
<StackLayout>
|
||||
<Grid ColumnDefinitions="4*, auto, 2*"
|
||||
RowDefinitions="50">
|
||||
|
||||
<Label
|
||||
Grid.Column="0"
|
||||
Text="{Binding Nameplayer, Source={x:Reference root}}"
|
||||
Style="{StaticResource ContentTab}"/>
|
||||
|
||||
<Rectangle
|
||||
Style="{StaticResource RectangleTab}"
|
||||
Grid.Column="1"/>
|
||||
|
||||
<Label
|
||||
Grid.Column="2"
|
||||
Text="{Binding Score, Source={x:Reference root}}"
|
||||
Style="{StaticResource ContentTab}"/>
|
||||
</Grid>
|
||||
<Rectangle/>
|
||||
</StackLayout>
|
||||
</ContentView>
|
@ -1,43 +0,0 @@
|
||||
|
||||
|
||||
namespace Qwirkle.Views
|
||||
{
|
||||
public partial class ScoreboardLine : ContentView
|
||||
{
|
||||
public static readonly BindableProperty NameplayerProperty =
|
||||
BindableProperty.Create(nameof(Nameplayer), typeof(string), typeof(ScoreboardLine), default(string), propertyChanged: OnPlayerChanged);
|
||||
|
||||
public string Nameplayer
|
||||
{
|
||||
get => (string)GetValue(NameplayerProperty);
|
||||
set => SetValue(NameplayerProperty, value);
|
||||
}
|
||||
|
||||
private static void OnPlayerChanged(BindableObject bindable, object oldValue, object newValue)
|
||||
{
|
||||
var bin = (ScoreboardLine)bindable;
|
||||
bin.OnPropertyChanged(nameof(Nameplayer));
|
||||
}
|
||||
|
||||
public static readonly BindableProperty ScoreProperty =
|
||||
BindableProperty.Create(nameof(Score), typeof(int), typeof(ScoreboardLine), default(int), propertyChanged: OnScoreChanged);
|
||||
|
||||
public int Score
|
||||
{
|
||||
get => (int)GetValue(ScoreProperty);
|
||||
set => SetValue(ScoreProperty, value);
|
||||
}
|
||||
|
||||
private static void OnScoreChanged(BindableObject bindable, object oldValue, object newValue)
|
||||
{
|
||||
var bin = (ScoreboardLine)bindable;
|
||||
bin.OnPropertyChanged(nameof(Score));
|
||||
}
|
||||
|
||||
public ScoreboardLine()
|
||||
{
|
||||
InitializeComponent();
|
||||
BindingContext = this;
|
||||
}
|
||||
}
|
||||
}
|
Binary file not shown.
Loading…
Reference in new issue