public GameCore <Player> StartGame() { if (CurrentGame.Game is GameCore <Player> oldGame) { oldGame.TurnEnded -= game_TurnEnded; } GameData.Initialize(new GameData()); var player = CreatePlayer(); var startMap = DungeonMapGenerator.Current.GenerateNewMap(1, out var playerPosition); CurrentGame.Initialize(startMap, player, playerPosition); var game = (GameCore <Player>)CurrentGame.Game; startMap.Refresh(); player.Inventory.ItemAdded += (sender, args) => { game.Journal.Write(new ItemReceivedMessage(args.Item)); }; player.Inventory.ItemRemoved += (sender, args) => { game.Journal.Write(new ItemLostMessage(args.Item)); }; game.Journal.Write(new StartGameMessage()); game.TurnEnded += game_TurnEnded; saveService.SaveGame(); turnsSinceLastSaving = 0; return(game); }