from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c, currency_range, ) doc = """ This is a standard 2-player trust game where the amount sent by player 1 gets tripled. The trust game was first proposed by Berg, Dickhaut, and McCabe (1995) . """ class Constants(BaseConstants): name_in_url = 'trust_shuffle' players_per_group = 2 num_rounds = 6 instructions_template = 'trust_shuffle/instructions.html' # Initial amount allocated to each player endowment = c(100) multiplier = 3 class Subsession(BaseSubsession): def setting_groups(self): self.group_randomly(fixed_id_in_group = True) class Group(BaseGroup): sent_amount1 = models.CurrencyField( min=0, max=Constants.endowment, doc="""最初に送られた金額""", initial = 100 ) sent_amount2 = models.CurrencyField( min=0, max=Constants.endowment, doc="""最初に送られた金額""", initial = 100 ) sent_back_amount1 = models.CurrencyField(doc="""次に送り返された金額""", min=c(0), initial = 0) sent_back_amount2 = models.CurrencyField(doc="""次に送り返された金額""", min=c(0), initial = 0) def sent_back_amount_max1(self): return self.sent_amount1 * Constants.multiplier def sent_back_amount_max2(self): return self.sent_amount2 * Constants.multiplier def set_payoffs1(self): if self.round_number ==1: p1 = self.get_player_by_id(1) p2 = self.get_player_by_id(2) p1.payoff1 = Constants.endowment - self.sent_amount1 + self.sent_back_amount1 p2.payoff1 = self.sent_amount1 * Constants.multiplier - self.sent_back_amount1 if self.round_number ==2: p1 = self.get_player_by_id(2) p2 = self.get_player_by_id(1) p1.payoff1 = Constants.endowment - self.sent_amount1 + self.sent_back_amount1 p2.payoff1 = self.sent_amount1 * Constants.multiplier - self.sent_back_amount1 if self.round_number ==3: p1 = self.get_player_by_id(1) p2 = self.get_player_by_id(2) p1.payoff1 = Constants.endowment - self.sent_amount1 + self.sent_back_amount1 p2.payoff1 = self.sent_amount1 * Constants.multiplier - self.sent_back_amount1 if self.round_number ==4: p1 = self.get_player_by_id(2) p2 = self.get_player_by_id(1) p1.payoff1 = Constants.endowment - self.sent_amount1 + self.sent_back_amount1 p2.payoff1 = self.sent_amount1 * Constants.multiplier - self.sent_back_amount1 if self.round_number ==5: p1 = self.get_player_by_id(1) p2 = self.get_player_by_id(2) p1.payoff1 = Constants.endowment - self.sent_amount1 + self.sent_back_amount1 p2.payoff1 = self.sent_amount1 * Constants.multiplier - self.sent_back_amount1 if self.round_number ==6: p1 = self.get_player_by_id(2) p2 = self.get_player_by_id(1) p1.payoff1 = Constants.endowment - self.sent_amount1 + self.sent_back_amount1 p2.payoff1 = self.sent_amount1 * Constants.multiplier - self.sent_back_amount1 def set_payoffs2(self): if self.round_number ==1: p1 = self.get_player_by_id(2) p2 = self.get_player_by_id(1) p1.payoff2 = Constants.endowment - self.sent_amount2 + self.sent_back_amount2 p2.payoff2 = self.sent_amount2 * Constants.multiplier - self.sent_back_amount2 if self.round_number ==2: p1 = self.get_player_by_id(1) p2 = self.get_player_by_id(2) p1.payoff2 = Constants.endowment - self.sent_amount2 + self.sent_back_amount2 p2.payoff2 = self.sent_amount2 * Constants.multiplier - self.sent_back_amount2 if self.round_number ==3: p1 = self.get_player_by_id(2) p2 = self.get_player_by_id(1) p1.payoff2 = Constants.endowment - self.sent_amount2 + self.sent_back_amount2 p2.payoff2 = self.sent_amount2 * Constants.multiplier - self.sent_back_amount2 if self.round_number ==4: p1 = self.get_player_by_id(1) p2 = self.get_player_by_id(2) p1.payoff2 = Constants.endowment - self.sent_amount2 + self.sent_back_amount2 p2.payoff2 = self.sent_amount2 * Constants.multiplier - self.sent_back_amount2 if self.round_number ==5: p1 = self.get_player_by_id(2) p2 = self.get_player_by_id(1) p1.payoff2 = Constants.endowment - self.sent_amount2 + self.sent_back_amount2 p2.payoff2 = self.sent_amount2 * Constants.multiplier - self.sent_back_amount2 if self.round_number ==6: p1 = self.get_player_by_id(1) p2 = self.get_player_by_id(2) p1.payoff2 = Constants.endowment - self.sent_amount2 + self.sent_back_amount2 p2.payoff2 = self.sent_amount2 * Constants.multiplier - self.sent_back_amount2 class Player(BasePlayer): payoff1 = models.CurrencyField() payoff2 = models.CurrencyField() to1_1 = models.BooleanField() to1_2 = models.BooleanField() to2_1 = models.BooleanField() to2_2 = models.BooleanField()