Example #1
0
 def execute_piece_movement(self, piece: Piece) -> int:
     target_x, target_y = piece.get_target_coordinates()
     target_tile = self.get_tile(target_x, target_y)
     if target_tile.piece is None:
         self.commit_piece_movement(piece, piece.tile, target_tile)
         return 1
     elif piece.is_pusher():
         push_movements = self.get_chained_push_movements(piece.tile, target_tile)
         for push_source_tile, push_target_tile in reversed(push_movements):
             if push_target_tile is None:
                 push_source_tile.piece.remove_from_play()
                 push_source_tile.remove_piece()
             else:
                 self.commit_piece_movement(push_source_tile.piece, push_source_tile, push_target_tile)
         return len(push_movements)
     elif target_tile.piece.is_pushable() and not piece.is_pushable():
         dx, dy = piece.get_movement_offsets()
         push_target_tile = self.get_tile(x=target_tile.x + dx, y=target_tile.y + dy)
         if push_target_tile is None or push_target_tile.piece is None:
             self.commit_piece_movement(target_tile.piece, target_tile, push_target_tile)
             self.commit_piece_movement(piece, piece.tile, target_tile)
             return 2
         else:
             self.remove_piece_stuck_in_perimeter(piece.tile, piece)
     else:
         self.remove_piece_stuck_in_perimeter(piece.tile, piece)
     return 0
Example #2
0
 def draw_piece(self, piece: Piece, x, y):
     pygame.draw.circle(self.screen, PLAYER_COLOR[piece.owner_id],
                        (x + DX / 2, y + DY / 2), DX * 0.3)
     dir_x, dir_y = piece.get_movement_offsets()
     pygame.draw.polygon(self.screen,
                         PLAYER_COLOR[piece.owner_id],
                         points=self.get_poli_points(
                             x, y, DX, DY, dir_x, dir_y))
     self.screen.blit(self.piece_type_image[piece.type],
                      (x + DX / 2.5, y + DY / 3))