from otree.api import * c = cu doc = '20 rund, 9 osób, dodatkowy ekran' class Constants(BaseConstants): name_in_url = 'wymiana_kw_ukryta' players_per_group = None num_rounds = 20 factor = 3 Initial = 12 przelicznik = 0.1 num_players = 9 class Subsession(BaseSubsession): pass def przypisania(group): session = group.session if group.round_number==1: session.vars['kategorie'] = [] session.vars['datki']=[0] * (Constants.num_players*Constants.num_players+1) for p in group.get_players(): p.ile4 = 0 p.ile5 = 0 # p.participant.vars['Kategoria'] = 1 p.participant.vars['Zarobki2']=0 p.participant.vars['Endowment']=Constants.Initial p.participant.vars['ile']=[0]*(Constants.num_players+1) p.participant.vars['odebrane']=[0]*(Constants.num_players+1) if p.participant.vars['Kategoria'] == 1: session.vars['kategorie'].append("niski poziom") else: if p.participant.vars['Kategoria'] == 2: session.vars['kategorie'].append("średni poziom") else: session.vars['kategorie'].append("wysoki poziom") if group.round_number>1: for p in group.get_players(): p.participant.vars['Endowment']= p.participant.vars['Endowment'] + Constants.Initial def Przekazywanie(group): for p in group.get_players(): p.Ile_lista() for p in group.get_players(): p.Datki() for p in group.get_players(): p.Odebrane() class Group(BaseGroup): przypisania = przypisania Przekazywanie = Przekazywanie def Datki(player): session = player.session group = player.group participant = player.participant for i in range(1,Constants.num_players+1): session.vars['datki'][Constants.num_players*(player.id_in_group-1)+i]=participant.vars['ile'][i] def Ile_lista(player): participant = player.participant participant.vars['ile'][1]=player.ile1 participant.vars['ile'][2]=player.ile2 participant.vars['ile'][3]=player.ile3 participant.vars['ile'][4]=player.ile4 participant.vars['ile'][5]=player.ile5 participant.vars['ile'][6]=player.ile6 participant.vars['ile'][7]=player.ile7 participant.vars['ile'][8]=player.ile8 participant.vars['ile'][9]=player.ile9 participant.vars['Given']=sum(participant.vars['ile']) def Odebrane(player): session = player.session group = player.group participant = player.participant for i in range(1,Constants.num_players+1): participant.vars['odebrane'][i] = session.vars['datki'][player.id_in_group+(i-1)*Constants.num_players] participant.vars['SumG']=sum(participant.vars['odebrane']) participant.vars['Profit']= -participant.vars['Given']+Constants.factor*participant.vars['SumG'] participant.vars['Endowment']=participant.vars['Endowment']+participant.vars['Profit'] participant.vars['Zarobki2']=round(participant.vars['Endowment']*Constants.przelicznik,0) class Player(BasePlayer): ile1 = models.IntegerField(blank=True, choices=[[0, '0'], [6, '6']], initial=0, widget=widgets.RadioSelectHorizontal) ile2 = models.IntegerField(blank=True, choices=[[0, '0'], [6, '6']], initial=0, label='Ile dajesz graczowi B?', widget=widgets.RadioSelectHorizontal) ile3 = models.IntegerField(blank=True, choices=[[0, '0'], [6, '6']], initial=0, label='Ile dajesz graczowi C?', widget=widgets.RadioSelectHorizontal) ile4 = models.IntegerField(blank=True, choices=[[0, '0'], [6, '6']], initial=0, widget=widgets.RadioSelectHorizontal) ile5 = models.IntegerField(blank=True, choices=[[0, '0'], [6, '6']], initial=0, widget=widgets.RadioSelectHorizontal) ile6 = models.IntegerField(blank=True, choices=[[0, '0'], [6, '6']], initial=0, widget=widgets.RadioSelectHorizontal) ile7 = models.IntegerField(blank=True, choices=[[0, '0'], [6, '6']], initial=0, widget=widgets.RadioSelectHorizontal) ile8 = models.IntegerField(blank=True, choices=[[0, '0'], [6, '6']], initial=0, widget=widgets.RadioSelectHorizontal) ile9 = models.IntegerField(blank=True, choices=[[0, '0'], [6, '6']], initial=0, widget=widgets.RadioSelectHorizontal) Datki = Datki Ile_lista = Ile_lista Odebrane = Odebrane class Przypisania(WaitPage): after_all_players_arrive = przypisania body_text = 'Proszę czekać na pozostałych uczestników.' class Tabela(Page): form_model = 'player' form_fields = ['ile1', 'ile2', 'ile3', 'ile4', 'ile5', 'ile6', 'ile7', 'ile8', 'ile9'] @staticmethod def error_message(player, values): group = player.group if player.id_in_group == 1: if values['ile2'] + values['ile3'] + values['ile4']+ values['ile5']+ values['ile6']+ values['ile7']+ values['ile8']+ values['ile9']> 12: return 'Możesz dać tylko 12' else: if player.id_in_group == 2: if values['ile1'] + values['ile3'] + values['ile4'] + values['ile5']+ values['ile6']+ values['ile7']+ values['ile8']+ values['ile9']> 12: return 'Możesz dać tylko 12' else: if player.id_in_group == 3: if values['ile1'] + values['ile2'] + values['ile4'] + values['ile5']+ values['ile6']+ values['ile7']+ values['ile8']+ values['ile9'] > 12: return 'Możesz dać tylko 12' else: if player.id_in_group == 4: if values['ile1'] + values['ile3'] + values['ile2'] + values['ile5']+ values['ile6']+ values['ile7']+ values['ile8']+ values['ile9']> 12: return 'Możesz dać tylko 12' else: if player.id_in_group == 5: if values['ile1'] + values['ile2'] + values['ile3'] + values['ile4']+ values['ile6']+ values['ile7']+ values['ile8']+ values['ile9']>12: return 'Możesz dać tylko 12' else: if player.id_in_group == 6: if values['ile1'] + values['ile2'] + values['ile3'] + values['ile4']+ values['ile5']+ values['ile7']+ values['ile8']+ values['ile9']>12: return 'Możesz dać tylko 12' else: if player.id_in_group == 7: if values['ile1'] + values['ile3'] + values['ile4'] + values['ile5']+ values['ile6']+ values['ile2']+ values['ile8']+ values['ile9']>12: return 'Możesz dać tylko 12' else: if player.id_in_group == 8: if values['ile1'] + values['ile3'] + values['ile4'] + values['ile5']+ values['ile6']+ values['ile7']+ values['ile2']+ values['ile9']>12: return 'Możesz dać tylko 12' else: if player.id_in_group == 9: if values['ile1'] + values['ile3'] + values['ile4'] + values['ile5']+ values['ile6']+ values['ile7']+ values['ile8']+ values['ile2']>12: return 'Możesz dać tylko 12' class Obliczenia(WaitPage): after_all_players_arrive = Przekazywanie body_text = 'Proszę czekać na pozostałych uczestników.' class Komu_dali(Page): form_model = 'player' class Podsumowanie_rundy(Page): form_model = 'player' class Koniec(Page): form_model = 'player' @staticmethod def is_displayed(player): return player.round_number == Constants.num_rounds page_sequence = [Przypisania, Tabela, Obliczenia, Komu_dali, Podsumowanie_rundy, Koniec]