from otree.api import * c = cu doc = '' class C(BaseConstants): NAME_IN_URL = 'blank_app2' PLAYERS_PER_GROUP = 2 NUM_ROUNDS = 9 class Subsession(BaseSubsession): pass def my_function(subsession: Subsession): session = subsession.session import itertools treatments = itertools.cycle([True, False]) for group in subsession.get_groups(): group.treatment = next(treatments) class Group(BaseGroup): num_players = models.IntegerField(initial=C.PLAYERS_PER_GROUP) treatment = models.BooleanField(initial=True) def set_payoffs(group: Group): p1 = group.get_player_by_id(1) p2 = group.get_player_by_id(2) for p in [p1, p2]: if group.treatment == False: if p1.strategy == p2.strategy: if p.round_number==1: if p1.strategy==0 and p2.strategy==0: p1.payoff=cu(4) p2.payoff=cu(5) else: p1.payoff=cu(5) p2.payoff=cu(4) elif p.round_number==2: if p1.strategy==0 and p2.strategy==0: p1.payoff=cu(2) p2.payoff=cu(7) else: p1.payoff=cu(7) p2.payoff=cu(2) elif p.round_number==3: if p1.strategy==0 and p2.strategy==0: p1.payoff=cu(4) p2.payoff=cu(5) else: p1.payoff=cu(5) p2.payoff=cu(4) elif p.round_number==4: if p1.strategy==0 and p2.strategy==0: p1.payoff=cu(2) p2.payoff=cu(7) else: p1.payoff=cu(7) p2.payoff=cu(2) elif p.round_number==9: p1.payoff=cu(3) p2.payoff=cu(3) elif p.round_number==5: p1.payoff=cu(4) p2.payoff=cu(4) elif p.round_number==7: if p1.strategy==0 and p2.strategy==0: p1.payoff=cu(3) p2.payoff=cu(4) else: p1.payoff=cu(4) p2.payoff=cu(3) elif p.round_number==8: if p1.strategy==0 and p2.strategy==0: p1.payoff=cu(1) p2.payoff=cu(6) else: p1.payoff=cu(6) p2.payoff=cu(1) else: p1.payoff=cu(4) p2.payoff=cu(4) else: if p.round_number==9 or p.round_number==7 or p.round_number==8: p1.payoff=cu(-1) p2.payoff=cu(-1) else: p1.payoff=cu(0) p2.payoff=cu(0) else: if p1.strategy == p2.strategy: if p.round_number==4: if p1.strategy==0 and p2.strategy==0: p1.payoff=cu(4) p2.payoff=cu(5) else: p1.payoff=cu(5) p2.payoff=cu(4) elif p.round_number==5: if p1.strategy==0 and p2.strategy==0: p1.payoff=cu(2) p2.payoff=cu(7) else: p1.payoff=cu(7) p2.payoff=cu(2) elif p.round_number==6: if p1.strategy==0 and p2.strategy==0: p1.payoff=cu(4) p2.payoff=cu(5) else: p1.payoff=cu(5) p2.payoff=cu(4) elif p.round_number==7: if p1.strategy==0 and p2.strategy==0: p1.payoff=cu(2) p2.payoff=cu(7) else: p1.payoff=cu(7) p2.payoff=cu(2) elif p.round_number==3: p1.payoff=cu(3) p2.payoff=cu(3) elif p.round_number==8: p1.payoff=cu(4) p2.payoff=cu(4) elif p.round_number==1: if p1.strategy==0 and p2.strategy==0: p1.payoff=cu(3) p2.payoff=cu(4) else: p1.payoff=cu(4) p2.payoff=cu(3) elif p.round_number==2: if p1.strategy==0 and p2.strategy==0: p1.payoff=cu(1) p2.payoff=cu(6) else: p1.payoff=cu(6) p2.payoff=cu(1) else: p1.payoff=cu(4) p2.payoff=cu(4) else: if p.round_number==3 or p.round_number==1 or p.round_number==2: p1.payoff=cu(-1) p2.payoff=cu(-1) else: p1.payoff=cu(0) p2.payoff=cu(0) class Player(BasePlayer): strategy = models.IntegerField(choices=[[0, ' Левый'], [-1, 'Правый'], [1, 'Нижний']], label='Выберите один сектор круга:') class MyWaitPage2(WaitPage): wait_for_all_groups = True after_all_players_arrive = my_function class Game_2(Page): form_model = 'player' form_fields = ['strategy'] timeout_seconds = 60 class MyWaitPage(WaitPage): after_all_players_arrive = set_payoffs page_sequence = [MyWaitPage2, Game_2, MyWaitPage]