Esempio n. 1
0
        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);
        }