from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c, currency_range ) import random author = 'Huanren Zhang' doc = """ Payment information for the preference elicitation """ class Constants(BaseConstants): name_in_url = 'payment' players_per_group = None num_rounds = 1 class Subsession(BaseSubsession): def group_by_arrival_time_method(self, waiting_players): if len(waiting_players) >= 2: matched_players = waiting_players[:2] p1,p2 = matched_players print('Players are matched for EET:',p1,p2) p1.participant.vars['row_to_pay'].append(1) p2.participant.vars['row_to_pay'].append(2) p2.participant.vars['row_to_pay'] = p1.participant.vars['row_to_pay'] p1.payoff += (p1.participant.vars['row_to_pay'][1] if p1.participant.vars['row_to_pay'][5] == 'L' else p1.participant.vars['row_to_pay'][3]) p2.payoff += (p2.participant.vars['row_to_pay'][2] if p2.participant.vars['row_to_pay'][5] == 'L' else p2.participant.vars['row_to_pay'][4]) p1.participant.vars['eet_payoff'] = p1.payoff p2.participant.vars['eet_payoff'] = p2.payoff p1.participant.vars['proposer'] = True p2.participant.vars['proposer'] = False p1.participant.vars['finished'] = 1 p2.participant.vars['finished'] = 1 return matched_players if len(waiting_players)==1: players = self.get_players() incoming_players = [p for p in players if p.participant.vars.get('matched',0) and (not p.participant.vars.get('finished',0))] print('waiting_players',waiting_players,'incoming_players',incoming_players) if (len(incoming_players) == 1): # if there is only one player that cannot be matched p1, = incoming_players print('One player is matched for EET',p1) p1.participant.vars['row_to_pay'].append(1) p1.payoff += (p1.participant.vars['row_to_pay'][1] if p1.participant.vars['row_to_pay'][5] == 'L' else p1.participant.vars['row_to_pay'][3]) p1.participant.vars['eet_payoff'] = p1.payoff p1.participant.vars['proposer'] = True p1.participant.vars['finished'] = 1 return [p1] class Group(BaseGroup): pass class Player(BasePlayer): pass