diff --git a/source/Trek-12/DataContractPersistence/DataContractJson.cs b/source/Trek-12/DataContractPersistence/DataContractJson.cs index 2307f82..d53d6fb 100644 --- a/source/Trek-12/DataContractPersistence/DataContractJson.cs +++ b/source/Trek-12/DataContractPersistence/DataContractJson.cs @@ -31,7 +31,7 @@ namespace DataContractPersistence /// /// Load all the data from JSON file /// - /// A tuple with the lists of players, games, maps and best scores + /// A tuple with the lists of players, games, maps and bestScores public (ObservableCollection, ObservableCollection, ObservableCollection, ObservableCollection) LoadData() { var JsonSerializer = new DataContractJsonSerializer(typeof(DataToPersist)); diff --git a/source/Trek-12/DataContractPersistence/DataContractXml.cs b/source/Trek-12/DataContractPersistence/DataContractXml.cs index 8255ecc..9ffa396 100644 --- a/source/Trek-12/DataContractPersistence/DataContractXml.cs +++ b/source/Trek-12/DataContractPersistence/DataContractXml.cs @@ -29,7 +29,7 @@ namespace DataContractPersistence /// /// Load all the data from XML file /// - /// A tuple with the lists of players, games, maps and best scores + /// A tuple with the lists of players, games, maps and bestScores public (ObservableCollection, ObservableCollection, ObservableCollection, ObservableCollection) LoadData() { var serializer = new DataContractSerializer(typeof(DataToPersist)); diff --git a/source/Trek-12/DataContractPersistence/DataToPersist.cs b/source/Trek-12/DataContractPersistence/DataToPersist.cs index b78b204..9c72c68 100644 --- a/source/Trek-12/DataContractPersistence/DataToPersist.cs +++ b/source/Trek-12/DataContractPersistence/DataToPersist.cs @@ -19,7 +19,7 @@ namespace DataContractPersistence /// List of maps with their boards /// public ObservableCollection Maps { get; set; } - + /// /// List of best scores /// diff --git a/source/Trek-12/Models/Game/BestScore.cs b/source/Trek-12/Models/Game/BestScore.cs index cbe2923..44a0ad5 100644 --- a/source/Trek-12/Models/Game/BestScore.cs +++ b/source/Trek-12/Models/Game/BestScore.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Data; using System.Linq; +using System.Runtime.Serialization; using System.Text; using System.Threading.Tasks; @@ -10,12 +11,23 @@ namespace Models.Game /// /// This class represents the best score of a player. /// + [DataContract] public class BestScore { + /// + /// Name of the map. + /// + [DataMember] + public string MapName { get; private set; } + + [DataMember] + public Player ThePlayer { get; private set; } + /// /// Number of games played by the user (on a specific map). /// private int _gamesPlayed; + [DataMember] public int GamesPlayed { get => _gamesPlayed; @@ -31,6 +43,7 @@ namespace Models.Game /// Best score of the player (on a specific map). /// private int _score; + [DataMember] public int Score { get => _score; @@ -47,8 +60,11 @@ namespace Models.Game /// /// Number of games played by the new user /// Best score - public BestScore(int gamesPlayed, int score) + /// The name of the map + public BestScore(string map, Player player, int gamesPlayed, int score) { + MapName = map; + ThePlayer = player; GamesPlayed = gamesPlayed; Score = score; } @@ -69,5 +85,29 @@ namespace Models.Game { Score = newScore; } + + /// + /// Redefine the equal operation between BestScore. + /// + /// The object to compare with the current BestScore. + /// true if the specified object is equal to the current BestScore; otherwise, false. + public override bool Equals(object? obj) + { + if (obj == null || GetType() != obj.GetType()) + { + return false; + } + BestScore c = (BestScore)obj; + return (MapName == c.MapName && ThePlayer == c.ThePlayer); + } + + /// + /// Returns the hash code for the current BestScore, in order for the Equals operation to work + /// + /// The hash code for the current BestScore. + public override int GetHashCode() + { + return MapName.GetHashCode() ^ ThePlayer.GetHashCode(); + } } } diff --git a/source/Trek-12/Models/Game/Game.cs b/source/Trek-12/Models/Game/Game.cs index e0f1059..c5e30c5 100644 --- a/source/Trek-12/Models/Game/Game.cs +++ b/source/Trek-12/Models/Game/Game.cs @@ -3,6 +3,7 @@ using System.Collections; using System.Collections.Generic; using System.Collections.ObjectModel; using System.ComponentModel; +using System.Diagnostics; using System.Linq; using System.Runtime.CompilerServices; using System.Runtime.Serialization; @@ -23,12 +24,11 @@ namespace Models.Game [DataContract] public class Game : INotifyPropertyChanged { - /* Persistence */ + /* Persistence Interface */ public IPersistence PersistenceManager { get; set; } /* List for the game and persistence */ private ObservableCollection _players; - public ObservableCollection Players { get => _players; @@ -40,7 +40,6 @@ namespace Models.Game } private ObservableCollection _games; - public ObservableCollection Games { get => _games; @@ -52,7 +51,6 @@ namespace Models.Game } private ObservableCollection _maps; - public ObservableCollection Maps { get => _maps; @@ -64,7 +62,6 @@ namespace Models.Game } private ObservableCollection _bestScores; - public ObservableCollection BestScores { get => _bestScores; @@ -74,7 +71,7 @@ namespace Models.Game OnPropertyChanged(nameof(BestScores)); } } - + private bool _isRunning; [DataMember] public bool IsRunning @@ -134,6 +131,7 @@ namespace Models.Game public void AddBestScore(BestScore bestScore) { BestScores.Add(bestScore); + BestScores.OrderByDescending(p => p.Score); } public bool RemovePlayer(string playerName) @@ -144,6 +142,7 @@ namespace Models.Game return false; } Players.Remove(player); + CheckAndRemoveBestScoresDependencies(player.Pseudo); return true; } @@ -153,6 +152,7 @@ namespace Models.Game { if (index.Pseudo == pseudo) { + CheckAndChangeBestScoresDependencies(index.Pseudo, newpseudo); index.Pseudo = newpseudo; return true; } @@ -161,6 +161,32 @@ namespace Models.Game return false; } + public void CheckAndRemoveBestScoresDependencies(string playerName) + { + List bs = new List(); + foreach (var bestScore in BestScores) + { + if (!bestScore.ThePlayer.Pseudo.Equals(playerName)) continue; + + bs.Add(bestScore); + } + + foreach (var score in bs) + { + BestScores.Remove(score); + } + } + + public void CheckAndChangeBestScoresDependencies(string playerName, string newPlayerName) + { + foreach (var bestScore in BestScores) + { + if (!bestScore.ThePlayer.Pseudo.Equals(playerName)) continue; + + bestScore.ThePlayer.Pseudo = newPlayerName; + } + } + public void LoadData() { var data = PersistenceManager.LoadData(); @@ -192,6 +218,12 @@ namespace Models.Game Games = new ObservableCollection(); Maps = new ObservableCollection(); BestScores = new ObservableCollection(); + var mp = new Player("ludfulot", "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"); + Players.Add(mp); + AddBestScore(new BestScore("Dunai", mp, 1, 54)); + var mp2 = new Player("reneveu", "UklGRvYjAABXRUJQVlA4IOojAADQ0QGdASo4BDgEPlEokEajqS2jIRWoabAKCWlu8YA7RrzDwcwQOf8vz48i/sf/+7fzMz0npw9IL97pim6e5I8wn/PkLOCf/8wuAf/my2l508Pgn+m7S/955rwUn4li+4BD4sszjf7xT8B6gH6A9V3+8/aHzm/nH/E9gvpGfs9///dAAwj6x5mZA2Mx9Y84TbUT1jzMyBsZj7gzH1ry+rHmZj6x5mY+secJtYfVkO8/XH49kmYYfly8CRDm7UD3YETgp3GDMwEr8WeZv9BjzMyBsmsR2fizzQdfecE4iHy4fnrKGXsD9xVdqP/H1jzLu3xFHZsfYNvskbxdXLqWj3Ixd3WPrlC014lNbSxBLVmAhCZuZj6xswTTYEINaZHHxSDjLfruD/24h+mPwkukMHYw4QPA6DHmZYm5d2+J/1tu5HIxaFYAkoJASaulbcKxcxob3SzzM2PIyjltnmY+seYFNquiLB9YIVfBrKekqkfXtoQstgp0t6LiBaKbzysvTZNuN8TTGtPoMeH/t1ax7b8VrJMl397sUVLd/cKi70GKUKpnk4EtVrrA6IBkGtZ+Gj01qgC14lK8HUI5ICrd/cPyNZmLNMnyJSzIHzG98p8FNTZ4AHgVAr4qFiUNEqPcP0I5wveCAEqt2vyxLVzghL/d9TYF4TqOUJx5l3SQWtylNBGKj0P0q37h+hHNpdqnfdnmETtRJ+NgT85yCRN5MBrpby8TcAGK11V8UkjDDZ9Rq5JLv7h+hDW2b0AoRw5lmTB4Tj4Kn2pvTtSRBnxeq9U8zYEVLunXF3D8COcNFouJEHUrm0d4HjBcfaJ3hEEQyEvcbSf3RvjUx7vhSMJT++FL48AvvtY8K39w/QjhzRaa9N39aEWCSmkcNtKZ8wc/0v91MhA/hP+2CTm7UP1YYbxbv7hmV+whYGMIWBjCFgYzT3gUCOLg5Nf3D5b6a9yge7RXO+UEemD+9VrYIp9x8tg8wqVV28hR76LAxhCwLgZMb9FgYwN5w06YGD8BWuUmDKVVXYHmwzVcbpjRNqQE+ge7UH47d9QWBjCFH+HT8ZoTZaxlyrh83lHs5WdkCZxckDuYCvuiwUPe0XgRKCH5LdTvCToI1e+LDtZ/CfnU/kjqVzhm6ucDr0ylO4BRsS2VNVCTAkfM3QCwXZtuBbEKu3kKMXRLxocViXJxoEzg+u/uHwwnhIKVl3AAj0bsTvkDz+afNeOctLO090rI9Ak+ghxPep6B1aU2+NtQL4jQD8dd3ToftaEhT9FgV5BGSi6ApigkDw8KFszF1dBBDrIBosOhIKJTZSEeGCfQJYeqZQGo1pirdpZUWcDLksY84e7ZaX/QcNfiTEAdpU4Ml2qEklpCjQIbvIUKFlFoURJGPE86PN0sEXKHP2xhuVJFLo9BbuanH5kF/tYuHbOlVT/JKF0RLq68U4JKuX5Kh9y1BqJQmppOoIdmPYXI0pLT4sCqF4gmHh30kvQuBmKP7Yw3Kj+VLyY+yAmy0rapd8l6YRZ/S/zW4Tiwf6YEqyh73U52xZFH8qX7U73MQCn9J7ePl13wDQR1DBeiXbp7T/zrUv2xhuVH8qX6CU6h9uuQRnsvDlQa+dxHmFrLzMoQ8hTHxAIarnhG2dkZO+eokyF3G1OjAPfcx6iwK8gRYDlq7mJUfwWgXKGbxTHT/0kUpDvdiO061TjW58kcB03CWzZOWxhpWAThqaBVH66RPFHUU+33H10m8pqOjamBHaBIG3k1z7dofgVVIy6/CDrvbNIu7hg/qHzDSIICieq2XsziX3Y2LiVrOBYUSpf/VsPMj/KAtqYDoQ6/RF/E1FF4SfyQoJK7t//FaCNmn+aXm9Tv8MOdvH4kP/vYWdzhjECIpLSijOq3sqXhlrL7JMwUikOhTTFhrEwk+jqwhlEsrxQNyolqKby06r09Ik588HmrafUPWu6Sy2msZgMODMDxsIgelO9M7TwOmmb+VLw3IV22N1Hlw09R/7pJIrRVoLVIT5UvJC4HTDullG93xIsgc2lDFFIDhSEmf79fnN5TIaH0ttI6l80bc4Cq/lboN+9+snKeRWSJ6MsRjtFsl1L7gfLjy2w0san22Z/4tjDSXwETPSHRof66B3ScEa9SDGwSLGJUIfFLn90VZmqYeJpMRiDVXyqSnqep6nfTpvFdQQvxdEBS+z8dHREIkUP9zZxz3ctP5fuUPbwkCR+fpTqn3LXe8PxFNdAw48vvVO/tpqRrrPXVLiGNqGtEpgHdWc70/fYBxfrRta+DKVpTsmZyDVyCNBKVlKtl8PIQDlV8PACT4iOIxHPSKR7oJQPfcwwrrmBEoSLG+tQ2p0+4M2jZhUVLgBmnkIR6c6+hkaA5Cu3r8jYSXTFmt6GnpzalNLE96J3n9Cz3HhW/gtT7mHB6mt9/Y1AxIgKg6MLFr/MSqdyUI5w0WtFWwRswDbPAaZMZX9Y1eG7WZVH8odb/dDgyfmmFKO0sysCVXC6nJfHeqXo2afn8PmJEtZK19WMcAihUjAvOcNFu7FXCCyFFMYaMt7hCu9SgtIkM/lVACe+TOY3gXqXZzYGVf6v6wksk446l5U3MQAknDOqGznepbTWSKs07p4dg4+MmdN0OBcJOt71Esu9wOMnXZuyQMsDZn1CHwL7b4cBWw2kCS0/lgxW9+tU0IqV66B7tOabviQW8vEcLUcSPycQjm8R5cHlKQR71tvXf8jnByLYXoVs3l8N0mYj7JJn/D4099TOg1445ahO41y+L68dTRzfW1vdBL5NPXPASOOC+HrcDmUlD9b+4fkaTnh/DYR6WBBBsIO9st7knBuob1kOGjVjy+G6Vf62bVmrMtR3jVlmh2Wnzb1H6Ec4IQnu1Aw488zVDxNzMwUF4AKF2YXMP/4/IXnfJZUFXiP+jNNaQbMhbzwdQdx5h5zJqT5wGZiBybeoHaRgnKH60HGq4Ej14NtU1i1uSg+RsyNVUrmMiuVNy7bBnR0Tl/ggUMqJCkRgbmYsEV+xVsm051O1hMRx5lg1ypHz8wqVfKlenLA99zDznLNtZRX4L8sWnHeg/JC6PvRmhULaLt2+nbKeyq2g+9qQCw0NlNMORWwTDV2OC/kl/T78yVSosJuH5sDVzmu/hT5cc8evGAH5aRC5Y8VBI71a5iSbEl8nBKB6phCg9Rrx4olD9SCMXrGrv96TmFvCvkl6jeRtw2tCSWp0nUkFaJcT67nLh+Wd/eqlvNZe0wfHCt1yv496xDFYQcv/x6VPSK2u2LzYSe5BXQR+YVKtohFdBkXbqpXroBTq0UkzRmNeEeHfWH9iA6Cp9zC+wTcI8Iyjdn4snLoWpc8hZJLv4UCsTC8lYxCMPqdEoudlSQh42A/ygLbr1po58tgKj/jHw2SvIj/Ggig9i9zWbOQqEku/Av/yklqdS+cvu054Ps0Zqr+5wWBTSA26oaqqPuh+W3TAssRChssGz8WbpBjhtaEWRzGNykzeI0ovhfbT0wPlTCWd+o5JgoQwsEOTSdQVPOT/1ArrDnT66L83V5dl2XUER9kUjs+kKrrqLnPzCpW4cLisiKseACcMTwrBtsBF6YmBMb+DsYAwG4QMOSXsCOGUiVm7ry+/YV/r07eD+JQIJNf211tex01PxfawjUgbT0xsfHu+HqmKj3KUeCpcIZRYOXmsR9QGg8Ki+mkXffWCjuQo98B077ZSh86NQz6AZ+pw0W7+2KnSIcPmitXnnF5N1Q5h6wn1UGFdroRxV3B9DTmPK2k6WpjYeX8hyHkchyDrwIKwcnd7wyf3WVqG8dwQMRpptmAxXFqlvjZngUsnMUsXB9Lm9NivQAhcI9PPl9XkUb8zDsx7h+hHMVknAQMeXfEBcsLMJ6lsKWkkATFW6xiqSgTPLu8Rny+ryE6JME5BUJJd+t2e4fm7p12285ePrBIzPxbpO7fFFGy7C/OMwwbHny+ryE5PH0VbWE0Z7h+eHsWl82OWaiUDYJ2GjAAlYj6p0SDFwAcAXcLDR72IJ9SFP7lu4MklqdI/xzY8u9fM4zOd8m2ZJTeC3NQkYRW0Y0QftrybBmC7MIUvl9Xi1SjkLJJaoHd/aUKRg0Vfqzvk1nopz9mJEDYmPSaBa1TNsaEhT75nj3HznzZslRnkeQ0VHC7LqbmIjFpNnoXYFkGLMkGghtci5SCd47EYcSO9HvG0Thz4hmcCHGD3Gg1CzqwBdmygHDwfwaUzERrv0136KpCMuIIwa8TOrVJSZ6kww9Ngeg7A2lCi7Q/xchSNR8XxYw4OB77BmI6xR2PXy939v8pcFgVC6GrIUe+dQMYQsJuvD5AQX2EQQYSeqcd9D0fy6xrgBbLu6RpM01iOT5qF+P3QKLFS7FnVpdsRSucNFu3uS5OELUApeuwG16rNANqRJjUe5xYUS/7F0W0CpbUptCpbi7h9fAvceeZBQCvoqIApNHGxNP1POIAeAarjTPdlzUN4/RzayVzaD1HRRvSnX/bTeI8WDWtiHYGKIl1kJmDMP9WNmGtixf7DJm3F3D9CObTFzEDcE/n26fgwF+awWg+2mqyjI6p5XGRKLoQOwNw5Is5G80M3tGGTJAOSvl7prrWi6vqU1dJB/a/QmolAyF8RnyGIxgIYJjVClgG/GIgTKcSpwQXxTF2CRaRYh9boVvIBJdZcCaYlvEjDv42Dyh6fKwDnB2YwsLbXwTQBPGPlYvGwomNQ6o0gIfzCEsaQsy0S7oIX68pfuMReQe7Fa2vPKwLOa1kaopI76yfPUKwcmydNiVfYh3NDmJVbtg8lNE5/f43f6C4W3MLAusEmH6nnNSAgRMNhJeNovIZ+cMssFbU4ps3YyYAwa1qx4g2iuqvlnf3qnkypLrOie/OZO1PbGyrdf2QNCCeEf3Oa4FL3MNb5QMlYtZM2zAYkS1hVJQU1StTiCletJ8spMRGRfYlbJg01dH11Uxd7/83sqX7Yw3NwF19Ktg+paJvL/7aRatcLT6wr3XdPG9VvmoXPeVIAA/vqbeEDiN843UG6WNPk1OaBoCUpw9yVX0h906sKkYB20ujwd1Ac8ZYX+ptAWkqDvHEz+M9qDuvWNcpRKRBT6u7N8Y7WYWn/th+GlD+rBxxNr7p9VP1dmYTVK7zlQlBSTT7sV/HEUvUMK3/yJGWS487cMIkJD4cSEWG5k07UldtZsR+jyLNYKXoCW3AV7iceH5cpXBQGxRycqllAXjELWVfXMRDmces3CJEhMtMZZL/YwppmaaGoq+xRSY4T3AsoNGbsRuCmIyLC0uhz30B9QMgmd+d+uL8eCi9X3/uLRdAQqyjm1uikkvIK53OuJ+YXnbvrrbO8JKGl/IpnUqNzOkBbOZmoRrlaMzts+ySNedlUlMZc+XtvAowhG5ZenwUu6c5Iuo6QtcBvOydAAvwQ6O4gme1b54CV0B8tCM7gO8Nw8OjGGHqQhIeGtocZJpdEr76qJsyZLlGsxM2fO7sla5M50ZbAUEuuhcsUR+uzzVZzRY4KXYD/kpiz6d4qCBd4pTyCb13G1ADNUkZOi4XIaVTghStxK8pZRdwJP1S6bimHi6f3L7s54uySTulNskWrjlNPvTM/UW4YL9SmwbhbZ8X6YTPlvQCOUITsPcDf5dKklZPsuVVVKNsfuClJjfsEAlaXkaYC6tNF24Aef5wn9we0e4iKkXEvJip3ciL6drY5x17v1Ko3CgNCO34Vjo7CdlDipkqkllJh7gR5UkTQXeo9LkkMerzz1szGHmLPq7gqL9R4R/2OVZNjG13dAQ5euyD2ibgWjIaf3l78xjb6hAwYDRhEM8y7L+y8bQ/0bfOnr0iUSy7tdE8+8/R8v+2yzZliV9EPREpz/tdqsFfvUcRXZu7EJjX/ULztb1MShTLAAdVBElBlcP6m0fSrCBLgxYFdfZLKrAVme4XoGhtHN7tjhuLq4++ujSpADqfc8b1N71PTYNadfAtbSosfE4FqCCBPRn8hX0rmrmXEjOAGpWUpHA2AQ/HGEmtSG0bXJsaF6RfA8NlG1ya37h9fA6i9odW5usjuKhzRvWPIquKevzk5JnnYY0K1ikrtL90XrAT2iwKesCkjCSSnWYxFrTNXgKwvI5rgSVzR/Wm4cOZ2Q0hBSCx9oR4NM767JOsm4VCiif9Y3afzJST7j7Ghe6lkhEQ3rahsCiLMxbFZRTWXvvDg7iTfkcndmeeJZKlnJxP1WxMw5ywP8ukTlC/HtZ9IaFI3WFxrAwxz87sC5ODkTQIqPhuA6zHZtraiiPbw+8M8MlGNw+hh/SMbr+0ANiK403bkWeqL/nNb4rFr0wQ7fm0vhkIN401kP4cIzkcMrBQwXyKVZjR2vfCe2rWrbgjD+7GGxOeCfKrC2grCmk52NG5YJ0AcgcecHLU1q9a2iDJab+E4G+Qv6qn68hj16SpDQBoDDlRp+c7n1jUq43pFYPxFhHJEh3Veykbq31lenN6BSEaG3CpjlKKd7SuM0LKxct3l01CpmSIJvqeSReqALYFcStEt01MF65REplOud9FLv04JQ+1cJUyDaPYG6/JactfFzGi5purlnScgd4SIMxskQQzmF8W4SNG15eMbLMF0TGucoFTnVZQPnGooyJ3bz1mu6b2DExPbU8GpPU0IKvGAvZb9jK/zqBLXbIFCI/M83rCkVLuCmFfBZB9pfr25QcCy5Vq0rz0//bLvePlgdrm3dshIAUz2ocdHv61Dd3fnJECdrDFMSMvS62Hy1Fkv42DvSBWmQsQeswdDvwcqeMDQr+gFakM4FMJ3UrJTIb9P/SoWvOEr27+3MMeTSqaZEC5hYdphsuicQJEHWUdGyNrYTTYafuMklMplSQ3ir7Savmv/ECrp530/Cb8cAIlV4+RoN2bd/1+/wzKN+LijWDPvlu2W0sDTYLTmenxP/kaHG34Q6gBznvLruGn9oY73nsV4Uo9Fu6ADSYO7U7XkGUJpLV5VcYJdS2FeVLKQMfn8n26zzeSiPNGoFauZl5QgpHX8SX2oggFBAR2bU/QQByDfnz9XNZUSBZies9vmBSsVzhJTR35L3TXagJvxzTtkTqmNOZMjLOc1WCRpo/l2uIG6Hg0UTgfoGsgMEkgYxT1Pw2f07BkFO4RlprRJGQLwZRCEVTGgAIUxt5p+mqt1gjrASd1otMlMetwwP613imzHd9CA1ZDVm21l2lsRBpGUKXKNG6Tp1XNL/1u9IXL9gDBHeaA/JoE1hFezNZbuAYE5KEaFR2eyxMCJsU98u+0V/M+DkfQTWzeZguYrxlPPJjbXV9erWDOYL7gUMi/iyj2rbcEUp8ZZPnE66oIC3hHBrqtn3SgsO3JKzXMuvM2CJMNBP9QCJz8SNvqJKfEyriW6Bko86CjE/g0SpIxfo5AeMHOV9C04occDICbb9AyNqWsdGhFIq+TVZiSiczZMSYMX7s6m4IP0Xfd8NV2PUnv/fNM/57NXSZNSi/PdkKqCI4AlghrhHNjsp+DxKX2rF+w4Gv6mpbBmKKa+ueHI4hxiG8yGckP+8lz/eEvAZuwz5OI1s9hoP4cWLT8bUrcfSK65IOma2Gu2oroBwRyYA5tMDSWz5heGXV3sEd/4fAU12nkWjsiQlh6WxF3LrcHTwcDHPPimKk+sJRl267Kk4Rnt0fUvVpAI3s4MS8Vn+1bgkOpXPz3qxOBIlNGw9ieFGJM7mz5wRegwNCkBWTBuEEjYCAQFdfOh3U7NJebfyK3+wexsPgv5og4YcO1FzIM2Myju6BeC21Zn4j9ecJsQz6iHYzFsxUGEUtYGLaGkeZTZQbuxq2d6wk/lLkMMRwm8vAZEGtrAQOrQMsC6YF42IsNf3uMclbtVDtHQ++4OuxGvJATsIjyQR+6BFx/CE4R2qrHTCYMo6sI74oNQ06eT91vgGmAWo78lm9+gcNW5n160nJdKcAhCnuD/HDQCgcSsfqhTkc30Pta4zgw/T+pgInl+BNVwZ7+IsHPHyI/BylDjUk28gQRug6QwPAIV7p4cvtOvjrRII+x8Go2oBp7AJ+fyZi9+2gK7foPF7oZwzzJaeewl1I6AsbdLi+EEkQZ/Qp9HYnu32s+8UR85BjfoYy38uGu3/mAauVfrf7Jaxfvl4NmlxT6XdhDNXkBtAYbdbTE1fwptsFHViE7tOR3jGUfNRPW4VgqFRC3GWC4gbPWf6SLGpnHBXBFFikSi+cseObHOZR/YezCZgyo567W/DsNoxWEwn1o4lNbR5IpTjiUEQBw9Sn8sk1x6Xa2jPZcKSLxS5DhVPy94eQquefG73dR8oaGbiL17dD0bUBJo/9Xc+2yUDGoayNNSprJfZY6lsRsG9YXj7KBi49cSYelEFVi0gJtbDEhiknMfuq+I9VHu9APNtXIOipThjS4PFXgm4TjsPXv6ngTtVDgMqev54E+3zPEOpS1Taos+HJWsHPZxwJEy0GEd2fJcmC8zp89/z2jvcjmKLi4T6xi165MBTCv3bD+DLkt1vFfHzutluajMNmXMAoP0Mk+fHVPtWA9mocZhYf/WRJCrQpgd7MKk61knF1Q+GZKFOQjdTWb85oMt23ESK3WnsrAbCNcaQxzk9al2FAUQNyNb3c72RttlTijhHRPkqbo/YIfGkZM7DbH/jrU2H3yDEHpVj3OxGs3LmKsT5r9NDDw5C2lsEeoQLXCeNjzxZE+Zc5zPNPiHkmXUznVOoNZb9k8yKxurcsR3ohRoD/QMxegbqZZLPv4SDH+kIdu4m0gIQkvPuOJJ52A6n1qBJ6kQH75ngNG4qSbFQ4SVPUwSu0Nqi++E1eGQFzS0YAyXMXbEgrz+gF7f91zd9it1TNtAB0U8qAWmjaBHIDy6CWF5Q3TiJW2vUmLfTNZKom0+Or5lZSypiTsoo7UFYMchx/nR7h2rLjlUCEVpUt9EaKTcnI5osermC0G33J5TX1peWS3feRTW4hdes14H7O/q5r8RE6cm4I8xT9FnZE5U+eHQlv20vBU7R4RTk92J1o5HEeO3xkIIjx/Plys6v548ufbf/3GW83/SKv6hVrGdcKRWZcb0/VzWVWdktxbxtml+3cZtPeSvpJ8P0/SD0Kp8JKosZ+pDEy/e/dCc2J3KjvJC7NGiihHu+vF7gjkaS3cODkB7wLNY7OmOo1uWynzOQ8gOGs0fmz3V9nDvPJzfzIGX12qlcrUSuq3lqSvUJVmzwntdX8muxOUAklb2cBEdkkJFiTyXFGJuTCLJ4xoKSaNFO3oag27LyAW2jB9CCtWQ1upA5NseslbGbzb3JOaOpUyVbUnOB3hsQK7Lj5cGF2Ta2NIZpV6ywBpt0ESiWY4Nl0tGgXf8Eo1A5oM8j9Agn30R+4HTkL3czmNa3fC2wdvAKDW2b72n37rqicGSiRtnkSB8ZI4Qq+iyBtM1ozr6CpUzgG6yU7eHTP4OnDb5z7RJncVr93A4vUoHA7JHnzHUo8QWW16vfh/Ue7n5bNbtbRikcYiP7cg2bjyLMFLlVerpGCjWRrsi2JZrlmOw6yxxETh0rddQ/kQBHhLS4y9H5pqe6PoNuQ/ujsZOmFzzZxKv0nhtryAMBRMFegckomc37Nj9vy+ybBx6thz8T3nBYpReyhoj4BX3Ot0ir/jo6mpKM+reeMjj+2KYYYNr70Y6RH7wU4A/VPzWJPkNG09UGl9f2GWgJBzZszH0NSncytbUUKGSBECvpFsjNq1QYnP7LnZgpHbRQuba4srZEYLUJXHkZYXDTXBkC9ugVr628Jk4/Kq5TDkmoRQE8Mdi5/VHiPnX8486oa2N+WhEvBOoPT8qe4MKH6SdXLLckaUC2jDOBbF8Q7s0Io21h6em/g79ggVqGtE73GJKb6IPpQIVhhpRrN/Tm2uZg1TqBc1aFy55vybs07kabBTFvqoYT29fYsQ5PoyYd+IAGuRTrirQgCvZy4ZWlTUfoNYmil69SywEsfFcnuyHEyeG+S7JZlg6Tj0nUEVVdSmZrePtmOvGcVmu4ThniXmlZFDzSGfF1uRkYfgMxZppMLr99eG7HXBGpZs2FIP4I17U4Ba+YxXaj940JhD8Tc8J+9ANxfAT318tyla1ioF8mdUPRd8PFace7ajdLKRfpeFjPPcFboNxWTWavSKbZoGM3H1h9ALS1ybaz0dSrlL0lnhDrAM6XLTEyJfdmzX3yC9w2Q4Nc3A3qVYzL9DSpvKoi8+eo6s7Rpsb81miKfyOJ5IoJ3rrE9BmsRPjV3Maqo7rcFrICKTCUGtgUDtL9/Oi/buw+Uf2I7a3Ho9KNxjY83LJXHheNPCV/OnlUGxl8+fMstBRu0f3cPkzw3J0zWIL8zMXIxFsyijbHAOEYKV7ehpivsA8k292qx5IM9z4x1lfKXXAZJU/0EbooV4QQWrx4pSVdifmFDTwGC39VPyo+LrhxCK/Osm1igX73gVJgQpV7muOOwSyRG0N4tDfAjtG/LgtMIbO2Cs6y+P+oeWiycdlylurVEWdxjErCZbWUsMns7GhuKqavbIlHMPg7bQObeBS2miDIjQnCB5ARKzeXq32s5Ul1B4fqz6Z2WnI6IjsjW3J3BIiIKVUC6CG0zdgqcHMAAKU2mE3IYdg2FOdoxseVKh7f8HEEDz2iCKMy1cxOBtVUmwA665Thwy0FxbNOJDOLgCz5xkluOmePhYfJidYVJBmRDt4OUyd4alpxaddr8Y69XwQc8fhdQ9DJEZhhbo1+hYzsVCrBUKiv9V2KgVCS/ZDJ4nFsIgSBi1y1Z1C+NUQC2yqvDJ0ASHabmhQqORV7vur7KuZInH6WDhjR81yP0NRUEPEZiAmmpopYFUbEdPXSPmGqHZDi70rs/T/XNQ41PJENbYbSS3FdMF9SWfONsIBKdBv/0xZ+/8XI8ajdF1JzNaSFCTIAVPpNSSLFkleUj5HoQr0fyZGyT2zxCUhbzkPTQCfEV+lgAq2BX5ivxyDoxoUv3tPonbR0MWKcmyMlSbT/9EI1czpmznHysfL+EBNNo7PVlJWkTt8k7FAILIVJ5+mR3eL6z+2x8BZ9yPUlqFd0tB9HC+F/6IQcrKY/oojOTdV+/DCXPUKmP/tCiAlGq2KHZgiOs2Tsh3WPVWbqQ5F+5hxb1wLLUdliFH/ooOlq6XbFPZ2NUI1Ad0d6/Pq6sW9jy2ddsgNeTyER8+hCNK309GahYSf4GLvkKi8PuMJIcx77bx3c1QgRf8n6nc65GPJkBb9a2t5+7OmyevlV8cjNFYL2mtLI6xoQJCLAdzeDnWOZeCFv5RY9LtL2qTIbGfYgpxo/0eJ10Y+5sXzAJsJsMMXfxG+WRllP6ZuUq46DIS2o48GdxvQNsFb8ltZBH55M66MtwKSlsc4SsqxdwYRV9X/AC8fAJQlOL3A7Q7z4vkRKWqeX/Xh7wmYrgL6Q0BAYguAfSdeAB4clUm42iomSQNndjrJT31hu8mCa2TLZmQChL3DNdJXudg6ENkroKzsPLXwTR+ZRMzFPPf6Ek6zbpxKHKUp6IVtnYbFODQwq9Lk4UPTb9tTLsU21eLoqMl0voZP8B++nyeCFQnbRMuQOifSCcwoQUQDlZQ7uv+pb2WVLushCw/2iYx50u4uoJOIwJq+QRWecD8poKryIHWmBEfECGe3nx4iQ8A+6rQ8e5PjSsnh1BhbRnIvz38/GEKgh9zqY4XYNKIqupiHiJLpIPlN3iAW639dH8cgTZFWnbuVeDFPe9K1EgfhHQYEfOps8Z+v86WHrQd7Si7iXNRyHcUScQQ2zq0wbwcPqzP1tO9fimGW0Td1SOzZ/PH2dVcJLTc+xIwVF7kLP9kclJb1tFXFq37BkqgKYsVGUNu5uQ/g9qhrJMlihZOsawA73V5BN67LTAwSQoFuYnkv+W/1apOvjS1OUt4bEbl962XTe2Xx8T6Sdj2Akl3/LtCRML7Yqv62ZyaUs78OZ/0SXewMxHdNX/9OZif/3oL92bfNqV59SWRUCrHy6xCXbKdA2oxe/qQ7K2Cp0e7OmQ6U1LKaTD3m5x7Su573kaTcuUH5aHkEondlIXsQ4BcNyWDYIFhLc8Hv4fy8VihQgV9IBYfQVg/kakxNUV+Ho7jAIHhlcJIq8r1sI+1Le8uDMvlElMWeD0xQnd/0I4Yc+ookPskjsT+QvkFaAfk7MKQGABfvzE8YlgJXmb8YZytwkPyKImoBDJwAD4aCCyoS8tB5czgZWXmZHHMSCtxlPwPMZWP1cjOvDu27SOWMACbgDfXUcmXPb6L8CMR2l3U41xAzToABU/GNaE0ZhmFFFyMBvZir/UACS505KuazLcI3JSq/L94BFAIT4I3R0X39iSa3wAAAAAA=="); + Players.Add(mp2); + AddBestScore(new BestScore("Dunai", mp2, 4, 39)); GameRules = new Rules.Rules(); diff --git a/source/Trek-12/Models/Game/Player.cs b/source/Trek-12/Models/Game/Player.cs index 71bdc9f..0acad39 100644 --- a/source/Trek-12/Models/Game/Player.cs +++ b/source/Trek-12/Models/Game/Player.cs @@ -1,4 +1,5 @@ -using System.ComponentModel; +using System.Collections.ObjectModel; +using System.ComponentModel; using System.Runtime.CompilerServices; using System.Runtime.Serialization; using Models.Interfaces; @@ -17,12 +18,7 @@ namespace Models.Game void OnPropertyChanged([CallerMemberName] string propertyName = null) => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); - /// - /// The best score of the player on a specific map. - /// - [DataMember] - public Dictionary BestScores { get; private set; } - + /// /// It is he pseudo of the player. /// @@ -68,7 +64,6 @@ namespace Models.Game Pseudo = pseudo; ProfilePicture = profilePicture; CreationDate = DateTime.Now.ToString("dd/MM/yyyy"); - BestScores = new Dictionary(); } /// @@ -102,13 +97,5 @@ namespace Models.Game { LastPlayed = DateTime.Now.ToString("dd/MM/yyyy"); } - - /// - /// Add a new best score to the player. - /// - public void AddBestScore(Map map, BestScore bestScore) - { - BestScores.Add(map, bestScore); - } } } \ No newline at end of file diff --git a/source/Trek-12/Tests/BestScoreTests.cs b/source/Trek-12/Tests/BestScoreTests.cs index f860375..f52a4cd 100644 --- a/source/Trek-12/Tests/BestScoreTests.cs +++ b/source/Trek-12/Tests/BestScoreTests.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Reflection.Emit; using System.Text; using System.Threading.Tasks; using Models.Game; @@ -12,7 +13,11 @@ namespace Tests [Fact] public void Constructor_WithNegativeInputs_SetsPropertiesToZero() { - var bestScore = new BestScore(-5, -10); + var myMap = new Map("Dunai", "Dunai.png"); + var myPlayer = new Player("John", "pp.png"); + + var bestScore = new BestScore(myMap.Name, myPlayer, -5, -10); + Assert.Equal(0, bestScore.GamesPlayed); Assert.Equal(0, bestScore.Score); } @@ -20,7 +25,11 @@ namespace Tests [Fact] public void Constructor_WithPositiveInputs_SetsPropertiesCorrectly() { - var bestScore = new BestScore(5, 10); + var myMap = new Map("Dunai", "Dunai.png"); + var myPlayer = new Player("John", "pp.png"); + + var bestScore = new BestScore(myMap.Name, myPlayer, 5, 10); + Assert.Equal(5, bestScore.GamesPlayed); Assert.Equal(10, bestScore.Score); } @@ -28,24 +37,36 @@ namespace Tests [Fact] public void IncrGamesPlayed_IncrementsGamesPlayed() { - var bestScore = new BestScore(0, 0); + var myMap = new Map("Dunai", "Dunai.png"); + var myPlayer = new Player("John", "pp.png"); + + var bestScore = new BestScore(myMap.Name, myPlayer, 0, 0); bestScore.IncrGamesPlayed(); + Assert.Equal(1, bestScore.GamesPlayed); } [Fact] public void ScoreSetter_WithLowerValue_DoesNotChangeScore() { - var bestScore = new BestScore(0, 10); + var myMap = new Map("Dunai", "Dunai.png"); + var myPlayer = new Player("John", "pp.png"); + + var bestScore = new BestScore(myMap.Name, myPlayer, 0, 10); bestScore.UpdateScore(5); + Assert.Equal(5, bestScore.Score); } [Fact] public void ScoreSetter_WithHigherValue_ChangesScore() { - var bestScore = new BestScore(0, 5); + var myMap = new Map("Dunai", "Dunai.png"); + var myPlayer = new Player("John", "pp.png"); + + var bestScore = new BestScore(myMap.Name, myPlayer, 0, 5); bestScore.UpdateScore(10); + Assert.Equal(10, bestScore.Score); } } diff --git a/source/Trek-12/Tests/GameTests.cs b/source/Trek-12/Tests/GameTests.cs index 890890f..8dd3004 100644 --- a/source/Trek-12/Tests/GameTests.cs +++ b/source/Trek-12/Tests/GameTests.cs @@ -78,7 +78,7 @@ public class GameTests [Fact] public void AddBestScore_ShouldAddBestScoreToList() { - var bestScore = new BestScore(3, 125); + var bestScore = new BestScore("test", new Player("John", "Picture.png"), 3, 127); _game.AddBestScore(bestScore); @@ -88,10 +88,14 @@ public class GameTests [Fact] public void LoadData_ShouldLoadDataFromPersistence() { - var players = new ObservableCollection { new Player("test", "DefaultProfilePicture") }; - var games = new ObservableCollection { new Game(_mockPersistence.Object) }; - var maps = new ObservableCollection { new Map("test_name", "test_background.png") }; - var bestScores = new ObservableCollection { new BestScore(1, 26) }; + var myGame = new Game(_mockPersistence.Object); + var myPlayer = new Player("test", "DefaultProfilePicture"); + var myMap = new Map("test_name", "test_background.png"); + + var players = new ObservableCollection { myPlayer }; + var games = new ObservableCollection { myGame }; + var maps = new ObservableCollection { myMap }; + var bestScores = new ObservableCollection { new BestScore(myMap.Name, myPlayer, 1, 45) }; _mockPersistence.Setup(p => p.LoadData()).Returns((players, games, maps, bestScores)); diff --git a/source/Trek-12/Trek-12/App.xaml.cs b/source/Trek-12/Trek-12/App.xaml.cs index b906f7f..e640454 100644 --- a/source/Trek-12/Trek-12/App.xaml.cs +++ b/source/Trek-12/Trek-12/App.xaml.cs @@ -26,7 +26,7 @@ namespace Trek_12 Directory.CreateDirectory(FilePath); } - //File.Delete(Path.Combine(FilePath, FileName)); + File.Delete(Path.Combine(FilePath, FileName)); string fullPath = Path.Combine(FilePath, FileName); if (File.Exists(fullPath)) diff --git a/source/Trek-12/Trek-12/Views/Components/ContentLeaderBoard.xaml b/source/Trek-12/Trek-12/Views/Components/ContentLeaderBoard.xaml index 639b6f3..3ec0052 100644 --- a/source/Trek-12/Trek-12/Views/Components/ContentLeaderBoard.xaml +++ b/source/Trek-12/Trek-12/Views/Components/ContentLeaderBoard.xaml @@ -1,7 +1,9 @@ + x:Class="Trek_12.Views.Components.ContentLeaderBoard" + x:Name="this"> + @@ -12,31 +14,31 @@ WidthRequest="60" IsClippedToBounds="True" HasShadow="True"> - -