//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; }
//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; }
//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; }
//return a list of all possible moves for a piece public abstract List<Square> getPossibleMoves(Board board, Square s);
//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; }
//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); }
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; * }*/ }
public FigureOnSquare(Figure figure, Square square) { Figure = figure; Square = square; }