from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c, currency_range ) import random doc = """ ステージ3 """ class Constants(BaseConstants): name_in_url = 'S3_DG2' players_per_group = 4 num_rounds = 1 instructions_template = 'S3_DG2/Instructions.html' endowment = c(1200) total_endowment = c(2400) 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)) random_number = random.random() class Subsession(BaseSubsession): def creating_session(self): new_structure = [[1, 2, 7, 8], [3, 4, 9, 10], [5, 6, 11, 12], [13, 14, 19, 20], [15, 16, 21, 22], [17, 18, 23, 24], [25, 26, 31, 32], [27, 28, 33, 34], [29, 30, 35, 36], [37, 38, 45, 46], [39, 40, 47, 48], [41, 42, 49, 50], [43, 44, 51, 52]] self.set_group_matrix(new_structure) class Group(BaseGroup): def set_payoffs(self): p1 = self.get_player_by_role('player_A') p2 = self.get_player_by_role('player_B') p3 = self.get_player_by_role('player_C') p4 = self.get_player_by_role('player_D') if Constants.random_number >= 0.5: proposer_offer = p1.offer else: proposer_offer = p3.offer p1.payoff = Constants.endowment - proposer_offer p2.payoff = proposer_offer p3.payoff = Constants.endowment - proposer_offer p4.payoff = proposer_offer class Player(BasePlayer): ID_number = models.IntegerField() offer = models.CurrencyField(choices=Constants.offer_choices) def role(self): if self.id_in_group == 1: return 'player_A' elif self.id_in_group == 2: return 'player_B' elif self.id_in_group == 3: return 'player_C' else: return 'player_D'