public BoardPositions GetMovableBoardPositions( PlayerType player, BoardPosition position, Board board, BoardPositions turnPlayerKomaPositions, BoardPositions opponentKomaPositions) { var positions = new BoardPositions(); // [後手なら移動可能位置は反転される] var toRelativePos = RelativeBoardPosition; if (player == PlayerType.SecondPlayer) { toRelativePos = toRelativePos.Reverse(); } var toPos = position.Add(toRelativePos); if (board.Positions.Contains(toPos)) { if (!turnPlayerKomaPositions.Contains(toPos)) { positions = positions.Add(toPos); } } return(positions); }
public BoardPositions MovablePosition(List <Koma> komaList) { lock (thisLock) { var movablePositions = new BoardPositions(); foreach (var koma in komaList) { movablePositions = movablePositions.Add(MovablePosition(koma)); } return(movablePositions); } }
public BoardPositions GetMovableBoardPositions( Board board, BoardPositions playerKomaPositions, BoardPositions opponentPlayerKomaPositions) { return(State.GetMovableBoardPositions( KomaType, Player, board, playerKomaPositions, opponentPlayerKomaPositions)); }
public BoardPositions GetMovableBoardPositions( KomaType koma, PlayerType player, Board board, BoardPositions playerKomaPositions, BoardPositions opponentPlayerKomaPositions) { // [手駒なら空き位置のどこでも置ける] var positions = board.Positions; positions = positions.Substract(playerKomaPositions); positions = positions.Substract(opponentPlayerKomaPositions); return(positions); }
public void SelectPosition(string input) { if (BoardPositions.ContainsKey(input)) { if (SelectedPosition != null) { DeselectPosition(); } SelectedPosition = BoardPositions[input]; DrawSelectedPosition(); } }
public ShotStatus FireAtShip(Coordinates position) { if (BoardPositions.Contains(position)) { _lifeRemaining--; if (_lifeRemaining == 0) { return(ShotStatus.HitAndSunk); } return(ShotStatus.Hit); } return(ShotStatus.Miss); }
public BoardPositions GetMovableBoardPositions( KomaType komaType, PlayerType player, Board board, BoardPositions playerKomaPositions, BoardPositions opponentPlayerKomaPositions) { return(komaType.GetMovableBoardPositions( player, Position, IsTransformed, board, playerKomaPositions, opponentPlayerKomaPositions)); }
public ShotStatus FireAtShip(Coordinate position) // loop through ships and find if ship xists at those coordinates... { if (BoardPositions.Contains(position)) { _lifeRemaining--; if (_lifeRemaining == 0) { return(ShotStatus.HitAndSunk); } return(ShotStatus.Hit); } return(ShotStatus.Miss); }
public BoardPositions GetMovableBoardPositions( PlayerType player, BoardPosition position, Board board, BoardPositions turnPlayerKomaPositions, BoardPositions opponentKomaPositions) { var positions = new BoardPositions(); // [後手なら移動可能位置は反転される] var toRelativePos = RelativeBoardPosition; if (player == PlayerType.SecondPlayer) { toRelativePos = toRelativePos.Reverse(); } for (var toPos = position.Add(toRelativePos); ; toPos = toPos.Add(toRelativePos)) { // [盤の範囲外に来たら移動不可] if (!board.Positions.Contains(toPos)) { break; } // [自分の駒に当たったら移動不可]] if (turnPlayerKomaPositions.Contains(toPos)) { break; } positions = positions.Add(toPos); // [相手の駒があったらその先は移動できない] if (opponentKomaPositions.Contains(toPos)) { break; } } return(positions); }
public BoardPositions GetMovableBoardPositions( PlayerType player, BoardPosition position, Board board, BoardPositions turnPlayerKomaPositions, BoardPositions opponentKomaPositions) { BoardPositions positions = new BoardPositions(); foreach (var move in Moves) { positions = positions.Add( move.GetMovableBoardPositions( player, position as BoardPosition, board, turnPlayerKomaPositions, opponentKomaPositions)); } return(positions); }
/* * Initialize all game-driven variables who's values must be retained for the duration * of the game, and are not set with every move (startXCoord, for example). */ public Game(Player p1, Player p2) { whiteTurn = true; kingPos = new BoardSquare[2] { new BoardSquare(4, 0), new BoardSquare(4, 7) }; gameStatus = GameStatusCodes.normal; attackingPieces = new BoardSquare[2] { BoardSquare.Empty, BoardSquare.Empty, }; allMoves = new List<ChessMove>(); positions = new BoardPositions(Game.DRAW_LIMIT, BoardPositions.DEFAULT_START); PlayerWhite = p1; PlayerBlack = p2; board = new Board(this); board[0, 0] = new Rook(Piece.NOTATION_W); board[0, 1] = new Knight(Piece.NOTATION_W); board[0, 2] = new Bishop(Piece.NOTATION_W); board[0, 3] = new Queen(Piece.NOTATION_W); board[0, 4] = new King(Piece.NOTATION_W); board[0, 5] = new Bishop(Piece.NOTATION_W); board[0, 6] = new Knight(Piece.NOTATION_W); board[0, 7] = new Rook(Piece.NOTATION_W); board[1, 0] = new Pawn(Piece.NOTATION_W); board[1, 1] = new Pawn(Piece.NOTATION_W); board[1, 2] = new Pawn(Piece.NOTATION_W); board[1, 3] = new Pawn(Piece.NOTATION_W); board[1, 4] = new Pawn(Piece.NOTATION_W); board[1, 5] = new Pawn(Piece.NOTATION_W); board[1, 6] = new Pawn(Piece.NOTATION_W); board[1, 7] = new Pawn(Piece.NOTATION_W); board[7, 0] = new Rook(Piece.NOTATION_B); board[7, 1] = new Knight(Piece.NOTATION_B); board[7, 2] = new Bishop(Piece.NOTATION_B); board[7, 3] = new Queen(Piece.NOTATION_B); board[7, 4] = new King(Piece.NOTATION_B); board[7, 5] = new Bishop(Piece.NOTATION_B); board[7, 6] = new Knight(Piece.NOTATION_B); board[7, 7] = new Rook(Piece.NOTATION_B); board[6, 0] = new Pawn(Piece.NOTATION_B); board[6, 1] = new Pawn(Piece.NOTATION_B); board[6, 2] = new Pawn(Piece.NOTATION_B); board[6, 3] = new Pawn(Piece.NOTATION_B); board[6, 4] = new Pawn(Piece.NOTATION_B); board[6, 5] = new Pawn(Piece.NOTATION_B); board[6, 6] = new Pawn(Piece.NOTATION_B); board[6, 7] = new Pawn(Piece.NOTATION_B); }