public void SaveAndLoadScores()
		{
			var stats = InMemoryScores.Instance;
			int index = 0;

			NameValue<int> playerScore1 = new NameValue<int>("player1", 2);
			stats.Save(playerScore1);
			NameValue<int> playerScore2 = new NameValue<int>("player2", 1);
			stats.Save(playerScore2);
			NameValue<int> playerScore3 = new NameValue<int>("player3", 4);
			stats.Save(playerScore3);
			NameValue<int> playerScore4 = new NameValue<int>("player4", 5);
			stats.Save(playerScore4);
			NameValue<int> playerScore5 = new NameValue<int>("player5", 6);
			stats.Save(playerScore5);
			NameValue<int> playerScore6 = new NameValue<int>("player6", 7);
			stats.Save(playerScore6);
			NameValue<int> playerScore7 = new NameValue<int>("player7", 3);
			stats.Save(playerScore7);

			var expected = new List<INameValue> { playerScore2, playerScore1, playerScore7, playerScore3, playerScore4 };
			var players = stats.Load();

			foreach (var player in players)
			{
				Assert.AreEqual(expected[index].Name, player.Name);
				Assert.AreEqual(expected[index].Value, player.Value);
				index++;
			}
		}
		public void SaveInAndLoadScoresFromFile()
		{
			File.Delete(@"../../GameFifteen.game15");
			var stats = InFileScores.Instance;
			int index = 0;

			NameValue<int> playerScore1 = new NameValue<int>("player1", 2);
			stats.Save(playerScore1);
			NameValue<int> playerScore2 = new NameValue<int>("player2", 1);
			stats.Save(playerScore2);
			NameValue<int> playerScore3 = new NameValue<int>("player3", 4);
			stats.Save(playerScore3);
			NameValue<int> playerScore4 = new NameValue<int>("player4", 5);
			stats.Save(playerScore4);
			NameValue<int> playerScore5 = new NameValue<int>("player5", 6);
			stats.Save(playerScore5);
			NameValue<int> playerScore6 = new NameValue<int>("player6", 7);
			stats.Save(playerScore6);
			NameValue<int> playerScore7 = new NameValue<int>("player7", 7);
			stats.Save(playerScore7);
			var expected = new List<INameValue> { playerScore2, playerScore1, playerScore3, playerScore4, playerScore5 };
			var players = stats.Load();

			foreach (var player in players)
			{
				Assert.AreEqual(expected[index].Name, player.Name);
				Assert.AreEqual(expected[index].Value, player.Value);
				index++;
			}
		}
		public void LoadWhenNoScoresInFile()
		{
			File.Delete(@"../../GameFifteen.game15");
			var stats = InFileScores.Instance.Load();
			Assert.IsFalse(stats.Any());

			var record = new NameValue<int>("record1", 1);
			InFileScores.Instance.Save(record);

			stats = InFileScores.Instance.Load();
			Assert.IsTrue(stats.Any());
		}
		public virtual void Start()
		{
			while (!this._gameExit)
			{
				this.OnGameStart();
				this.StartGame();

				bool isSolved = this.IsItGameOver();
				while (!this._gameExit && !isSolved)
				{
					this.OnGameMovement();

					var key = this.InputProvider.GetKeyInput();
					var action = this.ActionProvider.GetAction(key, this.ActionReceiver);
					action.Execute();

					isSolved = this.IsItGameOver();
				}

				if (isSolved)
				{
					this.OnGameEnd();

					var playerScore = new NameValue<int>(this.Player.Name, this.Player.Score);
					this.HighScores.Save(playerScore);
				}
			}
		}