Beispiel #1
0
    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
Beispiel #3
0
    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)
Beispiel #4
0
    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")
Beispiel #5
0
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()
Beispiel #6
0
    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
Beispiel #7
0
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()
Beispiel #8
0
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()