still nonfunctional

This commit is contained in:
Heli-o 2024-01-05 18:21:32 +01:00
parent 1b9820b6c9
commit 089b588450

103
player.py
View file

@ -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 mover(self):
movable_pieces = [
piece
for row in self.translated_board.values()
for piece in row.values()
if piece and piece.team and piece.validate_jumps(self.translated_board)
]
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(self.translated_board)
)
return chosen_piece.get_piece_info(self.myIsUpper) + [new_p, new_q]
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(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):
translated_board, total_pieces_count, _ = self.translate_board(self.board)
total_pieces_count, my_pieces_count = self.update()
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)
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)[0]+ [None, None, new_p, new_q]
return queen_bee.get_piece_info(self.myIsUpper)[:1]+ [None, None, new_p, new_q]
if total_pieces_count == 0:
piece_to_place = choose_random_piece(self.get_unplaced_pieces())
piece_to_place = self.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 _, row in self.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())
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]
if piece_to_place
else []
)
elif self.myMove <= 4:
return self.placer()
else:
move_or_place = random.choice(["move", "place"])
if move_or_place == "move":
movable_pieces = [
piece
for row in translated_board.values()
for piece in row.values()
if piece and piece.team and piece.validate_jumps(translated_board)
]
chosen_piece = choose_random_piece(movable_pieces)
if chosen_piece:
new_p, new_q = random.choice(
chosen_piece.validate_jumps(translated_board)
)
return chosen_piece.get_piece_info(self.myIsUpper) + [new_p, new_q]
move_or_place = random.choice(["move", "place"]) if self.can_place else "move"
if move_or_place == "place":
return self.placer()
else:
piece_to_place = choose_random_piece(self.get_unplaced_pieces())
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)
)
return piece_to_place.get_piece_info(self.myIsUpper)[:1] + [
None,
None,
new_p,
new_q,
]
return self.mover()
return []