from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c, currency_range, Page, WaitPage ) cu = c doc = '' class Constants(BaseConstants): name_in_url = 'my_ultimatum' players_per_group = 2 num_rounds = 4 endowment = 100 def creating_session(subsession): session = subsession.session subsession.group_randomly() class Subsession(BaseSubsession): creating_session = creating_session def g_method1(group): group.total_proposal = sum([p.proposal for p in group.get_players()]) def g_method2(group): group.total_proposal = sum([p.proposal for p in group.get_players()]) group.total_accept = sum([p.accept for p in group.get_players()]) players = group.get_players() if (group.total_accept > 0): players[0].payoff = Constants.endowment - group.total_proposal players[1].payoff = group.total_proposal else: players[0].payoff = 0 players[1].payoff = 0 class Group(BaseGroup): total_proposal = models.FloatField() total_accept = models.IntegerField() g_method1 = g_method1 g_method2 = g_method2 class Player(BasePlayer): proposal = models.FloatField(initial=0, label='本回合你是“提議者”,請問你提議分給組員多少點?', max=Constants.endowment, min=0) accept = models.IntegerField(choices=[[1, '接受提議'], [0, '拒絕提議']], initial=0, label='本回合你是“回應者”,請問你是否接受組員的提議?', widget=widgets.RadioSelect) identity = models.StringField(label='請輸入你的姓名, 做為本週課堂點名.')