from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c, currency_range, ) import random author = 'Your name here' doc = """ Your app description """ class Constants(BaseConstants): name_in_url = 'open' players_per_group = 6 num_rounds = 6 Endowment = 1 class Subsession(BaseSubsession): Open=models.IntegerField() def creating_session(self): import random for p in self.get_players(): p.randscore = random.random() self.Open = self.session.config['open'] class Group(BaseGroup): expression_count = models.IntegerField() vaccine_count = models.IntegerField() def count_expression(self): players = self.get_players() # [P1, P2, P3, P4, P5, P6] count = 0 for p in players: if p.expression == 1: count += 1 self.expression_count = count def cal_ritoku(self): point = 100 players = self.get_players() self.vaccine_count = 0 fixed_fee = 20 for p in players: if p.decision == 1: self.vaccine_count += 1 after_vaccine_rate = 0.8 - (0.16 * self.vaccine_count) for p in players: if p.decision == 1: if 0.6 > p.randscore: p.ritoku = point - 40 - fixed_fee else: p.ritoku = point - fixed_fee else: if after_vaccine_rate > p.randscore: p.ritoku = point - 100 else: p.ritoku = point class Player(BasePlayer): ritoku = models.IntegerField() randscore = models.FloatField() decision = models.IntegerField( label='', choices=[[1, "打つ"], [0, "打たない"]], widget=widgets.RadioSelectHorizontal ) expression = models.IntegerField( label='', choices=[[1, "打つつもり"], [0, "打たないつもり"]], widget=widgets.RadioSelectHorizontal )