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

@ -29,6 +29,12 @@ class Piece:
if not myisupper: if not myisupper:
letter = letter.lower() letter = letter.lower()
return [letter, self.p, self.q] 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): def validate_jumps(self, board):
valid_jumps = self.get_valid_jumps(board) valid_jumps = self.get_valid_jumps(board)
@ -197,6 +203,8 @@ class Player(Base.Board):
self.playerName = playerName self.playerName = playerName
self.myIsUpper = myIsUpper self.myIsUpper = myIsUpper
self.algorithmName = "just roll the dice, eh?" 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): def getAllEmptyCells(self):
result = [] result = []
@ -250,6 +258,10 @@ class Player(Base.Board):
@property @property
def queen_placed(self): def queen_placed(self):
return any(isinstance(p, Bee) for p in self.myPieces) 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): def get_piece_class(self, letter):
return {"Q": Bee, "B": Beetle, "S": Spider, "G": Grasshopper, "A": Ant}.get( return {"Q": Bee, "B": Beetle, "S": Spider, "G": Grasshopper, "A": Ant}.get(
@ -291,76 +303,77 @@ class Player(Base.Board):
valid_placements.append((p, q)) valid_placements.append((p, q))
return valid_placements 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): 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 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])): if bee_unplaced and (total_pieces_count > 3 or random.choice([True, False])):
queen_bee = self.get_piece_class('Q')(None, None, True) 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: if valid_placements:
new_p, new_q = random.choice(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: 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 ( return (
piece_to_place.get_piece_info(self.myIsUpper)[:1] + [None, None, 3, 6] piece_to_place.get_piece_info(self.myIsUpper)[:1] + [None, None, 3, 6]
if piece_to_place
else []
) )
elif total_pieces_count == 1: elif total_pieces_count == 1:
for _, row in translated_board.items(): for _, row in self.translated_board.items():
for _, piece in row.items(): for _, piece in row.items():
if piece: if piece:
adjacent_positions = get_neighbors(piece.p, piece.q) adjacent_positions = get_neighbors(piece.p, piece.q)
random_position = choose_random_piece(adjacent_positions) random_position = self.random_piece(adjacent_positions)
piece_to_place = choose_random_piece(self.get_unplaced_pieces()) piece_to_place = self.random_piece(self.get_unplaced_pieces())
return ( return (
piece_to_place.get_piece_info(self.myIsUpper)[:1] piece_to_place.get_piece_info(self.myIsUpper)[:1]
+ [None, None, *random_position] + [None, None, *random_position]
if piece_to_place
else []
) )
elif self.myMove <= 4:
return self.placer()
else: else:
move_or_place = random.choice(["move", "place"]) move_or_place = random.choice(["move", "place"]) if self.can_place else "move"
if move_or_place == "move": if move_or_place == "place":
movable_pieces = [ return self.placer()
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]
else: else:
piece_to_place = choose_random_piece(self.get_unplaced_pieces()) 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)
)
return piece_to_place.get_piece_info(self.myIsUpper)[:1] + [
None,
None,
new_p,
new_q,
]
return [] return []