def make_movement(self, col: int, name=None): """ Allows to make a movement without a mouse click. Inserts a new piece in the specified column and prints the new board. """ assert(col is not None) if self.game_data.game_board.is_valid_location(col): row: int = self.game_data.game_board.get_next_open_row(col) self.game_data.last_move_row.append(row) self.game_data.last_move_col.append(col) self.game_data.game_board.drop_piece(row, col, self.game_data.turn + 1) self.draw() bus.emit( "piece:drop", PieceDropEvent(self.game_data.game_board.board[row][col]) ) self.print_board() if self.game_data.game_board.winning_move(self.game_data.turn + 1, row, col): print("Game over:", name) bus.emit( "game:over", self.renderer, GameOver(False, self.game_data.turn + 1, name) ) self.game_data.game_over = True pygame.display.update() self.game_data.turn += 1 self.game_data.turn = self.game_data.turn % 2
def update(self): """ Checks the game state, dispatching events as needed. """ if self.game_data.game_board.tie_move(): bus.emit("game:over", GameOver(was_tie=True)) self.game_data.game_over = True
def update(self): """ Checks the game state, dispatching events as needed. """ if self.game_data.game_board.tie_move(): bus.emit("game:over", self.renderer, GameOver(was_tie=True)) self.game_data.game_over = True if self.game_data.game_over: print(os.getpid()) pygame.time.wait(1000)
def update(self): """ Checks the game state, dispatching events as needed. """ if self.game_data.game_board.tie_move(): bus.emit("game:over", GameOver(was_tie=True)) self.game_data.game_over = True if self.game_data.game_over: print(os.getpid()) pygame.time.wait(3000) os.system("kill " + str(os.getpid())) os.system("./restart.sh")
def startgame(): data = GameData() screen = pygame.display.set_mode(data.size) game = ConnectGame(data, GameRenderer(screen, data)) game.print_board() game.draw() pygame.display.update() pygame.time.wait(1000) # Processes mouse and keyboard events, dispatching events to the event bus. # The events are handled by the ConnectGame and GameRenderer classes. while not game.game_data.game_over: for event in pygame.event.get(): if event.type == pygame.QUIT: game.quit() if event.type == pygame.MOUSEMOTION: bus.emit("mouse:hover", game.renderer, MouseHoverEvent(event.pos[0])) pygame.display.update() if event.type == pygame.MOUSEBUTTONDOWN: bus.emit("mouse:click", game, MouseClickEvent(event.pos[0])) if event.type == KEYDOWN: if event.key == pygame.K_z: mods: int = pygame.key.get_mods() if mods & pygame.KMOD_CTRL: bus.emit("game:undo", game) game.update() game.draw()
def mouse_click(self, event: MouseClickEvent): """ Handles a mouse click event. :param event: Data about the mouse click """ pygame.draw.rect( self.renderer.screen, black, (0, 0, self.game_data.width, self.game_data.sq_size), ) col: int = int(math.floor(event.posx / self.game_data.sq_size)) if self.game_data.game_board.is_valid_location(col): row: int = self.game_data.game_board.get_next_open_row(col) self.game_data.last_move_row.append(row) self.game_data.last_move_col.append(col) self.game_data.game_board.drop_piece(row, col, self.game_data.turn + 1) self.draw() bus.emit("piece:drop", PieceDropEvent(self.game_data.game_board.board[row][col])) self.print_board() if self.game_data.game_board.winning_move(self.game_data.turn + 1): bus.emit("game:over", self.renderer, GameOver(False, self.game_data.turn + 1)) self.game_data.game_over = True pygame.display.update() self.game_data.turn += 1 self.game_data.turn = self.game_data.turn % 2
def start(): print("+++++++++++++++ start +++++++++++++++++++++++") #NOTE: None means Human player p1 = None # red p2 = None # yellow if args.player1 != HUMAN: # print ("p1 is NOT human") p1 = getAgent(args.player1) if args.player2 != HUMAN: # print ("p2 is NOT human") p2 = getAgent(args.player2) data = GameData() screen = pygame.display.set_mode(data.size) game = ConnectGame(data, GameRenderer(screen, data)) game.print_board() game.draw() pygame.display.update() pygame.time.wait(1000) #NOTE: data.turn of 0 == player 1 # data.turn of 1 == player 2 # Processes mouse and keyboard events, dispatching events to the event bus. # The events are handled by the ConnectGame and GameRenderer classes. p_is_human, p = getPlayer(p1, p2, data) #TODO - better way to clean screen? bus.emit("mouse:hover", game.renderer, MouseHoverEvent(-50)) while not game.game_data.game_over: pygame.time.wait(10) if p_is_human: for event in pygame.event.get(): if event.type == pygame.QUIT: game.quit() if event.type == pygame.MOUSEMOTION: bus.emit("mouse:hover", game.renderer, MouseHoverEvent(event.pos[0])) pygame.display.update() if event.type == pygame.MOUSEBUTTONDOWN: # print("HUMAN: Mouse:",PLAYER(data.turn),p_is_human,p) bus.emit("mouse:click", game, MouseClickEvent(event.pos[0])) p_is_human, p = getPlayer(p1, p2, data) # if event.type == KEYDOWN: # if event.key == pygame.K_z: # mods: int = pygame.key.get_mods() # if mods & pygame.KMOD_CTRL: # bus.emit("game:undo", game) else: #AI print("AI:", PLAYER(data.turn), p.get_name()) game.make_movement(p.get_move(data), p.get_name()) p_is_human, p = getPlayer(p1, p2, data) #keep pygame happy - otherwise freezes for event in pygame.event.get(): pass game.update() game.draw() print("--------------------- GAME OVER ----------------------------") pygame.display.update()
game.print_board() game.draw() pygame.display.update() pygame.time.wait(1000) # Processes mouse and keyboard events, dispatching events to the event bus. # The events are handled by the ConnectGame and GameRenderer classes. while not game.game_data.game_over: for event in pygame.event.get(): if event.type == pygame.QUIT: game.quit() if event.type == pygame.MOUSEMOTION: bus.emit("mouse:hover", game.renderer, MouseHoverEvent(event.pos[0])) pygame.display.update() if event.type == pygame.MOUSEBUTTONDOWN: bus.emit("mouse:click", game, MouseClickEvent(event.pos[0])) if event.type == KEYDOWN: if event.key == pygame.K_z: mods: int = pygame.key.get_mods() if mods & pygame.KMOD_CTRL: bus.emit("game:undo", game) game.update() game.draw()