private void AddGameToDatabase(string winner) { player_information whitePlayerInformation = new player_information() { algorithm = new algorithm() { algorithm_name = WhitePlayerEngine.Kind.ToString() }, number_of_pieces = Board.NumberOfWhitePiecesAtBeggining, player = WhitePlayerEngine.Kind == EngineKind.Human ? new player() { player_name = "syntaximus" } : new player() { player_name = "CPU" } }; player_information blackPlayerInformation = new player_information() { algorithm = new algorithm() { algorithm_name = BlackPlayerEngine.Kind.ToString() }, number_of_pieces = Board.NumberOfBlackPiecesAtBeggining, player = BlackPlayerEngine.Kind == EngineKind.Human ? new player() { player_name = "syntaximus" } : new player() { player_name = "CPU" } }; if (WhitePlayerEngine.GetType() == typeof(AlphaBetaEngine)) { var engine = (AlphaBetaEngine)WhitePlayerEngine; whitePlayerInformation.tree_depth = engine.AlphaBetaTreeDepth; } if (BlackPlayerEngine.GetType() == typeof(AlphaBetaEngine)) { var engine = (AlphaBetaEngine)BlackPlayerEngine; blackPlayerInformation.tree_depth = engine.AlphaBetaTreeDepth; } if (WhitePlayerEngine.GetType() == typeof(MctsEngine)) { var engine = (MctsEngine)WhitePlayerEngine; whitePlayerInformation.uct_parameter = engine.UctParameter; whitePlayerInformation.number_of_iterations = engine.NumberOfIterations; } if (BlackPlayerEngine.GetType() == typeof(MctsEngine)) { var engine = (MctsEngine)BlackPlayerEngine; blackPlayerInformation.uct_parameter = engine.UctParameter; blackPlayerInformation.number_of_iterations = engine.NumberOfIterations; } game_type gameType = new game_type() { game_type_name = Variant.ToString() }; List <game_move> gameMoves = new List <game_move>(); foreach (var move in History.Skip(1)) { var gameMove = new game_move() { player = move.PieceColor == PieceColor.White ? "W" : "B", start_time = move.StartTime, end_time = move.EndTime, from_position = move.Board.LastMove.OldPiece.Position, to_position = move.Board.LastMove.NewPiece.Position, beated_pieces_count = move.Board.LastMove.BeatedPieces?.Count ?? 0, beated_pieces = move.Board.LastMove.GetBeatedPiecesString(), board_after_move = move.Board.ToString() }; gameMoves.Add(gameMove); } int moveCount = History.Count; _databaseLayer.AddGame(whitePlayerInformation, blackPlayerInformation, gameType, gameMoves, Board.Size, winner, moveCount, StartDate); }