from otree.api import * c = cu doc = 'z instrukcjami, 10 par obrazków z timeoutem + 1 próbny, podział 3-3-3, dają 0-6, nie trzeba 12' class Constants(BaseConstants): name_in_url = 'Kw_6free3_3_3' players_per_group = None num_rounds = 1 podzial = 2 showupfee = 20 przelicznik = 7 factor = 3 num_players = 3 class Subsession(BaseSubsession): pass def przydziel(group): for p in group.get_players(): p.Kscore_calculate() p.participant.vars['Zarobki1']= Constants.showupfee for p in group.get_players(): p.Rank_calculate() for p in group.get_players(): if p.Rank > 2: p.participant.vars['Kategoria'] = 3 else: if p.Rank > 1: p.participant.vars['Kategoria'] = 2 else: p.participant.vars['Kategoria'] = 1 def bonusy(group): for p in group.get_players(): p.Zadanie1_calculate() for p in group.get_players(): p.Zadanie2_calculate() group.Poprawne1= sum([p.Zadanie1 for p in group.get_players()]) group.Poprawne2= sum([p.Zadanie2 for p in group.get_players()]) group.Proporcja1= group.Poprawne1/Constants.podzial group.Proporcja2= group.Poprawne2/(Constants.num_players-Constants.podzial) for p in group.get_players(): if p.participant.vars['Kategoria']==1: p.participant.vars['Bonus2']=0 p.participant.vars['Bonus1']=0 if group.Proporcja1 >= group.Proporcja2: p.participant.vars['Bonus2']=7 if group.Proporcja1 > 0.5: p.participant.vars['Bonus1']=7 else: p.participant.vars['Bonus2']=0 p.participant.vars['Bonus1']=0 if group.Proporcja2 >= group.Proporcja1: p.participant.vars['Bonus2']=7 if group.Proporcja2 > 0.5: p.participant.vars['Bonus1']=7 class Group(BaseGroup): Proporcja1 = models.FloatField() Proporcja2 = models.FloatField() Poprawne1 = models.IntegerField() Poprawne2 = models.IntegerField() przydziel = przydziel bonusy = bonusy def Kscore_calculate(player): import random player.Kscore=player.pref1+player.pref2+player.pref3+player.pref4+player.pref5+player.pref6+player.pref7+player.pref8+player.pref9+player.pref10+random.random() def Zadanie1_calculate(player): participant = player.participant if participant.vars['Kategoria']==1: player.Zadanie1=player.pref7 else: player.Zadanie1=0 def Zadanie2_calculate(player): participant = player.participant if participant.vars['Kategoria']==2: player.Zadanie2=player.pref7 else: player.Zadanie2=0 def Rank_calculate(player): group = player.group player.Rank = sum (1 for p in player.get_others_in_group() if player.Kscore > p.Kscore) + 1 class Player(BasePlayer): pref1 = models.IntegerField(choices=[[0, 'jasnej'], [1, 'ciemnej']], widget=widgets.RadioSelectHorizontal) pref2 = models.IntegerField(choices=[[1, 'jasnej'], [0, 'ciemnej']], widget=widgets.RadioSelectHorizontal) pref3 = models.IntegerField(choices=[[0, 'jasnej'], [1, 'ciemnej']], widget=widgets.RadioSelectHorizontal) Kscore = models.FloatField() Rank = models.IntegerField() Zadanie1 = models.IntegerField() Zadanie2 = models.IntegerField() pref7 = models.IntegerField(choices=[[0, 'jasnej'], [1, 'ciemnej']], widget=widgets.RadioSelectHorizontal) pref4 = models.IntegerField(choices=[[0, 'jasnej'], [1, 'ciemnej']], widget=widgets.RadioSelectHorizontal) pref5 = models.IntegerField(choices=[[1, 'jasnej'], [0, 'ciemnej']], widget=widgets.RadioSelectHorizontal) pref6 = models.IntegerField(choices=[[0, 'jasnej'], [1, 'ciemnej']], widget=widgets.RadioSelectHorizontal) pref0 = models.IntegerField(choices=[[0, 'jasnej'], [1, 'ciemnej']], widget=widgets.RadioSelectHorizontal) pref8 = models.IntegerField(choices=[[1, 'jasnej'], [0, 'ciemnej']], widget=widgets.RadioSelectHorizontal) pref9 = models.IntegerField(choices=[[1, 'jasnej'], [0, 'ciemnej']], widget=widgets.RadioSelectHorizontal) pref10 = models.IntegerField(choices=[[1, 'jasnej'], [0, 'ciemnej']], widget=widgets.RadioSelectHorizontal) pref11 = models.IntegerField(choices=[[0, 'jasnej'], [1, 'ciemnej']], widget=widgets.RadioSelectHorizontal) pref12 = models.IntegerField(choices=[[0, 'jasnej'], [1, 'ciemnej']], widget=widgets.RadioSelectHorizontal) pref13 = models.IntegerField(choices=[[1, 'jasnej'], [0, 'ciemnej']], widget=widgets.RadioSelectHorizontal) pref14 = models.IntegerField(choices=[[0, 'jasnej'], [1, 'ciemnej']], widget=widgets.RadioSelectHorizontal) pref15 = models.IntegerField(choices=[[0, 'jasnej'], [1, 'ciemnej']], widget=widgets.RadioSelectHorizontal) pref16 = models.IntegerField(choices=[[1, 'jasnej'], [0, 'ciemnej']], widget=widgets.RadioSelectHorizontal) pref17 = models.IntegerField(choices=[[1, 'jasnej'], [0, 'ciemnej']], widget=widgets.RadioSelectHorizontal) pref18 = models.IntegerField(choices=[[0, 'jasnej'], [1, 'ciemnej']], widget=widgets.RadioSelectHorizontal) pref19 = models.IntegerField(choices=[[1, 'jasnej'], [0, 'ciemnej']], widget=widgets.RadioSelectHorizontal) pref20 = models.IntegerField(choices=[[1, 'jasnej'], [0, 'ciemnej']], widget=widgets.RadioSelectHorizontal) Kscore_calculate = Kscore_calculate Zadanie1_calculate = Zadanie1_calculate Zadanie2_calculate = Zadanie2_calculate Rank_calculate = Rank_calculate class Poczekalnia(WaitPage): body_text = 'Proszę czekać na pozostałych uczestników.' class Instrukcje1(Page): form_model = 'player' @staticmethod def vars_for_template(player): return dict( podzial2= Constants.num_players - Constants.podzial, ) class Instrukcje2(Page): form_model = 'player' class Odp0(Page): form_model = 'player' form_fields = ['pref0'] timeout_seconds = 10 class Poprobie(Page): form_model = 'player' class Obrazki1(Page): form_model = 'player' form_fields = ['pref1'] timeout_seconds = 10 class Obrazki2(Page): form_model = 'player' form_fields = ['pref2'] timeout_seconds = 10 class Obrazki3(Page): form_model = 'player' form_fields = ['pref3'] timeout_seconds = 10 class Obrazki4(Page): form_model = 'player' form_fields = ['pref4'] timeout_seconds = 10 class Obrazki5(Page): form_model = 'player' form_fields = ['pref5'] timeout_seconds = 10 class Obrazki6(Page): form_model = 'player' form_fields = ['pref6'] timeout_seconds = 10 class Obrazki7(Page): form_model = 'player' form_fields = ['pref7'] timeout_seconds = 10 class Obrazki8(Page): form_model = 'player' form_fields = ['pref8'] timeout_seconds = 10 class Obrazki9(Page): form_model = 'player' form_fields = ['pref9'] timeout_seconds = 10 class Obrazki10(Page): form_model = 'player' form_fields = ['pref10'] timeout_seconds = 10 class PrzydzialWait(WaitPage): after_all_players_arrive = przydziel body_text = 'Proszę czekać na pozostałych uczestników.' class Po_ankiecie_1(Page): form_model = 'player' page_sequence = [Poczekalnia, Instrukcje1, Instrukcje2, Odp0, Poprobie, Obrazki1, Obrazki2, Obrazki3, Obrazki4, Obrazki5, Obrazki6, Obrazki7, Obrazki8, Obrazki9, Obrazki10, PrzydzialWait, Po_ankiecie_1]