Ejemplo n.º 1
0
    public Tuple <VirtualPiece, Vector2Int> DoEverythingBecauseNothingWorks()
    {
        int          maxUtils         = 1500;
        VirtualPiece bestMovePiece    = null;
        Vector2Int   bestMovePosition = new Vector2Int(0, 0);

        foreach (VirtualPiece piece in playerPiecesDict[playerTurn])
        {
            List <Vector2Int> possileCells    = piece.CheckPathing();
            Vector2Int        currentPosition = piece.cCurrentPosition;
            bool isDead = piece.cIsDead;
            foreach (Vector2Int movement in possileCells)
            {
                VirtualBoard newVirtualBoard = CloneVirtualBoard();
                VirtualPiece newPiece        = newVirtualBoard.FindPiece(piece.cCurrentPosition, piece.cPieceName, isDead, piece.cPlayerInt);

                newPiece.MovePiece(movement.x, movement.y);
                newVirtualBoard.player1Utils = newVirtualBoard.EvaluateVirtualBoard();
                if (newVirtualBoard.aiPlayerWinning)
                {
                    maxUtils         = newVirtualBoard.player1Utils;
                    bestMovePiece    = piece;
                    bestMovePosition = movement;
                    return(new Tuple <VirtualPiece, Vector2Int>(bestMovePiece, bestMovePosition));
                }
                int          maxUtils2         = -1500;
                VirtualPiece bestMovePiece2    = null;
                Vector2Int   bestMovePosition2 = new Vector2Int(0, 0);
                foreach (VirtualPiece piece2 in newVirtualBoard.playerPiecesDict[newVirtualBoard.playerTurn])
                {
                    List <Vector2Int> possileCells2    = piece2.CheckPathing();
                    Vector2Int        currentPosition2 = piece2.cCurrentPosition;
                    bool isDead2 = piece2.cIsDead;
                    foreach (Vector2Int movement2 in possileCells2)
                    {
                        VirtualBoard newVirtualBoard2 = newVirtualBoard.CloneVirtualBoard();
                        VirtualPiece newPiece2        = newVirtualBoard2.FindPiece(piece2.cCurrentPosition, piece2.cPieceName, isDead2, piece2.cPlayerInt);
                        newPiece2.MovePiece(movement2.x, movement2.y);
                        newVirtualBoard2.player1Utils = newVirtualBoard2.EvaluateVirtualBoard();

                        if (newVirtualBoard2.player1Utils > maxUtils2)
                        {
                            maxUtils2 = newVirtualBoard2.player1Utils;
                            newVirtualBoard.player1Utils = newVirtualBoard2.player1Utils;
                            bestMovePiece2    = newPiece2;
                            bestMovePosition2 = movement2;
                        }
                    }
                }

                if (newVirtualBoard.player1Utils < maxUtils)
                {
                    maxUtils         = newVirtualBoard.player1Utils;
                    bestMovePiece    = piece;
                    bestMovePosition = movement;
                }
            }
        }
        return(new Tuple <VirtualPiece, Vector2Int>(bestMovePiece, bestMovePosition));
    }
Ejemplo n.º 2
0
    public VirtualBoard CloneVirtualBoard()
    {
        VirtualBoard newVirtualBoard = new VirtualBoard();

        for (int x = 0; x < mAllCells.GetLength(0); x++)
        {
            for (int y = 0; y < mAllCells.GetLength(1); y++)
            {
                if (mAllCells[x, y] != null)
                {
                    VirtualPiece newPiece = mAllCells[x, y].ClonePiece(newVirtualBoard);
                    newVirtualBoard.mAllCells[x, y] = newPiece;
                    newVirtualBoard.playerPiecesDict[newPiece.cPlayerInt].Add(newPiece);
                }
            }
        }

        foreach (KeyValuePair <int, List <VirtualPiece> > kvp in sideBoardDict)
        {
            for (int x = 0; x < kvp.Value.Count; x++)
            {
                VirtualPiece newPiece = kvp.Value[x].ClonePiece(newVirtualBoard);
                newVirtualBoard.sideBoardDict[kvp.Key].Add(newPiece);
            }
        }

        newVirtualBoard.playerTurn = SwitchPlayerTurn();
        return(newVirtualBoard);
    }
Ejemplo n.º 3
0
 public void SetVirtualBoard(Board board)
 {
     for (int x = 0; x < board.mAllCells.GetLength(0); x++)
     {
         for (int y = 0; y < board.mAllCells.GetLength(1); y++)
         {
             if (board.mAllCells[x, y].mCurrentPiece != null)
             {
                 Piece        piece    = board.mAllCells[x, y].mCurrentPiece;
                 VirtualPiece newPiece = new VirtualPiece();
                 newPiece.SetVirtualPiece(piece.pieceName, piece.playerOwnerInt, piece.mPossibleMovement, piece.isDead, new Vector2Int(x, y), this);
                 mAllCells[x, y] = newPiece;
                 playerPiecesDict[piece.playerOwnerInt].Add(newPiece);
             }
         }
     }
     foreach (KeyValuePair <int, Cell[, ]> kvp in board.sideBoardDict)
     {
         for (int x = 0; x < kvp.Value.GetLength(0); x++)
         {
             for (int y = 0; y < kvp.Value.GetLength(1); y++)
             {
                 if (kvp.Value[x, y].mCurrentPiece != null)
                 {
                     Piece        piece    = kvp.Value[x, y].mCurrentPiece;
                     VirtualPiece newPiece = new VirtualPiece();
                     newPiece.SetVirtualPiece(piece.pieceName, piece.playerOwnerInt, piece.mPossibleMovement, piece.isDead, new Vector2Int(x, y), this);
                     sideBoardDict[kvp.Key].Add(newPiece);
                     playerPiecesDict[piece.playerOwnerInt].Add(newPiece);
                 }
             }
         }
     }
     player1Utils = EvaluateVirtualBoard();
 }
Ejemplo n.º 4
0
    public VirtualPiece ClonePiece(VirtualBoard newVirtualBoard)
    {
        VirtualPiece newPiece = new VirtualPiece();

        newPiece.SetVirtualPiece(cPieceName, cPlayerInt, cPossibleMovement, cIsDead, cCurrentPosition, newVirtualBoard);
        return(newPiece);
    }
Ejemplo n.º 5
0
        /// <summary>
        /// Generates a RKN-container using the official dimensions
        /// </summary>
        /// <param name="id">The ID of the container</param>
        /// <returns>The newly generated container</returns>
        public static Container GenerateContainerRKN(int id)
        {
            // Create it
            Container container = new Container()
            {
                ID   = id,
                Mesh = new MeshCube()
                {
                    Length = 15.3,
                    Width  = 20.1,
                    Height = 16.3
                }
            };
            // Add slants
            Slant slant = new Slant()
            {
                Container = container,
                Position  = new MeshPoint()
                {
                    X = 0.0, Y = 15.6, Z = 0.0
                },
                NormalVector = new MeshPoint()
                {
                    X = 0.0, Y = 1.0, Z = -1.0
                }
            };

            slant.Seal();
            container.AddSlant(slant);
            // Add virtual piece
            VirtualPiece virtualPiece = new VirtualPiece()
            {
                Container        = container,
                FixedOrientation = 0,
                FixedPosition    = new MeshPoint()
                {
                    X = 1,
                    Y = 17.1,
                    Z = 11.0
                }
            };

            virtualPiece.AddComponent(0, 0, 0, 13.3, 3.0, 5.0);
            virtualPiece.Seal();
            container.AddVirtualPiece(virtualPiece);

            // Seal the container
            container.Seal();

            // Return it
            return(container);
        }
Ejemplo n.º 6
0
 public void ResetPiecesPlayer(VirtualPiece piece)
 {
     foreach (KeyValuePair <int, List <VirtualPiece> > kvp in playerPiecesDict)
     {
         if (kvp.Value.Contains(piece) && kvp.Key != piece.cPlayerInt)
         {
             kvp.Value.Remove(piece);
         }
         else if (!kvp.Value.Contains(piece) && kvp.Key == piece.cPlayerInt)
         {
             kvp.Value.Add(piece);
         }
     }
 }
Ejemplo n.º 7
0
    private void Capture(int x, int y)
    {
        VirtualPiece capturedPiece = cVirtualBoard.mAllCells[x, y];
        string       previousName  = capturedPiece.cPieceName;

        capturedPiece.cPlayerInt = cPlayerInt;
        capturedPiece.cIsDead    = true;
        cVirtualBoard.AddPieceToPlayerSideBoard(capturedPiece, cPlayerInt);
        if (previousName == "Hu")
        {
            capturedPiece.SwitchHuAndJa();
        }
        cVirtualBoard.ResetPiecesPlayer(capturedPiece);
    }
Ejemplo n.º 8
0
    public void CreateRecursiveBoardDict()
    {
        foreach (VirtualPiece piece in playerPiecesDict[playerTurn])
        {
            List <Vector2Int> possileCells    = piece.CheckPathing();
            Vector2Int        currentPosition = piece.cCurrentPosition;
            bool isDead = piece.cIsDead;
            foreach (Vector2Int movement in possileCells)
            {
                VirtualBoard newVirtualBoard = CloneVirtualBoard();
                VirtualPiece newPiece        = newVirtualBoard.FindPiece(piece.cCurrentPosition, piece.cPieceName, isDead, piece.cPlayerInt);
                newPiece.MovePiece(movement.x, movement.y);
                newVirtualBoard.player1Utils = newVirtualBoard.EvaluateVirtualBoard();
                recursiveBoardDict.Add(new Tuple <VirtualPiece, Vector2Int>(piece, movement), newVirtualBoard);
            }
        }

        //    foreach (VirtualPiece piece in playerPiecesDict[playerTurn])
        //{
        //    if (piece.cPlayerInt == playerTurn)
        //    {
        //        List<Vector2Int> possileCells = piece.CheckPathing();
        //        Vector2Int currentPosition = piece.cCurrentPosition;
        //        bool isDead = piece.cIsDead;
        //        foreach (Vector2Int movement in possileCells)
        //        {
        //            VirtualBoard newVirtualBoard = CloneVirtualBoard();

        //            VirtualPiece newPiece = newVirtualBoard.FindPiece(piece.cCurrentPosition, piece.cPieceName, isDead, piece.cPlayerInt);

        //            newPiece.MovePiece(movement.x, movement.y);
        //            newVirtualBoard.player1Utils = newVirtualBoard.EvaluateVirtualBoard();
        //            recursiveBoardDict.Add(new Tuple<VirtualPiece, Vector2Int>(piece, movement), newVirtualBoard);
        //        }
        //    }
        //}
    }
Ejemplo n.º 9
0
    public void GetBestMove()
    {
        int maxUtils = 1500;

        if (playerTurn == 1)
        {
            maxUtils = -1500;
        }

        VirtualPiece bestMovePiece    = null;
        Vector2Int   bestMovePosition = new Vector2Int(0, 0);

        foreach (KeyValuePair <Tuple <VirtualPiece, Vector2Int>, VirtualBoard> kvp in recursiveBoardDict)
        {
            if (playerTurn == 2)
            {
                if (kvp.Value.aiPlayerWinning)
                {
                    maxUtils         = kvp.Value.player1Utils;
                    bestMovePiece    = kvp.Key.Item1;
                    bestMovePosition = kvp.Key.Item2;
                    aiPlayerWinning  = true;
                    bestMove         = kvp.Key;
                    return;
                }
            }
            if ((playerTurn == 1 && kvp.Value.player1Utils > maxUtils) || (playerTurn == 2 && kvp.Value.player1Utils < maxUtils))
            {
                maxUtils         = kvp.Value.player1Utils;
                player1Utils     = kvp.Value.player1Utils;
                bestMovePiece    = kvp.Key.Item1;
                bestMovePosition = kvp.Key.Item2;
            }
        }
        bestMove = new Tuple <VirtualPiece, Vector2Int>(bestMovePiece, bestMovePosition);
    }
Ejemplo n.º 10
0
        /// <summary>
        /// Generates a AMJ-container using the official dimensions
        /// </summary>
        /// <param name="id">The ID of the container</param>
        /// <returns>The newly generated container</returns>
        public static Container GenerateContainerAMJ(int id)
        {
            // Create it
            Container container = new Container()
            {
                ID   = id,
                Mesh = new MeshCube()
                {
                    Length = 30.6,
                    Width  = 23.0,
                    Height = 24.0
                }
            };
            // Add slants
            Slant slant1 = new Slant()
            {
                Container = container,
                Position  = new MeshPoint()
                {
                    X = 0.0, Y = 15, Z = 24.0
                },
                NormalVector = new MeshPoint()
                {
                    X = 0.0, Y = 1.0, Z = 1.0
                }
            };

            slant1.Seal();
            container.AddSlant(slant1);
            //Slant slant2 = new Slant()
            //{
            //    Container = container,
            //    Position = new MeshPoint() { X = 0.0, Y = 15, Z = 24.0 },
            //    NormalVector = new MeshPoint() { X = 0.0, Y = 1.0, Z = 0.5 }
            //};
            //slant2.Seal();
            //container.AddSlant(slant2);
            //Slant slant3 = new Slant()
            //{
            //    Container = container,
            //    Position = new MeshPoint() { X = 0.0, Y = 15, Z = 24.0 },
            //    NormalVector = new MeshPoint() { X = 0.0, Y = 1.0, Z = 2.0 }
            //};
            //slant3.Seal();
            //container.AddSlant(slant3);

            // Add virtual pieces
            VirtualPiece virtualPiece1 = new VirtualPiece()
            {
                Container        = container,
                FixedOrientation = 0,
                FixedPosition    = new MeshPoint()
                {
                    X = 9.7,
                    Y = 1.0,
                    Z = 0.0
                }
            };

            virtualPiece1.AddComponent(0, 0, 0, 1.0, 7.0, 24.0);
            virtualPiece1.Seal();
            container.AddVirtualPiece(virtualPiece1);
            VirtualPiece virtualPiece2 = new VirtualPiece()
            {
                Container        = container,
                FixedOrientation = 0,
                FixedPosition    = new MeshPoint()
                {
                    X = 19.9,
                    Y = 1.0,
                    Z = 0.0
                }
            };

            virtualPiece2.AddComponent(0, 0, 0, 1.0, 7.0, 24.0);
            virtualPiece2.Seal();
            container.AddVirtualPiece(virtualPiece2);

            // Seal the container
            container.Seal();

            // Return it
            return(container);
        }
Ejemplo n.º 11
0
 public void AddPieceToPlayerSideBoard(VirtualPiece piece, int newplayerOwnerInt)
 {
     sideBoardDict[newplayerOwnerInt].Add(piece);
 }