コード例 #1
0
ファイル: Bishop.cs プロジェクト: NickPowers43/ChessGame
        //get list of possible moves
        public override List<Square> getPossibleMoves(Board board, Square s)
        {
            var possibleMoves = new List<Square>();
            int[,] offsets = { { -1, 1 }, { 1, 1 }, { 1, -1 }, { -1, -1 } };
            int tempFile, tempRank;

            for (int i = 0; i < offsets.GetLength(0); i++)
            {
                tempFile = s.file;
                tempRank = s.rank;
                for (int j = 0; j < 8; j++)
                {
                    tempFile += offsets[i, 0];
                    tempRank += offsets[i, 1];

                    if (!inBounds(tempFile, tempRank))
                        break;

                    if (!board.Square[tempFile, tempRank].isEmpty())
                    {
                        if (board.Square[tempFile, tempRank].Piece.getPlayer() != player)
                            possibleMoves.Add(new Square(tempFile, tempRank));
                        break;
                    }
                    else
                        possibleMoves.Add(new Square(tempFile, tempRank));
                }
            }
            return possibleMoves;
        }
コード例 #2
0
ファイル: Piece.cs プロジェクト: NickPowers43/ChessGame
 //determine if a move is legal
 public bool isLegalMove(Board board, int file, int rank, Square s)
 {
     var possibleMoves = getPossibleMoves(board, s);
     foreach (Square i in possibleMoves)
         if (file == i.file && rank == i.rank)
             return true;
     return false;
 }
コード例 #3
0
ファイル: Pawn.cs プロジェクト: NickPowers43/ChessGame
        //get list of possible moves
        public override List<Square> getPossibleMoves(Board board, Square s)
        {
            var possibleMoves = new List<Square>();
            int[,] offsets = { { -1, 1 }, { 1, 1 }, { 0, 1 }, { 0, 2 } };
            int tempFile, tempRank;
            for (int i = 0; i < offsets.GetLength(0); i++)
            {
                if (offsets[i, 1] == 2 && moved > 0)
                    continue;

                tempFile = s.file;
                tempRank = s.rank;

                if (player == WHITE){
                    tempFile += offsets[i, 0];
                    tempRank += offsets[i, 1];
                }else{
                    tempFile -= offsets[i, 0];
                    tempRank -= offsets[i, 1];
                }

                if (!inBounds(tempFile, tempRank))
                    continue;

                if (tempFile == s.file)
                {
                    if (board.Square[tempFile, tempRank].isEmpty())
                        possibleMoves.Add(new Square(tempFile, tempRank));
                    else break;
                }
                else if(tempFile != s.file && !board.Square[tempFile,tempRank].isEmpty())
                {
                     if(board.Square[tempFile,tempRank].Piece.getPlayer() != player)
                        possibleMoves.Add(new Square(tempFile, tempRank));
                     else continue;
                }
            }
            return possibleMoves;
        }
コード例 #4
0
ファイル: Piece.cs プロジェクト: NickPowers43/ChessGame
 //return a list of all possible moves for a piece
 public abstract List<Square> getPossibleMoves(Board board, Square s);
コード例 #5
0
ファイル: King.cs プロジェクト: NickPowers43/ChessGame
        //get list of possible moves
        public override List<Square> getPossibleMoves(Board board, Square s)
        {
            var possibleMoves = new List<Square>();

            int[,] offsets = { { -1, 1 }, { 0, 1 }, { 1, 1 },
                             { -1, 0 }, { 1, 0 }, { -1, -1 },
                             { 0, -1 }, { 1, -1 } };

            int tempFile, tempRank;
            if (moved == 0)
            {
                //queenside castle
                if (!board.Square[0, s.rank].isEmpty())
                {
                    if (board.Square[0, s.rank].Piece.moved == 0)
                    {
                        for (int i = 4; i > 0; --i)
                        {
                            if (!board.Square[i, s.rank].isEmpty())
                                break;
                            if (i == 1)
                                possibleMoves.Add(new Square(2, s.rank));
                        }
                    }
                }
                //kingside castle
                if (!board.Square[7, s.rank].isEmpty())
                {
                    if (board.Square[7, s.rank].Piece.moved == 0)
                    {
                        for (int i = 4; i < 7; ++i)
                        {
                            if (!board.Square[i, s.rank].isEmpty())
                                break;
                            if (i == 6)
                                possibleMoves.Add(new Square(6, s.rank));
                        }
                    }
                }
            }
            //normal moves
            for (int i = 0; i < offsets.GetLength(0); i++)
            {

                tempFile = s.file;
                tempRank = s.rank;

                tempFile += offsets[i, 0];
                tempRank += offsets[i, 1];

                if (!inBounds(tempFile, tempRank))
                    continue;

                if (!board.Square[tempFile, tempRank].isEmpty())
                {
                    if (board.Square[tempFile, tempRank].Piece.getPlayer() != player)
                        possibleMoves.Add(new Square(tempFile, tempRank));
                    else continue;
                }
                else
                    possibleMoves.Add(new Square(tempFile, tempRank));
            }
            return possibleMoves;
        }
コード例 #6
0
ファイル: Board.cs プロジェクト: NickPowers43/ChessGame
 //initialize square array
 public void InitializeSquares()
 {
     for (int file = 0;  file < 8 ; file++)
         for (int rank = 0; rank < 8; rank++)
             Square[file,rank] = new Square(file,rank);
 }
コード例 #7
0
ファイル: Game1.cs プロジェクト: UnMute93/ChessGame
        public void UpdatePlaying(float deltaTime)
        {
            _gameModeHolder    = this._gameMode;
            previousMouseState = currentMouseState;
            currentMouseState  = Mouse.GetState();
            Vector2 mousePos    = new Vector2(currentMouseState.X, currentMouseState.Y);
            Vector2 buttonPause = new Vector2(750, 650);

            timeDouble++;

            if (currentMouseState.LeftButton == ButtonState.Pressed && previousMouseState.LeftButton != ButtonState.Pressed)
            {
                if (mousePos.X >= buttonPause.X && mousePos.X <= buttonPause.X + btnPausGame.Width &&
                    mousePos.Y >= buttonPause.Y && mousePos.Y <= buttonPause.Y + btnPausGame.Height)
                {
                    stopTime   = timeDouble;
                    _gameState = GameStates.Paused;
                }
            }


            // Clicked on piece
            if (currentMouseState.LeftButton == ButtonState.Pressed && previousMouseState.LeftButton != ButtonState.Pressed)
            {
                foreach (Square square in chess.Board.Squares)
                {
                    // If within bounds of texture
                    if (square.Piece != null && square.Piece.IsSelectable &&
                        mousePos.X >= square.ImagePos.X && mousePos.X <= square.ImagePos.X + square.Image.Width &&
                        mousePos.Y >= square.ImagePos.Y && mousePos.Y <= square.ImagePos.Y + square.Image.Height)
                    {
                        fromSquare       = square;
                        previousPiecePos = square.Piece.ImagePos;
                        draggingPiece    = square.Piece;
                        imageOffset      = fromSquare.Piece.ImagePos - mousePos;
                    }
                }
            }


            if (draggingPiece != null)
            {
                draggingPiece.ImagePos = mousePos + imageOffset;
            }

            if (draggingPiece != null && currentMouseState.LeftButton == ButtonState.Released && previousMouseState.LeftButton != ButtonState.Released)
            {
                bool moveMade = false;
                foreach (Square square in chess.Board.Squares)
                {
                    // If within bounds of texture
                    if (mousePos.X >= square.ImagePos.X && mousePos.X <= square.ImagePos.X + square.Image.Width &&
                        mousePos.Y >= square.ImagePos.Y && mousePos.Y <= square.ImagePos.Y + square.Image.Height)
                    {
                        toSquare = square;
                        if (chess.MakeMove(fromSquare, toSquare))
                        {
                            moveMade = true;

                            foreach (var x in chess.MoveHistory)
                            {
                                moves       = x.TurnNumber.ToString();
                                matchSquare = x.ToString();
                            }

                            allMoves = matchSquare + "\n";
                            arrList.Add(allMoves);
                            if (arrList.Count >= 12)
                            {
                                arrList.RemoveAt(0);
                            }

                            allMoves = String.Join("", arrList.ToArray());
                        }
                    }
                }
                if (!moveMade)
                {
                    draggingPiece.ImagePos = previousPiecePos;
                }

                draggingPiece = null;
            }

            chess.Timers[0].Update(deltaTime);
            chess.Timers[1].Update(deltaTime);

            if (chess.Timers[0].Time <= 0)
            {
                chess.CheckStatus = CheckStatus.WhiteCheckmatedBlack;
            }

            if (chess.Timers[1].Time <= 0)
            {
                chess.CheckStatus = CheckStatus.BlackCheckmatedWhite;
            }

            if (chess.CheckStatus == CheckStatus.BlackCheckmatedWhite)
            {
                checkMate = true;
            }
            if (chess.CheckStatus == CheckStatus.WhiteCheckmatedBlack)
            {
                checkMate = true;
            }

            if (checkMate)
            {
                _gameState = GameStates.EndGame;
                chess      = new Chess(scale, Content, 7200.0f);
                checkMate  = false;
                // Not Done
                //Atm så fungerar Restart så att föredetta gamemode sparas och startas... Brädet nollställs ej vid checkmate bool = true.
            }

            //Beroende på vilken gamemode så ska timer ändras...
            //Needs some tweaking

            /*if (_gameMode == GameModes.Normal)
             * {
             *  _gameMode = GameModes.LoopStopper;
             * }
             * else if (_gameMode == GameModes.Blitz)
             * {
             *
             *  _gameMode = GameModes.LoopStopper;
             * }
             * else if (_gameMode == GameModes.Bullet)
             * {
             *
             *  _gameMode = GameModes.LoopStopper;
             * }
             * else if (_gameMode == GameModes.Rapid)
             * {
             *
             *  _gameMode = GameModes.LoopStopper;
             * }*/
        }
コード例 #8
0
 public FigureOnSquare(Figure figure, Square square)
 {
     Figure = figure;
     Square = square;
 }