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)
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()
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
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)
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")
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()
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()