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 = 'Stage1' players_per_group = 2 num_rounds = 1 task_time = 60 time_waiting = 60 value_puzzle = 1 max_group = 8 * value_puzzle solution_zeros1 = 17 solution_zeros2 = 19 solution_zeros3 = 8 solution_zeros4 = 23 class Subsession(BaseSubsession): def creating_session(subsession): for player in subsession.get_players(): player.participant.PARTNER_ALIVE = True #get group matrix matrix = subsession.get_group_matrix() players = subsession.get_players() for p in players: p.participant.vars['matrix']=matrix class Group(BaseGroup): group_account = models.IntegerField() def check_partner_status(self): print("CHECKED STATUS",self) one = self.get_player_by_id(1) two = self.get_player_by_id(2) if one.participant.PARTNER_ALIVE == False or two.participant.PARTNER_ALIVE == False: one.participant.PARTNER_ALIVE = False two.participant.PARTNER_ALIVE = False def set_payoffs(self): players = self.get_players() for p in players: if p.zeros1 == Constants.solution_zeros1: p.zeros1_correct = Constants.value_puzzle if p.zeros2 == Constants.solution_zeros2: p.zeros2_correct = Constants.value_puzzle if p.zeros3 == Constants.solution_zeros3: p.zeros3_correct = Constants.value_puzzle if p.zeros4 == Constants.solution_zeros4: p.zeros4_correct = Constants.value_puzzle p.contribution = p.zeros1_correct + p.zeros2_correct + p.zeros3_correct + p.zeros4_correct contributions = [p.contribution for p in players] self.group_account = sum(contributions) for p in players: p.contribution_partner = self.group_account - p.contribution p.participant.vars['group']=self.id_in_subsession p.participant.vars['S1_group_account'] = p.group.group_account if self.group_account < Constants.max_group: for p in players: p.participant.PARTNER_ALIVE = False class Player(BasePlayer): OpenQ1 = models.LongStringField(blank = True) zeros1 = models.IntegerField() zeros1_correct = models.IntegerField(initial=0) zeros2 = models.IntegerField() zeros2_correct = models.IntegerField(initial=0) zeros3 = models.IntegerField() zeros3_correct = models.IntegerField(initial=0) zeros4 = models.IntegerField() zeros4_correct = models.IntegerField(initial=0) contribution = models.IntegerField() contribution_partner =models.IntegerField() def zeros1_error_message(self, value): if value != Constants.solution_zeros1: return 'Wrong answer, please count again' def zeros2_error_message(self, value): if value != Constants.solution_zeros2: return 'Wrong answer, please count again' def zeros3_error_message(self, value): if value != Constants.solution_zeros3: return 'Wrong answer, please count again' def zeros4_error_message(self, value): if value != Constants.solution_zeros4: return 'Wrong answer, please count again'