from otree.api import * doc = """ Your app description """ class C(BaseConstants): NAME_IN_URL = 'intimidation_game' PLAYERS_PER_GROUP = 2 NUM_ROUNDS = 10 STAKES=1 class Subsession(BaseSubsession): pass class Group(BaseGroup): def set_payoffs(self): challenger = self.get_player_by_role('挑戦者') king = self.get_player_by_role('王') if challenger.penny_side == '挑戦する' and king.penny_side2 == '抗戦する': challenger.payoff = C.STAKES-2 king.payoff = C.STAKES-2 challenger.is_winner = '1' king.is_winner = "2" challenger.place = '挑戦する' king.place = '抗戦する' elif challenger.penny_side == '挑戦する' and king.penny_side2 == '譲歩する': challenger.payoff = C.STAKES king.payoff = C.STAKES challenger.is_winner = '3' king.is_winner = '4' challenger.place = '挑戦する' king.place = '譲歩する' else: challenger.payoff = 0 king.payoff = 2 challenger.is_winner = '5' king.is_winner = '5' class Player(BasePlayer): penny_side = models.StringField( choices=[['挑戦する', '挑戦する'], ['挑戦しない', '挑戦しない']], widget=widgets.RadioSelect ) penny_side2 = models.StringField( choices=[['抗戦する', '抗戦する'], ['譲歩する', '譲歩する']], widget=widgets.RadioSelect ) is_winner = models.StringField() place = models.StringField() def role(self): if self.id_in_group == 1: return '挑戦者' if self.id_in_group == 2: return '王' # PAGES class MyPage1(Page): form_model = 'player' form_fields = ['penny_side'] def vars_for_template(player): return dict(player_in_previous_rounds=player.in_previous_rounds()) def is_displayed(self): return self.id_in_group == 1 class MyPage2(Page): form_model = 'player' form_fields = ['penny_side2'] def vars_for_template(player): return dict(player_in_previous_rounds=player.in_previous_rounds()) def is_displayed(self): return self.id_in_group == 2 class ResultsWaitPage(WaitPage): def after_all_players_arrive(self): self.group.set_payoffs() class Results(Page): def is_displayed(self): return self.round_number == C.NUM_ROUNDS and self.id_in_group == 1 def vars_for_template(player): player_in_all_rounds = player.in_all_rounds() return dict( total_payoff=sum([p.payoff for p in player_in_all_rounds]), player_in_all_rounds=player_in_all_rounds, ) class Results2(Page): def is_displayed(self): return self.round_number == C.NUM_ROUNDS and self.id_in_group == 2 def vars_for_template(player): player_in_all_rounds = player.in_all_rounds() return dict( total_payoff=sum([p.payoff for p in player_in_all_rounds]), player_in_all_rounds=player_in_all_rounds, ) page_sequence = [MyPage1, MyPage2, ResultsWaitPage, Results, Results2]