from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c, currency_range, ) author = 'Your name here' doc = """ Your app description """ class Constants(BaseConstants): name_in_url = 'ultimatum_trial' players_per_group = 2 # 2人プレイヤー num_rounds = 6 # 1shotゲーム endowment = c(10) # 提案者の初期保有額は10ポイント A_List=(1,2,1,2,1,2,) B_List=(2,1,2,1,2,1,) class Subsession(BaseSubsession): def creating_session(self): self.group_randomly(fixed_id_in_group=True) class Group(BaseGroup): # プレイヤーの選択を定義する. ## プレイヤー1の選択は提案額を決める. proposal = models.CurrencyField( choices=currency_range(c(0), c(Constants.endowment), c(1)), label="あなたはいくら相手に渡しますか?", ) ## プレイヤー2の選択は提案額を受け入れるかどうか. accepted_or_not = models.BooleanField( # BooleanFieldにすることでTRUE/FALSEの選択 choices = [ [True,"はい"], [False,"いいえ"], ], widget = widgets.RadioSelectHorizontal ) proposer_point = models.CurrencyField() # プレイヤー1の利得 accepter_point = models.CurrencyField() # プレイヤー2の利得 # 計算を実行する def compute(self): if self.accepted_or_not==True: # プレイヤー1が受け入れた場合 self.proposer_point = Constants.endowment - self.proposal #プレイヤー1の初期保有額-プレイヤー2への提案額 self.accepter_point = self.proposal #プレイヤー2への提案額 else: # 拒否した場合 self.proposer_point = 0 # 何ももらえません self.accepter_point = 0 # 何ももらえません p1 = self.get_player_by_id(Constants.A_List[self.round_number-1]) p2 = self.get_player_by_id(Constants.B_List[self.round_number-2]) p1.payoff = self.proposer_point p2.payoff = self.accepter_point class Player(BasePlayer): def role(self): return {1: 'A', 2: 'B'}[self.id_in_group]