Esempio n. 1
0
        protected void Emptybutton_Click(object sender, EventArgs e)
        {
            Button button = sender as Button;

            if (playerMove.GetSize() >= 1)
            {
                CKPoint point = (CKPoint)button.Tag;
                playerMove.BuildMove(point);
                System.Diagnostics.Debug.WriteLine("Point: " + point.GetRow() + "," + point.GetColumn());

                // Color boarder
                Button piece = (Button)sender;
                piece.FlatAppearance.BorderSize  = 1;
                piece.FlatAppearance.BorderColor = Color.White;
            }
            // identify which button was clicked and perform necessary actions
        }
Esempio n. 2
0
        private Button CreatePiece(Point pos, CKPoint point, CheckerPieces Ptype)
        {
            Button piece = new Button();

            piece.TabStop   = false;
            piece.FlatStyle = FlatStyle.Flat;
            piece.FlatAppearance.BorderSize = 0;
            piece.Width    = 64;
            piece.Height   = 64;
            piece.Location = pos;
            piece.Tag      = point;
            switch (Ptype)
            {
            case CheckerPieces.Red:
                piece.Image  = Properties.Resources.Red_Piece;
                piece.Click += new EventHandler(Redbutton_Click);
                break;

            case CheckerPieces.RedKing:
                piece.Image  = Properties.Resources.Red_Piece_King;
                piece.Click += new EventHandler(RedKingbutton_Click);
                break;

            case CheckerPieces.Black:
                piece.Image  = Properties.Resources.Black_Piece;
                piece.Click += new EventHandler(Blackbutton_Click);
                break;

            case CheckerPieces.BlackKing:
                piece.Image  = Properties.Resources.Black_Piece_King;
                piece.Click += new EventHandler(BlackKingbutton_Click);
                break;

            case CheckerPieces.Empty:
                //piece.Image = Properties.Resources.Red_Piece;
                piece.Click += new EventHandler(Emptybutton_Click);
                break;

            default:
                break;
            }

            this.BeginInvoke((Action) delegate() { this.Controls.Add(piece); piece.BringToFront(); piece.Parent = Board; piece.BackColor = Color.Transparent; Board.Refresh(); });
            return(piece);
        }
Esempio n. 3
0
 CheckerPieces SetPieceFromPoint(CheckerPieces piece, CKPoint point)
 {
     return(gameBoard[point.GetRow(), point.GetColumn()]);
 }
Esempio n. 4
0
 public void BuildMove(CKPoint point)
 {
     //RestartMove();
     move.Add(point);
 }
Esempio n. 5
0
    public bool ApplyMove(PlayerMove move)
    {
        List <CKPoint> listPoints = move.GetPlayerMove();

        if (listPoints.Count < 2)
        {
            return(false);
        }
        CKPoint       startingPoint = listPoints[0];                                                // A move will always be at least 2 long, with index 0 being the starting point
        CKPoint       endingPoint   = listPoints[listPoints.Count - 1];
        CheckerPieces piece         = gameBoard[startingPoint.GetRow(), startingPoint.GetColumn()]; // Column is x, Row is y

        Console.WriteLine(startingPoint.GetRow() + " " + startingPoint.GetColumn());
        Console.WriteLine(endingPoint.GetRow() + " " + endingPoint.GetColumn());
        Console.WriteLine(piece);
        if (piece == CheckerPieces.Empty)
        {
            return(false);
        }
        Console.WriteLine("test");
        CheckerPieces[] opponentPieces = new CheckerPieces[2];
        if (piece == CheckerPieces.Red || piece == CheckerPieces.RedKing && currentPlayer == 1)
        {
            opponentPieces[0] = CheckerPieces.Black;
            opponentPieces[1] = CheckerPieces.BlackKing;
        }
        else if (piece == CheckerPieces.Black || piece == CheckerPieces.BlackKing && currentPlayer == 2)
        {
            opponentPieces[0] = CheckerPieces.Red;
            opponentPieces[1] = CheckerPieces.RedKing;
        }
        else
        {
            return(false); // you moved the wrong peice
        }

        CKPoint fromPoint = startingPoint;

        foreach (CKPoint point in listPoints)
        {
            if (point == startingPoint)   // Starting Point, skip
            {
                continue;
            }
            else if (Math.Abs(fromPoint.GetRow() - point.GetRow()) == 0)   // Invalid move
            // Throw error
            {
                throw new InvalidOperationException("Move not changing rows (y direction)");
                //return false;
            }
            else if (Math.Abs(fromPoint.GetColumn() - point.GetColumn()) == 0)   // Invalid move
            // Throw error
            {
                throw new InvalidOperationException("Move not changing columns (x direction)");
                //return false;
            }
            else if (Math.Abs(fromPoint.GetRow() - point.GetRow()) == 1 && listPoints.Count == 2)   // Not jumping, just move to new point if empty
            {
                if (piece == CheckerPieces.Red)
                {
                    if (fromPoint.GetRow() - point.GetRow() != -1 || gameBoard[point.GetRow(), point.GetColumn()] != CheckerPieces.Empty)
                    {
                        // Throw error
                        throw new InvalidOperationException("Red piece single move invalid");
                        //return false;
                    }
                }
                else if (piece == CheckerPieces.Black)
                {
                    if (fromPoint.GetRow() - point.GetRow() != 1 || gameBoard[point.GetRow(), point.GetColumn()] != CheckerPieces.Empty)
                    {
                        // Throw error
                        throw new InvalidOperationException("Black piece single move invalid");
                        //return false;
                    }
                }
                else if (piece == CheckerPieces.RedKing || piece == CheckerPieces.BlackKing)
                {
                    if (Math.Abs(fromPoint.GetRow() - point.GetRow()) != 1 || gameBoard[point.GetRow(), point.GetColumn()] != CheckerPieces.Empty)
                    {
                        // Throw error
                        throw new InvalidOperationException("King piece single move invalid");
                        //return false;
                    }
                }

                gameBoard[fromPoint.GetRow(), fromPoint.GetColumn()] = CheckerPieces.Empty;
                gameBoard[point.GetRow(), point.GetColumn()]         = piece;
            }
            else if (Math.Abs(fromPoint.GetRow() - point.GetRow()) == 2)   // Jumping to take pieces
            {
                int middleColumn = Math.Abs(fromPoint.GetColumn() + point.GetColumn()) / 2;
                int middleRow    = Math.Abs(fromPoint.GetRow() + point.GetRow()) / 2;
                if (piece == CheckerPieces.Red)
                {
                    if (fromPoint.GetRow() - point.GetRow() != -2 || gameBoard[point.GetRow(), point.GetColumn()] != CheckerPieces.Empty ||
                        (gameBoard[middleRow, middleColumn] != CheckerPieces.Black && gameBoard[middleRow, middleColumn] != CheckerPieces.BlackKing))
                    {
                        // Throw error
                        throw new InvalidOperationException("Red piece single jump invalid");
                        //return false;
                    }
                }
                else if (piece == CheckerPieces.Black)
                {
                    if (fromPoint.GetRow() - point.GetRow() != 2 || gameBoard[point.GetRow(), point.GetColumn()] != CheckerPieces.Empty ||
                        (gameBoard[middleRow, middleColumn] != opponentPieces[0] && gameBoard[middleRow, middleColumn] != opponentPieces[1]))
                    {
                        // Throw error
                        Console.WriteLine(fromPoint.GetRow() + " " + point.GetRow());
                        Console.WriteLine(gameBoard[point.GetRow(), point.GetColumn()]);
                        Console.WriteLine(gameBoard[middleRow, middleColumn]);
                        Console.WriteLine(middleRow);
                        Console.WriteLine(middleColumn);
                        throw new InvalidOperationException("Black piece single jump invalid");
                        //return false;
                    }
                }
                else if (piece == CheckerPieces.RedKing || piece == CheckerPieces.BlackKing)
                {
                    if (Math.Abs(fromPoint.GetRow() - point.GetRow()) != 2 || gameBoard[point.GetRow(), point.GetColumn()] != CheckerPieces.Empty ||
                        (gameBoard[middleRow, middleColumn] != opponentPieces[0] && gameBoard[middleRow, middleColumn] != opponentPieces[1]))
                    {
                        // Throw error
                        throw new InvalidOperationException("King piece single jump invalid");
                        //return false;
                    }
                }

                gameBoard[fromPoint.GetRow(), fromPoint.GetColumn()] = CheckerPieces.Empty;
                gameBoard[middleRow, middleColumn]           = CheckerPieces.Empty;
                gameBoard[point.GetRow(), point.GetColumn()] = piece;
            }
            else
            {
                return(false);
            }

            fromPoint = point; // Make the point we just moved to the new fromPoint for the next move
        }

        // Check if piece should turn into King
        if (endingPoint.GetRow() == 0 || endingPoint.GetRow() == 7 && (piece != CheckerPieces.RedKing || piece != CheckerPieces.BlackKing))
        {
            if (piece == CheckerPieces.Red)
            {
                gameBoard[endingPoint.GetRow(), endingPoint.GetColumn()] = CheckerPieces.RedKing;
            }
            else if (piece == CheckerPieces.Black)
            {
                gameBoard[endingPoint.GetRow(), endingPoint.GetColumn()] = CheckerPieces.BlackKing;
            }
        }

        return(true);
    }