implemented auto-mode
This commit is contained in:
parent
90e9dcd6ff
commit
cfe686ca24
17
game.py
17
game.py
@ -1,4 +1,4 @@
|
||||
from random import randint
|
||||
from random import choice, randint
|
||||
|
||||
import project_constants as const
|
||||
|
||||
@ -112,8 +112,20 @@ class Game:
|
||||
def get_turn_number(self):
|
||||
return self.turn
|
||||
|
||||
# draws a random mine to disarm (in auto mode)
|
||||
def set_random_mine_as_target(self):
|
||||
self.goal = choice(self.minefield.get_active_mines()).position
|
||||
|
||||
# display new destination
|
||||
self.input_box_row.set_texts(user_input=str(self.goal[0]))
|
||||
self.input_box_column.set_texts(user_input=str(self.goal[1]))
|
||||
|
||||
# prevents highlighting input_box_row,
|
||||
# couldn't find any better solution w/o major Game class changes
|
||||
self.input_box_row.set_is_selected(False)
|
||||
|
||||
# gets action sequence for agent
|
||||
def get_action_sequence(self):
|
||||
def get_action_sequence(self, target_type: str = "tile"):
|
||||
return a_star.graphsearch(
|
||||
initial_state=a_star.State(
|
||||
row=self.agent.row,
|
||||
@ -121,6 +133,7 @@ class Game:
|
||||
direction=self.agent.direction
|
||||
),
|
||||
minefield=self.minefield,
|
||||
target_type=target_type,
|
||||
tox=self.goal[0],
|
||||
toy=self.goal[1]
|
||||
)
|
||||
|
19
main.py
19
main.py
@ -26,6 +26,7 @@ def main():
|
||||
# setting flags for program
|
||||
running = True
|
||||
in_menu = True
|
||||
auto = False
|
||||
is_game_over = False
|
||||
|
||||
# create and initialize_gui_components game instance
|
||||
@ -38,7 +39,7 @@ def main():
|
||||
# ==== MENU ==== #
|
||||
# ============== #
|
||||
|
||||
while running and in_menu:
|
||||
while running and in_menu and not auto:
|
||||
events = pygame.event.get()
|
||||
|
||||
# checking if game should stop running
|
||||
@ -59,12 +60,21 @@ def main():
|
||||
# if ok button is clicked then leave menu section
|
||||
in_menu = not game.button_ok.is_clicked(pygame.mouse.get_pos(), events)
|
||||
|
||||
# if auto button is clicked then leave menu and start auto-mode
|
||||
auto = game.button_auto.is_clicked(pygame.mouse.get_pos(), events)
|
||||
|
||||
# ========================== #
|
||||
# ==== BEFORE GAME LOOP ==== #
|
||||
# ========================== #
|
||||
|
||||
# getting action sequence for agent
|
||||
action_sequence = game.get_action_sequence()
|
||||
if auto:
|
||||
in_menu = False
|
||||
game.set_random_mine_as_target()
|
||||
action_sequence = game.get_action_sequence("mine")
|
||||
|
||||
else:
|
||||
action_sequence = game.get_action_sequence("tile")
|
||||
|
||||
# initializing game attributes before the game loop
|
||||
game.initialize_before_game_loop()
|
||||
@ -88,6 +98,11 @@ def main():
|
||||
# drawing minefield and agent instances
|
||||
game.draw_minefield()
|
||||
|
||||
# handling auto button (clicking quits auto-mode)
|
||||
if auto:
|
||||
game.button_auto.set_flags(is_active=True)
|
||||
auto = not game.button_auto.is_clicked(pygame.mouse.get_pos(), events)
|
||||
|
||||
# drawing inactive gui components so they don't "disappear"
|
||||
game.run_in_game_menu_overlay(pygame.mouse.get_pos(), events)
|
||||
game.set_is_active_flag_for_all_in_game_gui_components(False)
|
||||
|
@ -111,6 +111,10 @@ def graphsearch(initial_state: State,
|
||||
goal_test = mine_goal_test
|
||||
else:
|
||||
goal_test = tile_goal_test
|
||||
if minefield.matrix[GOAL[0]][GOAL[1]].mine is not None and minefield.matrix[GOAL[0]][GOAL[1]].mine.active:
|
||||
# TODO: cross-platform popup, move to separate function
|
||||
ctypes.windll.user32.MessageBoxW(0, "Brak rozwiązania", "GAME OVER", 1)
|
||||
return []
|
||||
|
||||
# fringe and explored initialization
|
||||
if fringe is None:
|
||||
|
Loading…
Reference in New Issue
Block a user