from otree.api import * doc = """ Your app description """ class C(BaseConstants): NAME_IN_URL = 'stage6' PLAYERS_PER_GROUP = None NUM_ROUNDS = 1 seconds = 120 class Subsession(BaseSubsession): pass class Group(BaseGroup): rand_num = models.IntegerField() def random_number(group:BaseGroup): from random import randint x = randint(1, 4) group.rand_num = x ps = group.get_players() for n in ps: n.exp_number = n.participant.vars.get('experiment_number') if n.participant.vars.get('avatar') == 1: n.ava_pic = "/static/imgs/ava1.png" if n.participant.vars.get('avatar') == 2: n.ava_pic = "/static/imgs/ava2.png" if n.participant.vars.get('avatar') == 3: n.ava_pic = "/static/imgs/ava3.png" if n.participant.vars.get('avatar') == 4: n.ava_pic = "/static/imgs/ava4.png" def par1and2_function(group:BaseGroup): p1 = group.get_player_by_id(1) p2 = group.get_player_by_id(2) p3 = group.get_player_by_id(3) p4 = group.get_player_by_id(4) p5 = group.get_player_by_id(5) p6 = group.get_player_by_id(6) p7 = group.get_player_by_id(7) p8 = group.get_player_by_id(8) p9 = group.get_player_by_id(9) p10 = group.get_player_by_id(10) p11 = group.get_player_by_id(11) p12 = group.get_player_by_id(12) for k in group.get_players(): if k.exp_number == 1: k.par1 = p5.ava_pic k.par2 = p7.ava_pic if k.exp_number == 2: k.par1 = p4.ava_pic k.par2 = p9.ava_pic if k.exp_number == 3: k.par1 = p6.ava_pic k.par2 = p8.ava_pic if k.exp_number == 4: k.par1 = p3.ava_pic k.par2 = p10.ava_pic if k.exp_number == 5: k.par1 = p2.ava_pic k.par2 = p12.ava_pic if k.exp_number == 6: k.par1 = p1.ava_pic k.par2 = p11.ava_pic if k.exp_number == 7: k.par1 = p2.ava_pic k.par2 = p11.ava_pic if k.exp_number == 8: k.par1 = p1.ava_pic k.par2 = p10.ava_pic if k.exp_number == 9: k.par1 = p3.ava_pic k.par2 = p12.ava_pic if k.exp_number == 10: k.par1 = p9.ava_pic k.par2 = p5.ava_pic if k.exp_number == 11: k.par1 = p8.ava_pic k.par2 = p4.ava_pic if k.exp_number == 12: k.par1 = p7.ava_pic k.par2 = p6.ava_pic def choices(group: BaseGroup): p1 = group.get_player_by_id(1) p2 = group.get_player_by_id(2) p3 = group.get_player_by_id(3) p4 = group.get_player_by_id(4) p5 = group.get_player_by_id(5) p6 = group.get_player_by_id(6) p7 = group.get_player_by_id(7) p8 = group.get_player_by_id(8) p9 = group.get_player_by_id(9) p10 = group.get_player_by_id(10) p11 = group.get_player_by_id(11) p12 = group.get_player_by_id(12) if group.rand_num == 1: p1.name = "X" p2.name = "X" p3.name = "X" p4.name = "Y" p5.name = "Y" p6.name = "Y" p7.name = "Z" p8.name = "Z" p9.name = "Z" p10.name = "P4" p11.name = "P4" p12.name = "P4" if p1.selection == 1: p1.win = 1 p1.channel = 1 p5.channel = 1 p5.picked_by = 1 p7.solo = 1 p10.solo = 1 p7.channel = 205 p10.channel = 220 p1.ava_coll = p5.ava_pic p5.ava_coll = p1.ava_pic if p1.selection == 2: p1.win = 1 p1.channel = 1 p5.channel = 50 p7.picked_by = 1 p5.solo = 1 p10.solo = 1 p7.channel = 1 p10.channel = 220 p1.ava_coll = p7.ava_pic p7.ava_coll = p1.ava_pic if p2.selection == 1: p2.win = 1 p2.channel = 3 p4.channel = 3 p4.picked_by = 1 p9.solo = 1 p11.solo = 1 p9.channel = 155 p11.channel = 156 p2.ava_coll = p4.ava_pic p4.ava_coll = p2.ava_pic if p2.selection == 2: p2.win = 1 p2.channel = 3 p4.channel = 154 p9.picked_by = 1 p4.solo = 1 p11.solo = 1 p9.channel = 3 p11.channel = 156 p2.ava_coll = p9.ava_pic p9.ava_coll = p2.ava_pic if p3.selection == 1: p3.win = 1 p3.channel = 5 p6.channel = 5 p6.picked_by = 1 p8.solo = 1 p12.solo = 1 p8.channel = 159 p12.channel = 160 p3.ava_coll = p6.ava_pic p6.ava_coll = p3.ava_pic if p3.selection == 2: p3.win = 1 p3.channel = 5 p6.channel = 159 p8.picked_by = 1 p6.solo = 1 p12.solo = 1 p8.channel = 5 p12.channel = 160 p3.ava_coll = p8.ava_pic p8.ava_coll = p3.ava_pic if group.rand_num == 2: p1.name = "Y" p2.name = "Y" p3.name = "Y" p4.name = "X" p5.name = "X" p6.name = "X" p7.name = "P4" p8.name = "P4" p9.name = "P4" p10.name = "Z" p11.name = "Z" p12.name = "Z" if p4.selection == 1: p4.win = 1 p4.channel = 1 p3.channel = 1 p10.channel = 170 p3.picked_by = 1 p10.solo = 1 p7.solo = 1 p7.channel = 171 p4.ava_coll = p3.ava_pic p3.ava_coll = p4.ava_pic if p4.selection == 2: p4.win = 1 p4.channel = 1 p3.channel = 170 p10.channel = 1 p10.picked_by = 1 p3.solo = 1 p7.solo = 1 p7.channel = 171 p4.ava_coll = p10.ava_pic p10.ava_coll = p4.ava_pic if p5.selection == 1: p5.win = 1 p5.channel = 3 p2.channel = 3 p2.picked_by = 1 p12.solo = 1 p8.solo = 1 p12.channel = 172 p8.channel = 173 p5.ava_coll = p2.ava_pic p2.ava_coll = p5.ava_pic if p5.selection == 2: p5.win = 1 p5.channel = 3 p2.channel = 172 p12.picked_by = 1 p2.solo = 1 p8.solo = 1 p12.channel = 3 p8.channel = 173 p5.ava_coll = p12.ava_pic p12.ava_coll = p5.ava_pic if p6.selection == 1: p6.win = 1 p6.channel = 5 p1.channel = 5 p1.picked_by = 1 p11.solo = 1 p9.solo = 1 p11.channel = 188 p9.channel = 189 p6.ava_coll = p1.ava_pic p1.ava_coll = p6.ava_pic if p6.selection == 2: p6.win = 1 p6.channel = 5 p1.channel = 188 p11.picked_by = 1 p1.solo = 1 p9.solo = 1 p11.channel = 5 p9.channel = 189 p6.ava_coll = p11.ava_pic p11.ava_coll = p6.ava_pic if group.rand_num == 3: p1.name = "Y" p2.name = "Y" p3.name = "Y" p4.name = "P4" p5.name = "P4" p6.name = "P4" p7.name = "X" p8.name = "X" p9.name = "X" p10.name = "Z" p11.name = "Z" p12.name = "Z" if p7.selection == 1: p7.win = 1 p7.channel = 1 p2.channel = 1 p11.channel = 28 p2.picked_by = 1 p11.solo = 1 p4.solo = 1 p4.channel = 29 p7.ava_coll = p2.ava_pic p2.ava_coll = p7.ava_pic if p7.selection == 2: p7.win = 1 p7.channel = 1 p2.channel = 28 p11.channel = 1 p11.picked_by = 1 p2.solo = 1 p4.solo = 1 p4.channel = 29 p7.ava_coll = p11.ava_pic p11.ava_coll = p7.ava_pic if p8.selection == 1: p8.win = 1 p8.channel = 3 p1.channel = 3 p1.picked_by = 1 p10.solo = 1 p5.solo = 1 p10.channel = 38 p5.channel = 39 p8.ava_coll = p1.ava_pic p1.ava_coll = p8.ava_pic if p8.selection == 2: p8.win = 1 p8.channel = 3 p1.channel = 38 p10.picked_by = 1 p1.solo = 1 p5.solo = 1 p10.channel = 3 p5.channel = 39 p8.ava_coll = p10.ava_pic p10.ava_coll = p8.ava_pic if p9.selection == 1: p9.win = 1 p9.channel = 5 p3.channel = 5 p3.picked_by = 1 p12.solo = 1 p6.solo = 1 p12.channel = 52 p6.channel = 53 p9.ava_coll = p3.ava_pic p3.ava_coll = p9.ava_pic if p9.selection == 2: p9.win = 1 p9.channel = 5 p3.channel = 52 p12.picked_by = 1 p3.solo = 1 p6.solo = 1 p12.channel = 5 p6.channel = 53 p9.ava_coll = p12.ava_pic p12.ava_coll = p9.ava_pic if group.rand_num == 4: p1.name = "P4" p2.name = "P4" p3.name = "P4" p4.name = "Z" p5.name = "Z" p6.name = "Z" p7.name = "Y" p8.name = "Y" p9.name = "Y" p10.name = "X" p11.name = "X" p12.name = "X" if p10.selection == 1: p10.win = 1 p10.channel = 1 p9.channel = 1 p5.channel = 93 p9.picked_by = 1 p5.solo = 1 p1.solo = 1 p1.channel = 94 p10.ava_coll = p9.ava_pic p9.ava_coll = p10.ava_pic if p10.selection == 2: p10.win = 1 p10.channel = 1 p9.channel = 93 p5.channel = 1 p5.picked_by = 1 p9.solo = 1 p1.solo = 1 p1.channel = 94 p10.ava_coll = p5.ava_pic p5.ava_coll = p10.ava_pic if p11.selection == 1: p11.win = 1 p11.channel = 3 p8.channel = 3 p8.picked_by = 1 p4.solo = 1 p2.solo = 1 p4.channel = 111 p2.channel = 112 p11.ava_coll = p8.ava_pic p8.ava_coll = p11.ava_pic if p11.selection == 2: p11.win = 1 p11.channel = 3 p8.channel = 111 p4.picked_by = 1 p8.solo = 1 p2.solo = 1 p4.channel = 3 p2.channel = 112 p11.ava_coll = p4.ava_pic p4.ava_coll = p11.ava_pic if p12.selection == 1: p12.win = 1 p12.channel = 5 p7.channel = 5 p7.picked_by = 1 p6.solo = 1 p3.solo = 1 p6.channel = 28 p3.channel = 29 p12.ava_coll = p7.ava_pic p7.ava_coll = p12.ava_pic if p12.selection == 2: p12.win = 1 p12.channel = 5 p7.channel = 28 p6.picked_by = 1 p7.solo = 1 p3.solo = 1 p6.channel = 5 p3.channel = 29 p12.ava_coll = p6.ava_pic p6.ava_coll = p12.ava_pic class Player(BasePlayer): ava_pic = models.StringField() exp_number = models.IntegerField() selection = models.IntegerField(widget=widgets.RadioSelectHorizontal, choices=[(1,"Participant 1"),(2, "Participant 2")]) win = models.IntegerField(initial=0) channel = models.IntegerField(initial=100) picked_by = models.IntegerField(initial=0) solo = models.IntegerField(initial=0) ava_coll = models.StringField(initial="none") par1 = models.StringField() par2 = models.StringField() name = models.StringField() # PAGES class WaitPageShuffle3(WaitPage): wait_for_all_groups = True @staticmethod def after_all_players_arrive(subsession): new_gr = subsession.session.vars.get('new_groups2') subsession.set_group_matrix(new_gr) class RandomNumberWaitPage(WaitPage): def after_all_players_arrive(group: Group): group.random_number() class HelpPage2(WaitPage): def after_all_players_arrive(group: Group): group.par1and2_function() class Selection(Page): form_model = 'player' form_fields = ['selection'] def vars_for_template(player: Player): return dict( ava_pic=player.ava_pic, par1=player.par1, par2=player.par2 ) class ChatPage(Page): def vars_for_template(player: Player): return dict( channel=player.channel, ava_pic=player.ava_pic, win=player.win, ava_coll=player.ava_coll, picked_by=player.picked_by, solo=player.solo, name=player.name ) timeout_seconds = C.seconds class ResultsWaitPage(WaitPage): def after_all_players_arrive(group: Group): group.choices() class Results(Page): pass class Stage6Inf(Page): def vars_for_template(player: Player): return dict( ava_pic=player.ava_pic, par1=player.par1, par2=player.par2 ) page_sequence = [WaitPageShuffle3, RandomNumberWaitPage, HelpPage2, Stage6Inf, Selection, ResultsWaitPage, ChatPage]