from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c, currency_range ) import random doc = """ ステージ2 """ class Constants(BaseConstants): name_in_url = 'S2_UG1' players_per_group = 2 num_rounds = 1 instructions_template = 'S2_UG1/Instructions.html' endowment = c(1200) payoff_if_rejected = c(0) offer_increment = c(100) offer_choices = currency_range(0, endowment, offer_increment) offer_choices_count = len(offer_choices) keep_give_amounts = [] for offer in offer_choices: keep_give_amounts.append((offer, endowment - offer)) class Subsession(BaseSubsession): pass def make_field(amount): return models.BooleanField( widget=widgets.RadioSelectHorizontal, label='あなたは「プレイヤーBに{}を渡す」という提案を受け入れますか?'.format(c(amount))) class Group(BaseGroup): amount_offered = models.CurrencyField(choices=Constants.offer_choices) offer_accepted = models.BooleanField( doc="if offered amount is accepted") response_0 = make_field(0) response_100 = make_field(100) response_200 = make_field(200) response_300 = make_field(300) response_400 = make_field(400) response_500 = make_field(500) response_600 = make_field(600) response_700 = make_field(700) response_800 = make_field(800) response_900 = make_field(900) response_1000 = make_field(1000) response_1100 = make_field(1100) response_1200 = make_field(1200) def set_payoffs(self): p1 = self.get_player_by_role('player_A') p2 = self.get_player_by_role('player_B') self.offer_accepted = getattr(self, 'response_{}'.format( int(self.amount_offered))) if self.offer_accepted: p1.payoff = Constants.endowment - self.amount_offered p2.payoff = self.amount_offered else: p1.payoff = Constants.payoff_if_rejected p2.payoff = Constants.payoff_if_rejected class Player(BasePlayer): def role(self): if self.id_in_group == 1: return 'player_A' else: return 'player_B'