from otree.api import Currency as c, currency_range from ._builtin import Page, WaitPage from .models import Constants class Play(Page): def js_vars(self): return dict(my_symbol=self.player.symbol) def live_method(player, data: dict): group = player.group board = list(group.board_state) broadcast = {} if 'move' in data: move = data['move'] # you can't mark a square that was already marked if not board[move] == Constants.BLANK: return # you can't move out of turn if player.symbol != group.whose_turn: return group.whose_turn = player.get_others_in_group()[0].symbol board[move] = player.symbol group.board_state = ''.join(board) broadcast['board_state'] = board players = group.get_players() winning_symbol = get_winning_symbol(board) if winning_symbol: for p in players: p.is_winner = p.symbol == winning_symbol broadcast['winning_symbol'] = winning_symbol elif Constants.BLANK in board: broadcast['whose_turn'] = group.whose_turn else: broadcast['draw'] = True return {0: broadcast} page_sequence = [Play]