still nonfunctional
This commit is contained in:
parent
1b9820b6c9
commit
089b588450
1 changed files with 58 additions and 45 deletions
121
player.py
121
player.py
|
@ -30,6 +30,12 @@ class Piece:
|
|||
letter = letter.lower()
|
||||
return [letter, self.p, self.q]
|
||||
|
||||
def __repr__(self):
|
||||
return ",".join(map(str, self.get_piece_info(True)+[self.team]))
|
||||
|
||||
def __str__(self):
|
||||
return self.__repr__()
|
||||
|
||||
def validate_jumps(self, board):
|
||||
valid_jumps = self.get_valid_jumps(board)
|
||||
validated_jumps = []
|
||||
|
@ -197,6 +203,8 @@ class Player(Base.Board):
|
|||
self.playerName = playerName
|
||||
self.myIsUpper = myIsUpper
|
||||
self.algorithmName = "just roll the dice, eh?"
|
||||
self.transated_board = dict()
|
||||
self.can_place = lambda: sum([v for v in self.myPieces.values()])
|
||||
|
||||
def getAllEmptyCells(self):
|
||||
result = []
|
||||
|
@ -251,6 +259,10 @@ class Player(Base.Board):
|
|||
def queen_placed(self):
|
||||
return any(isinstance(p, Bee) for p in self.myPieces)
|
||||
|
||||
|
||||
def random_piece(self, pieces):
|
||||
return random.choice(pieces) if pieces else None
|
||||
|
||||
def get_piece_class(self, letter):
|
||||
return {"Q": Bee, "B": Beetle, "S": Spider, "G": Grasshopper, "A": Ant}.get(
|
||||
letter.upper()
|
||||
|
@ -292,75 +304,76 @@ class Player(Base.Board):
|
|||
|
||||
return valid_placements
|
||||
|
||||
def move(self):
|
||||
translated_board, total_pieces_count, _ = self.translate_board(self.board)
|
||||
|
||||
def choose_random_piece(pieces):
|
||||
return random.choice(pieces) if pieces else None
|
||||
|
||||
# Check if the queen bee is placed
|
||||
bee_unplaced = "q" in [k.lower() for k in self.myPieces.keys()] and {k.lower(): v for k,v in self.myPieces.items()}["q"]!=0
|
||||
|
||||
# Logic for placing the queen bee based on a coin flip or on the 4th turn
|
||||
if bee_unplaced and (total_pieces_count > 3 or random.choice([True, False])):
|
||||
queen_bee = self.get_piece_class('Q')(None, None, True)
|
||||
valid_placements = self.get_valid_placements(translated_board, queen_bee)
|
||||
if valid_placements:
|
||||
new_p, new_q = random.choice(valid_placements)
|
||||
return queen_bee.get_piece_info(self.myIsUpper)[0]+ [None, None, new_p, new_q]
|
||||
|
||||
if total_pieces_count == 0:
|
||||
piece_to_place = choose_random_piece(self.get_unplaced_pieces())
|
||||
return (
|
||||
piece_to_place.get_piece_info(self.myIsUpper)[:1] + [None, None, 3, 6]
|
||||
if piece_to_place
|
||||
else []
|
||||
)
|
||||
|
||||
elif total_pieces_count == 1:
|
||||
for _, row in translated_board.items():
|
||||
for _, piece in row.items():
|
||||
if piece:
|
||||
adjacent_positions = get_neighbors(piece.p, piece.q)
|
||||
random_position = choose_random_piece(adjacent_positions)
|
||||
piece_to_place = choose_random_piece(self.get_unplaced_pieces())
|
||||
return (
|
||||
piece_to_place.get_piece_info(self.myIsUpper)[:1]
|
||||
+ [None, None, *random_position]
|
||||
if piece_to_place
|
||||
else []
|
||||
)
|
||||
|
||||
else:
|
||||
move_or_place = random.choice(["move", "place"])
|
||||
if move_or_place == "move":
|
||||
def mover(self):
|
||||
movable_pieces = [
|
||||
piece
|
||||
for row in translated_board.values()
|
||||
for row in self.translated_board.values()
|
||||
for piece in row.values()
|
||||
if piece and piece.team and piece.validate_jumps(translated_board)
|
||||
if piece and piece.team and piece.validate_jumps(self.translated_board)
|
||||
]
|
||||
chosen_piece = choose_random_piece(movable_pieces)
|
||||
print(movable_pieces)
|
||||
input()
|
||||
chosen_piece = self.random_piece(movable_pieces) # -> can be None, usually the cause for an error
|
||||
if chosen_piece:
|
||||
new_p, new_q = random.choice(
|
||||
chosen_piece.validate_jumps(translated_board)
|
||||
chosen_piece.validate_jumps(self.translated_board)
|
||||
)
|
||||
return chosen_piece.get_piece_info(self.myIsUpper) + [new_p, new_q]
|
||||
else:
|
||||
piece_to_place = choose_random_piece(self.get_unplaced_pieces())
|
||||
|
||||
def placer(self):
|
||||
piece_to_place = self.random_piece(self.get_unplaced_pieces())
|
||||
if piece_to_place is None:
|
||||
return self.mover()
|
||||
if piece_to_place:
|
||||
valid_placements = self.get_valid_placements(translated_board, piece_to_place)
|
||||
new_p, new_q = (
|
||||
random.choice(valid_placements)
|
||||
if valid_placements
|
||||
else (None, None)
|
||||
)
|
||||
valid_placements = self.get_valid_placements(self.translated_board, piece_to_place)
|
||||
new_p, new_q = random.choice(valid_placements)
|
||||
return piece_to_place.get_piece_info(self.myIsUpper)[:1] + [
|
||||
None,
|
||||
None,
|
||||
new_p,
|
||||
new_q,
|
||||
]
|
||||
|
||||
def update(self):
|
||||
self.translated_board, total_pieces_count, my_pieces_count = self.translate_board(self.board)
|
||||
return total_pieces_count, my_pieces_count
|
||||
def move(self):
|
||||
total_pieces_count, my_pieces_count = self.update()
|
||||
|
||||
bee_unplaced = "q" in [k.lower() for k in self.myPieces.keys()] and {k.lower(): v for k,v in self.myPieces.items()}["q"]!=0
|
||||
|
||||
if bee_unplaced and (total_pieces_count > 3 or random.choice([True, False])):
|
||||
queen_bee = self.get_piece_class('Q')(None, None, True)
|
||||
valid_placements = self.get_valid_placements(self.translated_board, queen_bee)
|
||||
if valid_placements:
|
||||
new_p, new_q = random.choice(valid_placements)
|
||||
return queen_bee.get_piece_info(self.myIsUpper)[:1]+ [None, None, new_p, new_q]
|
||||
|
||||
if total_pieces_count == 0:
|
||||
piece_to_place = self.random_piece(self.get_unplaced_pieces())
|
||||
return (
|
||||
piece_to_place.get_piece_info(self.myIsUpper)[:1] + [None, None, 3, 6]
|
||||
)
|
||||
|
||||
elif total_pieces_count == 1:
|
||||
for _, row in self.translated_board.items():
|
||||
for _, piece in row.items():
|
||||
if piece:
|
||||
adjacent_positions = get_neighbors(piece.p, piece.q)
|
||||
random_position = self.random_piece(adjacent_positions)
|
||||
piece_to_place = self.random_piece(self.get_unplaced_pieces())
|
||||
return (
|
||||
piece_to_place.get_piece_info(self.myIsUpper)[:1]
|
||||
+ [None, None, *random_position]
|
||||
)
|
||||
elif self.myMove <= 4:
|
||||
return self.placer()
|
||||
else:
|
||||
move_or_place = random.choice(["move", "place"]) if self.can_place else "move"
|
||||
if move_or_place == "place":
|
||||
return self.placer()
|
||||
else:
|
||||
return self.mover()
|
||||
return []
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue