from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c, currency_range ) import random author = 'Vartanov' doc = """ Кружки и прочее """ class Constants(BaseConstants): name_in_url = 'mugs_persuasion' players_per_group = None num_rounds = 13 class Subsession(BaseSubsession): berries_price = models.IntegerField() russia_price = models.IntegerField() flowers_price = models.IntegerField() def creating_session(self): playrs = self.get_players() if self.round_number == 1: paying_round = random.randint(1, Constants.num_rounds) self.session.vars['paying_round'] = paying_round if self.round_number == 1 or self.round_number == 7: self.berries_price = 80 self.russia_price = 70 self.flowers_price = 60 elif self.round_number == 2 or self.round_number == 8: self.berries_price = 70 self.russia_price = 60 self.flowers_price = 80 elif self.round_number == 3 or self.round_number == 9: self.berries_price = 60 self.russia_price = 80 self.flowers_price = 70 elif self.round_number == 4 or self.round_number == 10: self.berries_price = 70 self.russia_price = 80 self.flowers_price = 60 elif self.round_number == 5 or self.round_number == 11: self.berries_price = 80 self.russia_price = 60 self.flowers_price = 70 elif self.round_number == 6 or self.round_number == 12: self.berries_price = 60 self.russia_price = 70 self.flowers_price = 80 else: self.berries_price = 0 self.russia_price = 0 self.flowers_price = 0 for p in playrs: p.deposit = random.randint(100,300) p.flowers_ad = bool(random.getrandbits(1)) p.russia_ad = bool(random.getrandbits(1)) if not p.flowers_ad and not p.russia_ad: p.berries_ad = True else: p.berries_ad = bool(random.getrandbits(1)) class Group(BaseGroup): def set_payoffs(self): playrs = self.get_players() for p in playrs: p.pay_round = False p.berries_price = self.subsession.berries_price p.russia_price = self.subsession.russia_price p.flowers_price = self.subsession.flowers_price p.berries_costs = p.berries_quant*p.berries_price p.russia_costs = p.russia_quant * p.russia_price p.flowers_costs = p.flowers_quant * p.flowers_price p.costs = p.berries_costs + p.russia_costs + p.flowers_costs p.remains = p.deposit - p.costs p.to_pay = p.remains / 2 p.price_list = "{}₽ за чашку с цветочками, {}₽ за чашку с флагом и {}₽ за чашку с ягодами".format(p.flowers_price,p.russia_price,p.berries_price) p.choice_string = "C цветочками: {}, с флагом: {} и с ягодами: {}".format( p.flowers_quant, p.russia_quant, p.berries_quant) p.choice_string = models.CharField() if self.round_number == self.session.vars['paying_round']: p.total_payoff = p.to_pay p.pay_round = True class Player(BasePlayer): my_berries_price = models.IntegerField( verbose_name='Цена за кружку с ягодами') my_russia_price = models.IntegerField( verbose_name='Цена за кружку с флагом России') my_flowers_price = models.IntegerField( verbose_name='Цена за кружку с цветами') deposit = models.IntegerField() student_group = models.CharField( choices=['401', '402', '403', '404'], verbose_name='Номер группы') berries_quant = models.IntegerField( verbose_name='Количество кружек с ягодами', min = 0, max = 6) russia_quant = models.IntegerField( verbose_name='Количество кружек с флагом России', min = 0, max = 6) flowers_quant = models.IntegerField( verbose_name='Количество кружек с цветами', min = 0, max = 6) berries_price = models.IntegerField() russia_price = models.IntegerField() flowers_price = models.IntegerField() berries_ad = models.BooleanField() russia_ad = models.BooleanField() flowers_ad = models.BooleanField() costs = models.PositiveIntegerField() remains = models.PositiveIntegerField() to_pay = models.PositiveIntegerField() total_payoff = models.PositiveIntegerField() berries_costs = models.PositiveIntegerField() russia_costs = models.PositiveIntegerField() flowers_costs = models.PositiveIntegerField() price_list = models.CharField() choice_string = models.CharField() pay_round = models.BooleanField()