Ejemplo n.º 1
0
    def create_game_widgets(self):
        pos_x = 0.2
        tp = Tab(size_hint=(0.8, 0.75), pos_hint={'x': pos_x, 'y': 0.25})
        th = TabbedPanelHeader(text='Game State')
        tp.add_widget(th)
        layout = FloatLayout()
        pos_x = 0.1
        game = GameHandler.get_game_instance()
        print(game.__dict__)
        for index, suit in enumerate(Suit):
            card_map = game.card_map[index]
            selected_cards = []
            if len(card_map) > 0:
                min_card = Card.from_str(card_map[0])
                max_card = Card.from_str(card_map[1])
                selected_cards = list(CardIterator(min_card, max_card))

            second = SuitWidget(suit,
                                selected_cards,
                                size_hint=(0.2, 1),
                                pos_hint={
                                    'x': pos_x,
                                    'y': 0.15
                                })
            pos_x += 0.2
            layout.add_widget(second)
        th.content = layout
        self.add_widget(tp)
        self.state_layout = layout
        game = GameHandler.get_game_instance()
        self.create_player_widget(game.me)
        background_color = get_color_from_hex(
            "#FFFFFF" if game.is_your_turn() else "#808080")
        disabled_color = get_color_from_hex("#FFFFFF")
        self.pass_button = pass_button = Button(
            text="PASS",
            pos_hint={
                'x': 0.4,
                'y': 0.05
            },
            size_hint=(0.25, 0.05),
            disabled=not game.is_your_turn(),
            background_disabled_normal='')
        pass_button.background_color = background_color
        pass_button.disabled_color = disabled_color
        pass_button.bind(on_press=self.pass_move)
        self.add_widget(pass_button, index=0)
        self.move_button = move_button = Button(
            text="Make Move",
            size_hint=(0.25, 0.05),
            pos_hint={
                'x': 0.4,
                'y': 0.15
            },
            disabled=not game.is_your_turn(),
            background_disabled_normal='')
        move_button.background_color = background_color
        move_button.disabled_color = disabled_color
        move_button.bind(on_press=self.on_click)
        self.add_widget(move_button, index=0)
Ejemplo n.º 2
0
 def update_game(self, dt):
     print(GameHandler.get_game_data())
     game = GameHandler.get_game_instance()
     if not game:
         return
     self.delete_all_widgets()
     if not game.is_ended:
         self.create_game_widgets()
 def on_message(self, ws, message):
     message = json.loads(message)
     print("message received on socket:", message)
     game_json = message["game"]
     game_json["me"] = message["me"]
     game_json["possible_moves"] = [Card.from_str(card) for card in message["possible_moves"] or []]
     self.update_shared_data("type", message["type"])
     self.update_shared_data("data", game_json)
     print(game_json)
     print(GameHandler.get_game_instance().__dict__)
     if message["type"] == "game_start" and not GameHandler.get_game_data().get("is_started", False):
         GameHandler.update_data("is_started", True)
         ws.close()
Ejemplo n.º 4
0
 def update_game_widgets(self):
     game = GameHandler.get_game_instance()
     self.create_player_widget(game.me)
     background_color = get_color_from_hex(
         "#FFFFFF" if game.is_your_turn() else "#808080")
     self.pass_button.disabled = game.is_your_turn()
     self.move_button.disabled = game.is_your_turn()
     self.pass_button.background_color = background_color
     self.move_button.background_color = background_color
Ejemplo n.º 5
0
 def __init__(self, **kwargs):
     super(RootWidget, self).__init__(**kwargs)
     socket_handler = SocketHandler()
     ws = websocket.WebSocketApp(
         "ws://127.0.0.1:8081/ws/game/patta/{}/".format(
             GameHandler.get_game_data()["name"]),
         on_message=lambda ws, msg: socket_handler.on_message(ws, msg),
         on_error=lambda ws, msg: socket_handler.on_error(ws, msg),
         on_close=lambda ws: socket_handler.on_close(ws))
     ws.on_open = lambda ws: socket_handler.on_open(ws)
     self.ws = ws
     p1 = multiprocessing.Process(target=ws.run_forever, args=())
     p1.start()
     Clock.schedule_interval(self.update_game, 5)
Ejemplo n.º 6
0
 def button_click(self, instance):
     game = GameHandler.get_game_instance()
     card = self.card
     if self.is_selected:
         print("invalid move")
         return
     if self.is_highlighted:
         self.is_highlighted = False
         return
     flag = game.is_valid_move(card)
     if flag:
         self.is_highlighted = True
         print("Current Player", game.current_player_index)
     else:
         print("invalid move")
Ejemplo n.º 7
0
    def make_move(self, card=None, pass_move=False):
        ws = self.ws
        game = GameHandler.get_game_instance()
        if pass_move:
            card = "pass"
        else:
            card = card.str
        ws.send(json.dumps({'message': card}))

        def my_callback(instance):
            print('Popup', instance, 'is being dismissed but is prevented!')
            ws.close()
            exit(1)

        if game.is_ended:
            popup = Popup(content=Label(
                text='Player {} wins'.format(game.current_player_index)))
            popup.bind(on_dismiss=my_callback)
            popup.open()
Ejemplo n.º 8
0
 def __init__(self, player: GamePlayer, **kwargs):
     super(GamePlayerWidget, self).__init__(**kwargs)
     self.player = player
     game = GameHandler.get_game_instance()
     possible_moves = game.get_possible_moves()
     print(possible_moves)
     pos_y = 0
     for i, card in enumerate(player.get_cards()):
         card_widget = CardWidget(card=card,
                                  is_selected=True,
                                  is_clickable=True,
                                  padding=[0, -100, 20, 0],
                                  size_hint=(1, 0.1),
                                  pos_hint={
                                      'x': 0,
                                      'y': pos_y
                                  })
         card_widget.bind(is_selected=self.on_is_selected)
         card_widget.bind(is_highlighted=self.on_is_highlighted)
         if card in possible_moves:
             card_widget.is_selected = False
         pos_y += 0.06
         self.add_widget(card_widget, index=i + 1)
 def update_shared_data(cls, key, data):
     GameHandler.update_data(key, data)
        print(error)

    def on_close(self, ws):
        print("### closed ###")

    def on_open(self, ws):
        WSHandler.set_ws(ws)
        print(WSHandler.get_ws())
        print("waiting for game to start")


if __name__ == "__main__":
    from main import PattebaazApp
    manager = Manager()
    d = manager.dict()
    game = GameHandler.set_game_data(d)
    websocket.enableTrace(True)
    name = sys.argv[1]
    GameHandler.update_data("name", name)
    socket_handler = SocketHandler()
    ws = websocket.WebSocketApp("ws://127.0.0.1:8081/ws/game/patta/{}/".format(name),
                                on_message=lambda ws, msg: socket_handler.on_message(ws, msg),
                                on_error=lambda ws, msg: socket_handler.on_error(ws, msg),
                                on_close=lambda ws: socket_handler.on_close(ws))
    ws.on_open = lambda ws:socket_handler.on_open(ws)

    p1 = multiprocessing.Process(target=ws.run_forever, args=())
    p1.start()
    p1.join()
    app = PattebaazApp()
    app.run()