def test_corners(self): peter = Bishop(0); self.assertEqual(peter.type(), 'a') peter = Bishop(16); self.assertEqual(peter.type(), 'b') peter = Bishop(136); self.assertEqual(peter.type(), 'c') peter = Bishop(152); self.assertEqual(peter.type(), 'd')
def test_multiple_movments(self): peter = Bishop(76) peter.move(0) peter.move(1) peter.move(3) peter.move(2) self.assertEqual(peter.location(), 76)
def test_top(self): peter = Bishop(151) self.assertEqual(peter.type(), 'B')
def __init__(self, mateInOne = False, castleBoard = False, pessant = False, promotion = False) : self.pieces = [] self.history = [] self.points = 0 self.currentSide = WHITE self.movesMade = 0 self.checkmate = False if not mateInOne and not castleBoard and not pessant and not promotion: self.pieces.extend([Rook(self, BLACK, C(0,7)), Knight(self, BLACK, C(1,7)), Bishop(self, BLACK, C(2,7)), King(self, BLACK, C(3,7)), Queen(self, BLACK, C(4,7)), Bishop(self, BLACK, C(5,7)), Knight(self, BLACK, C(6,7)), Rook(self, BLACK, C(7,7))]) for x in range(8) : self.pieces.append(Pawn(self, BLACK, C(x, 6))) for x in range(8) : self.pieces.append(Pawn(self, WHITE, C(x, 1))) self.pieces.extend([Rook(self, WHITE, C(0,0)), Knight(self, WHITE, C(1,0)), Bishop(self, WHITE, C(2,0)), King(self, WHITE, C(3,0)), Queen(self, WHITE, C(4,0)), Bishop(self, WHITE, C(5,0)), Knight(self, WHITE, C(6,0)), Rook(self, WHITE, C(7,0))]) elif promotion : pawnToPromote = Pawn(self, WHITE, C(1,6)) pawnToPromote.movesMade = 1 kingWhite = King(self, WHITE, C(4,0)) kingBlack = King(self, BLACK, C(3, 2)) self.pieces.extend([pawnToPromote, kingWhite, kingBlack]) elif pessant : pawn = Pawn(self, WHITE, C(1,4)) pawn2 = Pawn(self, BLACK, C(2,6)) kingWhite = King(self, WHITE, C(4,0)) kingBlack = King(self, BLACK, C(3, 2)) self.pieces.extend([pawn, pawn2, kingWhite, kingBlack]) self.history = [] self.currentSide = BLACK self.points = 0 self.movesMade = 0 self.checkmate = False firstMove = Move(pawn2, C(2,4)) self.makeMove(firstMove) self.currentSide = WHITE return
def getPossibleMoves(self): currentPosition = self.position # Движение пешки вперед на 1 клетку movement = C(0, 1) if self.side == WHITE else C(0, -1) advanceOnePosition = currentPosition + movement if self.board.isValidPos(advanceOnePosition): # Продвижение if self.board.pieceAtPosition(advanceOnePosition) is None: col = advanceOnePosition[1] if col == 7 or col == 0: piecesForPromotion = \ [Rook(self.board, self.side, advanceOnePosition), Knight(self.board, self.side, advanceOnePosition), Bishop(self.board, self.side, advanceOnePosition), Queen(self.board, self.side, advanceOnePosition)] for piece in piecesForPromotion: move = Move(self, advanceOnePosition) move.promotion = True move.specialMovePiece = piece yield move else: yield Move(self, advanceOnePosition) # Пешка ходит вперед на 2 клетки if self.movesMade == 0: movement = C(0, 2) if self.side == WHITE else C(0, -2) advanceTwoPosition = currentPosition + movement if self.board.isValidPos(advanceTwoPosition): if self.board.pieceAtPosition(advanceTwoPosition) is None and \ self.board.pieceAtPosition(advanceOnePosition) is None: yield Move(self, advanceTwoPosition) # Пешка ест фигуру противника movements = [C(1, 1), C(-1, 1)] \ if self.side == WHITE else [C(1, -1), C(-1, -1)] for movement in movements: newPosition = self.position + movement if self.board.isValidPos(newPosition): pieceToTake = self.board.pieceAtPosition(newPosition) if pieceToTake and pieceToTake.side != self.side: col = newPosition[1] # достижения другого конца доски, выбор новой фигуры if col == 7 or col == 0: piecesForPromotion = \ [Rook(self.board, self.side, newPosition), Knight(self.board, self.side, newPosition), Bishop(self.board, self.side, newPosition), Queen(self.board, self.side, newPosition)] for piece in piecesForPromotion: move = Move(self, advanceOnePosition) move.promotion = True move.specialMovePiece = piece yield move else: yield Move(self, newPosition, pieceToCapture=pieceToTake) # movements = [C(1, 1), C(-1, 1)] \ if self.side == WHITE else [C(1, -1), C(-1, -1)] for movement in movements: posBesidePawn = self.position + C(movement[0], 0) if self.board.isValidPos(posBesidePawn): pieceBesidePawn = self.board.pieceAtPosition(posBesidePawn) lastPieceMoved = self.board.getLastPieceMoved() lastMoveWasAdvanceTwo = False lastMove = self.board.getLastMove() if lastMove: if lastMove.newPos - lastMove.oldPos == C(0, 2) or \ lastMove.newPos - lastMove.oldPos == C(0, -2): lastMoveWasAdvanceTwo = True if pieceBesidePawn and \ pieceBesidePawn.stringRep == 'p' and \ pieceBesidePawn.side != self.side and \ lastPieceMoved is pieceBesidePawn and \ lastMoveWasAdvanceTwo: move = Move(self, self.position + movement, pieceToCapture=pieceBesidePawn) move.pessant = True move.specialMovePiece = pieceBesidePawn yield move
def test_move_up_left(self): peter = Bishop(76) peter.move(0) self.assertEqual(peter.location(), 58)
def initializePieces(board): row = 1 for col in range(8): board.squares[row][col].piece = Pawn(x=row, y=col, path='../img/black/pawn.png', square=board.squares[row][col], isWhite=False) row = 0 board.squares[row][0].piece = Rook(x=row, y=0, path='../img/black/rook.png', square=board.squares[row][0], isWhite=False) board.squares[row][7].piece = Rook(x=row, y=7, path='../img/black/rook.png', square=board.squares[row][7], isWhite=False) board.squares[row][1].piece = Knight(x=row, y=1, path='../img/black/knight.png', square=board.squares[row][1], isWhite=False) board.squares[row][6].piece = Knight(x=row, y=6, path='../img/black/knight.png', square=board.squares[row][6], isWhite=False) board.squares[row][2].piece = Bishop(x=row, y=2, path='../img/black/bishop.png', square=board.squares[row][2], isWhite=False) board.squares[row][5].piece = Bishop(x=row, y=5, path='../img/black/bishop.png', square=board.squares[row][5], isWhite=False) board.squares[row][3].piece = Queen(x=row, y=3, path='../img/black/queen.png', square=board.squares[row][3], isWhite=False) board.squares[row][4].piece = King(x=row, y=4, path='../img/black/king.png', square=board.squares[row][4], isWhite=False) row = 6 for col in range(8): board.squares[row][col].piece = Pawn(x=row, y=col, path='../img/white/pawn.png', square=board.squares[row][col], isWhite=True) row = 7 board.squares[row][0].piece = Rook(x=row, y=0, path='../img/white/rook.png', square=board.squares[row][0], isWhite=True) board.squares[row][7].piece = Rook(x=row, y=7, path='../img/white/rook.png', square=board.squares[row][7], isWhite=True) board.squares[row][1].piece = Knight(x=row, y=1, path='../img/white/knight.png', square=board.squares[row][1], isWhite=True) board.squares[row][6].piece = Knight(x=row, y=6, path='../img/white/knight.png', square=board.squares[row][6], isWhite=True) board.squares[row][2].piece = Bishop(x=row, y=2, path='../img/white/bishop.png', square=board.squares[row][2], isWhite=True) board.squares[row][5].piece = Bishop(x=row, y=5, path='../img/white/bishop.png', square=board.squares[row][5], isWhite=True) board.squares[row][3].piece = Queen(x=row, y=3, path='../img/white/queen.png', square=board.squares[row][3], isWhite=True) board.squares[row][4].piece = King(x=row, y=4, path='../img/white/king.png', square=board.squares[row][4], isWhite=True)
def test_middle(self): peter = Bishop(76); self.assertEqual(peter.type(), 'M')
def test_centre(self): peter = Bishop(76) self.assertEqual(peter.coords(), [8, 4])
def test_hits_floor(self): peter = Bishop(144); peter.move(3) self.assertEqual(peter.location(), 145)
def test_hits_ceiling(self): peter = Bishop(8); peter.move(1) self.assertEqual(peter.location(), 9)
def test_hits_left(self): peter = Bishop(85); peter.move(2) self.assertEqual(peter.location(), 102)
def test_hits_wall(self): peter = Bishop(84); peter.move(3) self.assertEqual(peter.location(), 101)
def test_move_down_right(self): peter = Bishop(76) peter.move(3) self.assertEqual(peter.location(), 94)
def test_move_down_left(self): peter = Bishop(76) peter.move(2) self.assertEqual(peter.location(), 92)
def test_middle(self): peter = Bishop(76) self.assertEqual(peter.type(), 'M')
def test_print_start(self): peter = Bishop(76) atrium = Atrium(peter, 'RSA 2048', 'MD5') emptyAtrium = open('blank_atrium.txt', 'r').read() self.assertEqual(str(atrium), emptyAtrium)
def test_hits_corner(self): peter = Bishop(152); peter.move(1) self.assertEqual(peter.location(), 135)
def test_top(self): peter = Bishop(151); self.assertEqual(peter.type(), 'B')
def test_centre(self): peter = Bishop(76); self.assertEqual(peter.coords(), [8 ,4])
def test_PieceUpgradeCommand_Bishop_undo(self): upgradeType = PieceType.BISHOP upgradePiece = Bishop( self.color ) self.upgradeUndo( upgradeType, upgradePiece )
def test_hits_corner(self): peter = Bishop(152) peter.move(1) self.assertEqual(peter.location(), 135)
def main(): run = True clock = pygame.time.Clock() bishop_black_pos = [5, 2] bishop_white_pos = [3, 5] goal_pos = [6, 1] steps_knight = [] steps_bishop_black = [] steps_bishop_white = [] display_pause = False game_over = False knight = Knight.Knight() bishop_black = Bishop(bishop_black_pos) bishop_white = Bishop(bishop_white_pos) move = 1 knight_pos = knight.pos while run: clock.tick(FPS) if not display_pause: draw_window(knight_pos, bishop_black_pos, bishop_white_pos, goal_pos, steps_knight, steps_bishop_black, steps_bishop_white) for event in pygame.event.get(): if event.type == pygame.QUIT: run = False pygame.quit() if not game_over: if event.type == pygame.KEYDOWN: # if event.key == pygame.K_DOWN: # bishop_pos[1] += 1 # if event.key == pygame.K_UP: # bishop_pos[1] -= 1 # if event.key == pygame.K_LEFT: # bishop_pos[0] -= 1 # if event.key == pygame.K_RIGHT: # bishop_pos[0] += 1 if event.key == pygame.K_s: knight_pos[1] += 1 knight.pos[1] += 1 if event.key == pygame.K_w: knight_pos[1] -= 1 knight.pos[1] -= 1 if event.key == pygame.K_a: knight_pos[0] -= 1 knight.pos[0] -= 1 if event.key == pygame.K_d: knight_pos[0] += 1 knight.pos[0] += 1 if event.key == pygame.K_SPACE: if move == 1: print("knight move") steps_knight = knight.nextMove(goal_pos) if (knight.pos[0] == goal_pos[0] and knight.pos[1] == goal_pos[1]) or \ (knight.pos[0] == knight_pos[0] and knight.pos[1] == knight_pos[1]): knight_pos = knight.pos game_over = True else: knight_pos = knight.pos print(knight_pos) move = 0 elif move == 0: print("black bishop move") steps_bishop_black = bishop_black.nextMove( knight_pos) bishop_black_pos = bishop_black.pos print("white bishop move") steps_bishop_white = bishop_white.nextMove( knight_pos) bishop_white_pos = bishop_white.pos move = 1 if event.key == pygame.K_z: display_pause = not display_pause if event.key == pygame.K_x: knight.nextMove(goal_pos) bishop_black.fillRange() bishop_white.fillRange() knight.fillObstacles(bishop_black.range, bishop_white.range)
pawnPromotingPos[1]].totalMoves + 1, False) elif newPiece == 'queen': tempBoard[pawnPromotingPos[0]][ pawnPromotingPos[1]] = Queen( pawnPromotingPos[0], pawnPromotingPos[1], tempBoard[pawnPromotingPos[0]][ pawnPromotingPos[1]].color, tempBoard[pawnPromotingPos[0]][ pawnPromotingPos[1]].totalMoves + 1, False) elif newPiece == 'bishop': tempBoard[pawnPromotingPos[0]][ pawnPromotingPos[1]] = Bishop( pawnPromotingPos[0], pawnPromotingPos[1], tempBoard[pawnPromotingPos[0]][ pawnPromotingPos[1]].color, tempBoard[pawnPromotingPos[0]][ pawnPromotingPos[1]].totalMoves + 1, False) displayer.pawnPromoting = False justChanged = True oneSelected = False selectedPos = () entireGameStates.append(makeCopy(tempBoard)) # Update and draw the clock if not timeOver and not checkMate: clock.update(turn) clock.drawClocks(screen) # check if the player clicked the reset the game button and reset it
class Queen(Piece.Piece): def __init__(self, c, px, py): self.color = c self.posX = px self.posY = py self.first_move = True self.bishop = Bishop(self.color, px, py) self.castle = Castle(self.color, px, py) self.table = None self.material = 800 if self.color == "W": self.string_rep = "QW" else: self.string_rep = "QB" self.available_moves = None self.attacking = None self.refresh_on_change_squares = None self.table = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ] def refresh_state(self, board): self.bishop.posX = self.posX self.castle.posX = self.posX self.bishop.posY = self.posY self.castle.posY = self.posY self.bishop.refresh_state(board) self.castle.refresh_state(board) self.available_moves = self.bishop.available_moves + self.castle.available_moves self.attacking = self.bishop.attacking + self.castle.attacking self.refresh_on_change_squares = self.bishop.refresh_on_change_squares + self.castle.refresh_on_change_squares
black_bishop_list = [] black_rook_list = [] for i in range(8): black_pawn_list.append(Pawn('black', 1, i)) white_pawn_list.append(Pawn('white', 6, i)) (chessBoard.get_board())[1][i] = black_pawn_list[i] (chessBoard.get_board())[6][i] = white_pawn_list[i] black_knight_list.append(Knight('black', 0, 1)) black_knight_list.append(Knight('black', 0, 6)) white_knight_list.append(Knight('white', 7, 1)) white_knight_list.append(Knight('white', 7, 6)) (chessBoard.get_board())[0][1] = black_knight_list[0] (chessBoard.get_board())[0][6] = black_knight_list[1] (chessBoard.get_board())[5][2] = Queen('black', 5, 2) # (chessBoard.get_board())[2][4] = Knight('white', 2, 4) (chessBoard.get_board())[3][3] = Bishop('black', 3, 3) (chessBoard.get_board())[7][1] = white_knight_list[0] (chessBoard.get_board())[7][6] = white_knight_list[1] black_bishop_list.append(Bishop('black', 0, 2)) black_bishop_list.append(Bishop('black', 0, 5)) white_bishop_list.append(Bishop('white', 7, 2)) white_bishop_list.append(Bishop('white', 7, 5)) (chessBoard.get_board())[0][2] = black_bishop_list[0] (chessBoard.get_board())[0][5] = black_bishop_list[1] (chessBoard.get_board())[7][2] = white_bishop_list[0] (chessBoard.get_board())[7][5] = white_bishop_list[1] black_rook_list.append(Rook('black', 0, 0)) black_rook_list.append(Rook('black', 0, 7)) white_rook_list.append(Rook('white', 7, 0)) white_rook_list.append(Rook('white', 7, 7)) (chessBoard.get_board())[0][0] = black_rook_list[0]
def __init__(self, c, px, py): self.color = c self.posX = px self.posY = py self.first_move = True self.bishop = Bishop(self.color, px, py) self.castle = Castle(self.color, px, py) self.table = None self.material = 800 if self.color == "W": self.string_rep = "QW" else: self.string_rep = "QB" self.available_moves = None self.attacking = None self.refresh_on_change_squares = None self.table = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ]
def test_top(self): peter = Bishop(8) self.assertEqual(peter.type(), 'T')
def initialize_board(self): i = 0 j = 0 pawn_labels = ["P1", "P2", "P3", "P4", "P5", "P6", "P7", "P8"] queen_label = "Q" rook_labels = ["R1", "R2"] bishop_labels = ["B1", "B2"] king_label = "K" knight_labels = ["N1", "N2"] #White Pawns for n in range(8): i, j = self.xy_to_ij(n, 1) self.board[i][j].change_square_state() self.board[i][j].set_piece(Pawn()) self.board[i][j].return_piece().set_labelp(pawn_labels[n]) self.board[i][j].return_piece().set_locp(n, 1) self.board[i][j].return_piece().set_color_string("White") #White Queen i, j = self.xy_to_ij(3, 0) self.board[i][j].change_square_state() self.board[i][j].set_piece(Queen()) self.board[i][j].return_piece().set_labelp(queen_label) self.board[i][j].return_piece().set_locp(3, 0) self.board[i][j].return_piece().set_color_string("White") #White Rooks i, j = self.xy_to_ij(0, 0) self.board[i][j].change_square_state() self.board[i][j].set_piece(Rook()) self.board[i][j].return_piece().set_labelp(rook_labels[0]) self.board[i][j].return_piece().set_locp(0, 0) self.board[i][j].return_piece().set_color_string("White") i, j = self.xy_to_ij(7, 0) self.board[i][j].change_square_state() self.board[i][j].set_piece(Rook()) self.board[i][j].return_piece().set_labelp(rook_labels[1]) self.board[i][j].return_piece().set_locp(7, 0) self.board[i][j].return_piece().set_color_string("White") #White Bishops i, j = self.xy_to_ij(2, 0) self.board[i][j].change_square_state() self.board[i][j].set_piece(Bishop()) self.board[i][j].return_piece().set_labelp(bishop_labels[0]) self.board[i][j].return_piece().set_locp(2, 0) self.board[i][j].return_piece().set_color_string("White") i, j = self.xy_to_ij(5, 0) self.board[i][j].change_square_state() self.board[i][j].set_piece(Bishop()) self.board[i][j].return_piece().set_labelp(bishop_labels[1]) self.board[i][j].return_piece().set_locp(5, 0) self.board[i][j].return_piece().set_color_string("White") #White King i, j = self.xy_to_ij(4, 0) self.board[i][j].change_square_state() self.board[i][j].set_piece(King()) self.board[i][j].return_piece().set_labelp(king_label) self.board[i][j].return_piece().set_locp(4, 0) self.board[i][j].return_piece().set_color_string("White") #White Knights i, j = self.xy_to_ij(1, 0) self.board[i][j].change_square_state() self.board[i][j].set_piece(Knight()) self.board[i][j].return_piece().set_labelp(knight_labels[0]) self.board[i][j].return_piece().set_locp(1, 0) self.board[i][j].return_piece().set_color_string("White") i, j = self.xy_to_ij(6, 0) self.board[i][j].change_square_state() self.board[i][j].set_piece(Knight()) self.board[i][j].return_piece().set_labelp(knight_labels[1]) self.board[i][j].return_piece().set_locp(6, 0) self.board[i][j].return_piece().set_color_string("White") #Black Pawns for n in range(8): i, j = self.xy_to_ij(7 - n, 6) self.board[i][j].change_square_state() self.board[i][j].set_piece(Pawn()) self.board[i][j].return_piece().change_colorp() self.board[i][j].return_piece().set_labelp(pawn_labels[n]) self.board[i][j].return_piece().set_locp(7 - n, 6) self.board[i][j].return_piece().set_color_string("Black") #Black Queen i, j = self.xy_to_ij(3, 7) self.board[i][j].change_square_state() self.board[i][j].set_piece(Queen()) self.board[i][j].return_piece().set_labelp(queen_label) self.board[i][j].return_piece().set_locp(3, 7) self.board[i][j].return_piece().set_color_string("Black") #Black Rooks i, j = self.xy_to_ij(0, 7) self.board[i][j].change_square_state() self.board[i][j].set_piece(Rook()) self.board[i][j].return_piece().set_labelp(rook_labels[1]) self.board[i][j].return_piece().set_locp(0, 7) self.board[i][j].return_piece().set_color_string("Black") i, j = self.xy_to_ij(7, 7) self.board[i][j].change_square_state() self.board[i][j].set_piece(Rook()) self.board[i][j].return_piece().set_labelp(rook_labels[0]) self.board[i][j].return_piece().set_locp(7, 7) self.board[i][j].return_piece().set_color_string("Black") #Black Bishops i, j = self.xy_to_ij(2, 7) self.board[i][j].change_square_state() self.board[i][j].set_piece(Bishop()) self.board[i][j].return_piece().set_labelp(bishop_labels[1]) self.board[i][j].return_piece().set_locp(2, 7) self.board[i][j].return_piece().set_color_string("Black") i, j = self.xy_to_ij(5, 7) self.board[i][j].change_square_state() self.board[i][j].set_piece(Bishop()) self.board[i][j].return_piece().set_labelp(bishop_labels[0]) self.board[i][j].return_piece().set_locp(5, 7) self.board[i][j].return_piece().set_color_string("Black") #White King i, j = self.xy_to_ij(4, 7) self.board[i][j].change_square_state() self.board[i][j].set_piece(King()) self.board[i][j].return_piece().set_labelp(king_label) self.board[i][j].return_piece().set_locp(4, 7) self.board[i][j].return_piece().set_color_string("Black") #White Knights i, j = self.xy_to_ij(1, 7) self.board[i][j].change_square_state() self.board[i][j].set_piece(Knight()) self.board[i][j].return_piece().set_labelp(knight_labels[1]) self.board[i][j].return_piece().set_locp(1, 7) self.board[i][j].return_piece().set_color_string("Black") i, j = self.xy_to_ij(6, 7) self.board[i][j].change_square_state() self.board[i][j].set_piece(Knight()) self.board[i][j].return_piece().set_labelp(knight_labels[0]) self.board[i][j].return_piece().set_locp(6, 7) self.board[i][j].return_piece().set_color_string("Black")
def test_left(self): peter = Bishop(102) self.assertEqual(peter.type(), 'L')
def __init__(self, mateInOne=False, castleBoard=False, passant=False, promotion=False): self.pieces = [] self.history = [] self.points = 0 self.currentSide = WHITE self.movesMade = 0 self.checkmate = False if not mateInOne and not castleBoard and not passant and not promotion: self.pieces.extend([ Rook(self, BLACK, C(0, 7)), Knight(self, BLACK, C(1, 7)), Bishop(self, BLACK, C(2, 7)), Queen(self, BLACK, C(3, 7)), King(self, BLACK, C(4, 7)), Bishop(self, BLACK, C(5, 7)), Knight(self, BLACK, C(6, 7)), Rook(self, BLACK, C(7, 7)) ]) for x in range(8): self.pieces.append(Pawn(self, BLACK, C(x, 6))) for x in range(8): self.pieces.append(Pawn(self, WHITE, C(x, 1))) self.pieces.extend([ Rook(self, WHITE, C(0, 0)), Knight(self, WHITE, C(1, 0)), Bishop(self, WHITE, C(2, 0)), Queen(self, WHITE, C(3, 0)), King(self, WHITE, C(4, 0)), Bishop(self, WHITE, C(5, 0)), Knight(self, WHITE, C(6, 0)), Rook(self, WHITE, C(7, 0)) ]) elif mateInOne: kingW = King(self, WHITE, C(4, 0)) kingB = King(self, BLACK, C(4, 7)) rook1 = Rook(self, WHITE, C(3, 0)) rook2 = Rook(self, WHITE, C(5, 0)) queen = Queen(self, WHITE, C(7, 1)) self.pieces.extend([kingW, kingB, rook1, rook2, queen]) elif castleBoard: kingW = King(self, WHITE, C(4, 0)) kingB = King(self, BLACK, C(4, 7)) rook1 = Rook(self, WHITE, C(0, 0)) rook2 = Rook(self, WHITE, C(7, 0)) pawn1 = Pawn(self, WHITE, C(1, 3)) pawn2 = Pawn(self, WHITE, C(2, 1)) bshp = Bishop(self, WHITE, C(3, 3)) queen = Queen(self, BLACK, C(2, 4)) self.pieces.extend( [kingW, kingB, rook1, rook2, pawn1, pawn2, bshp, queen]) elif promotion: pawn1 = Pawn(self, WHITE, C(1, 6)) pawn1.movesMade = 1 pawn2 = Pawn(self, WHITE, C(2, 6)) pawn3 = Pawn(self, WHITE, C(3, 5)) pawnB = Pawn(self, BLACK, C(2, 7)) kingWhite = King(self, WHITE, C(4, 0)) kingBlack = King(self, BLACK, C(3, 2)) self.pieces.extend( [pawn1, pawn2, pawn3, pawnB, kingWhite, kingBlack]) elif passant: pawn = Pawn(self, WHITE, C(1, 4)) pawn2 = Pawn(self, BLACK, C(2, 6)) kingWhite = King(self, WHITE, C(4, 0)) kingBlack = King(self, BLACK, C(3, 2)) self.pieces.extend([pawn, pawn2, kingWhite, kingBlack]) self.history = [] self.currentSide = BLACK self.points = 0 self.movesMade = 0 self.checkmate = False firstMove = Move(pawn2, C(2, 4)) self.makeMove(firstMove) self.currentSide = WHITE return
def test_corners(self): peter = Bishop(0) self.assertEqual(peter.type(), 'a') peter = Bishop(16) self.assertEqual(peter.type(), 'b') peter = Bishop(136) self.assertEqual(peter.type(), 'c') peter = Bishop(152) self.assertEqual(peter.type(), 'd')
def test_print_single_move(self): peter = Bishop(76) atrium = Atrium(peter, 'RSA 2048', 'MD5') atrium.move(0) dottyAtrium = open('atrium_single_move.txt', 'r').read() self.assertEqual(str(atrium), dottyAtrium)
def test_top(self): peter = Bishop(8); self.assertEqual(peter.type(), 'T')
def test_hits_wall(self): peter = Bishop(84) peter.move(3) self.assertEqual(peter.location(), 101)
def test_left(self): peter = Bishop(102); self.assertEqual(peter.type(), 'L')
def test_hits_left(self): peter = Bishop(85) peter.move(2) self.assertEqual(peter.location(), 102)
def test_hits_ceiling(self): peter = Bishop(8) peter.move(1) self.assertEqual(peter.location(), 9)
def test_hits_floor(self): peter = Bishop(144) peter.move(3) self.assertEqual(peter.location(), 145)
def getPossibleMoves(self): currentPosition = self.position # Pawn moves one up movement = C(0, 1) if self.side == WHITE else C(0, -1) advanceOnePosition = currentPosition + movement if self.board.isValidPos(advanceOnePosition): #Promotion moves if self.board.pieceAtPosition(advanceOnePosition) is None: col = advanceOnePosition[1] if col == 7 or col == 0: piecesForPromotion = [ Rook(self.board, self.side, advanceOnePosition), Knight(self.board, self.side, advanceOnePosition), Bishop(self.board, self.side, advanceOnePosition), Queen(self.board, self.side, advanceOnePosition) ] for piece in piecesForPromotion: move = Move(self, advanceOnePosition) move.promotion = True move.specialMovePiece = piece yield move else: yield Move(self, advanceOnePosition) #Pawn moves two up if self.movesMade == 0: movement = C(0, 2) if self.side == WHITE else C(0, -2) advanceTwoPosition = currentPosition + movement if self.board.isValidPos(advanceTwoPosition): if self.board.pieceAtPosition( advanceTwoPosition ) is None and self.board.pieceAtPosition( advanceOnePosition) is None: yield Move(self, advanceTwoPosition) #Pawn takes movements = [C(1, 1), C( -1, 1)] if self.side == WHITE else [C(1, -1), C(-1, -1)] for movement in movements: newPosition = self.position + movement if self.board.isValidPos(newPosition): pieceToTake = self.board.pieceAtPosition(newPosition) if pieceToTake and pieceToTake.side != self.side: col = newPosition[1] #Promotions if col == 7 or col == 0: piecesForPromotion = [ Rook(self.board, self.side, newPosition), Knight(self.board, self.side, newPosition), Bishop(self.board, self.side, newPosition), Queen(self.board, self.side, newPosition) ] for piece in piecesForPromotion: move = Move(self, advanceOnePosition) move.promotion = True move.specialMovePiece = piece yield move else: yield Move(self, newPosition, pieceToCapture=pieceToTake) #En pessant movements = [C(1, 1), C( -1, 1)] if self.side == WHITE else [C(1, -1), C(-1, -1)] for movement in movements: posBesidePawn = self.position + C(movement[0], 0) if self.board.isValidPos(posBesidePawn): pieceBesidePawn = self.board.pieceAtPosition(posBesidePawn) lastPieceMoved = self.board.getLastPieceMoved() lastMoveWasAdvanceTwo = False lastMove = self.board.getLastMove() if lastMove: if lastMove.newPos - lastMove.oldPos == C( 0, 2) or lastMove.newPos - lastMove.oldPos == C( 0, -2): lastMoveWasAdvanceTwo = True if pieceBesidePawn and pieceBesidePawn.stringRep == 'p' and pieceBesidePawn.side != self.side and lastPieceMoved is pieceBesidePawn and lastMoveWasAdvanceTwo: move = Move(self, self.position + movement, pieceToCapture=pieceBesidePawn) move.pessant = True move.specialMovePiece = pieceBesidePawn yield move
blackPawn1 = Pawn("black", (1, 0)) blackPawn2 = Pawn("black", (1, 1)) blackPawn3 = Pawn("black", (1, 2)) blackPawn4 = Pawn("black", (1, 3)) blackPawn5 = Pawn("black", (1, 4)) blackPawn6 = Pawn("black", (1, 5)) blackPawn7 = Pawn("black", (1, 6)) blackPawn8 = Pawn("black", (1, 7)) blackRook1 = Rook("black", (0, 0)) blackRook2 = Rook("black", (0, 7)) blackKnight1 = Knight("black", (0, 1)) blackKnight2 = Knight("black", (0, 6)) blackBishop1 = Bishop("black", (0, 2)) blackBishop2 = Bishop("black", (0, 5)) blackQueen = Queen("black", (0, 3)) blackKing = King("black", (0, 4)) # black pieces whitePawn1 = Pawn("white", (6, 0)) whitePawn2 = Pawn("white", (6, 1)) whitePawn3 = Pawn("white", (6, 2)) whitePawn4 = Pawn("white", (6, 3)) whitePawn5 = Pawn("white", (6, 4)) whitePawn6 = Pawn("white", (6, 5)) whitePawn7 = Pawn("white", (6, 6)) whitePawn8 = Pawn("white", (6, 7))