from otree.api import * c = cu doc = 'z instrukcjami, wszystkie obrazki, podział 8-2, dają 0-6-12, w sumie 12' class Constants(BaseConstants): name_in_url = 'Obrazki_musi12_8_2' players_per_group = None num_rounds = 1 podzial = 8 showupfee = 20 przelicznik = 7 factor = 3 num_players = 10 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 > Constants.podzial: 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+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, 'po lewej'], [1, 'po prawej']], widget=widgets.RadioSelectHorizontal) pref2 = models.IntegerField(choices=[[0, 'po lewej'], [1, 'po prawej']], widget=widgets.RadioSelectHorizontal) pref3 = models.IntegerField(choices=[[0, 'po lewej'], [1, 'po prawej']], widget=widgets.RadioSelectHorizontal) Kscore = models.FloatField() Rank = models.IntegerField() Zadanie1 = models.IntegerField() Zadanie2 = models.IntegerField() pref7 = models.IntegerField(choices=[[0, 'po lewej'], [1, 'po prawej']], widget=widgets.RadioSelectHorizontal) pref4 = models.IntegerField(choices=[[0, 'po lewej'], [1, 'po prawej']], widget=widgets.RadioSelectHorizontal) pref5 = models.IntegerField(choices=[[0, 'po lewej'], [6, 'po prawej']], widget=widgets.RadioSelectHorizontal) pref6 = models.IntegerField(choices=[[0, 'po lewej'], [1, 'po prawej']], widget=widgets.RadioSelectHorizontal) Kscore_calculate = Kscore_calculate Zadanie1_calculate = Zadanie1_calculate Zadanie2_calculate = Zadanie2_calculate Rank_calculate = Rank_calculate class Powitanie(Page): form_model = 'player' class Poczekalnia(WaitPage): body_text = 'Proszę czekać na pozostałych uczestników.' class Consent(Page): form_model = 'player' 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 Obrazki1(Page): form_model = 'player' form_fields = ['pref1'] class Obrazki2(Page): form_model = 'player' form_fields = ['pref2'] class Obrazki3(Page): form_model = 'player' form_fields = ['pref3'] class Obrazki4(Page): form_model = 'player' form_fields = ['pref4'] class Obrazki5(Page): form_model = 'player' form_fields = ['pref5'] class Obrazki6(Page): form_model = 'player' form_fields = ['pref6'] 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' class Po_ankiecie_2(Page): form_model = 'player' @staticmethod def vars_for_template(player): return dict( podzial2= Constants.num_players - Constants.podzial, ) class Po_ankiecie_3(Page): form_model = 'player' @staticmethod def vars_for_template(player): return dict( podzial2= Constants.num_players - Constants.podzial, ) class Zadanie_instrukcje1(Page): form_model = 'player' class Zadanie_instrukcje2(Page): form_model = 'player' @staticmethod def vars_for_template(player): return dict( podzial2= Constants.num_players - Constants.podzial, ) class Zadanie(Page): form_model = 'player' form_fields = ['pref7'] class Bonusy_Wait(WaitPage): after_all_players_arrive = bonusy body_text = 'Proszę czekać na pozostałych uczestników.' class Instrukcje_do_etapu2_ekran1(Page): form_model = 'player' class Instrukcje_do_etapu2_ekran2(Page): form_model = 'player' @staticmethod def vars_for_template(player): return dict( factor6 = Constants.factor*6, factor12 = Constants.factor*12, ) class Instrukcje_do_etapu2_ekran3(Page): form_model = 'player' class Instrukcje_do_etapu2_ekran4(Page): form_model = 'player' page_sequence = [Powitanie, Poczekalnia, Consent, Instrukcje1, Instrukcje2, Obrazki1, Obrazki2, Obrazki3, Obrazki4, Obrazki5, Obrazki6, PrzydzialWait, Po_ankiecie_1, Po_ankiecie_2, Po_ankiecie_3, Zadanie_instrukcje1, Zadanie_instrukcje2, Zadanie, Bonusy_Wait, Instrukcje_do_etapu2_ekran1, Instrukcje_do_etapu2_ekran2, Instrukcje_do_etapu2_ekran3, Instrukcje_do_etapu2_ekran4]