from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c, currency_range ) import numpy as np author = 'Your name here' doc = """ Stag Hunt Game """ class Constants(BaseConstants): name_in_url = 'phase_one' players_per_group = 2 num_rounds = 1 class Subsession(BaseSubsession): def creating_session(self): self.session.vars['stag_games'] = {} for i in range(1, self.session.config['num_stag'] + 1): self.session.vars['stag_games'][str(i)] = [ self.session.config['sh_' + str(i) + '_ee'], self.session.config['sh_' + str(i) + '_es'], self.session.config['sh_' + str(i) + '_se'], self.session.config['sh_' + str(i) + '_ss'] ] for g in self.get_groups(): g.payment_game = np.random.choice(list(range(1, self.session.config['num_stag'] + 1))) class Group(BaseGroup): payment_game = models.IntegerField(initial=-1) class Player(BasePlayer): payment_game = models.IntegerField(initial=-1) payment_action = models.IntegerField(initial=-1) payment_action_other = models.IntegerField(initial=-1) payment_ee = models.IntegerField(initial=-1) payment_es = models.IntegerField(initial=-1) payment_se = models.IntegerField(initial=-1) payment_ss = models.IntegerField(initial=-1) action = models.IntegerField(initial=-1) g1_action = models.IntegerField(initial=-1) g2_action = models.IntegerField(initial=-1) g3_action = models.IntegerField(initial=-1) g4_action = models.IntegerField(initial=-1) points = models.IntegerField(initial=-1) def set_points(self): game = self.group.payment_game self.payment_game = game self.payment_action = getattr(self, 'g' + str(game) + '_action') self.payment_action_other = getattr(self.get_others_in_group()[0], 'g' + str(game) + '_action') actions = [getattr(p, 'g' + str(game) + '_action') for p in self.group.get_players()] self.participant.vars['payment_stag_game'] = [ self.session.config['sh_' + str(game) + '_ee'], self.session.config['sh_' + str(game) + '_es'], self.session.config['sh_' + str(game) + '_se'], self.session.config['sh_' + str(game) + '_ss'] ] self.payment_ee = self.session.config['sh_' + str(game) + '_ee'] self.payment_es = self.session.config['sh_' + str(game) + '_es'] self.payment_se = self.session.config['sh_' + str(game) + '_se'] self.payment_ss = self.session.config['sh_' + str(game) + '_ss'] sum_action = sum(actions) if sum_action == 2: self.points = self.session.vars['stag_games'][str(game)][0] if sum_action == 0: self.points = self.session.vars['stag_games'][str(game)][3] if sum_action == 1: if getattr(self, 'g' + str(game) + '_action') == 1: self.points = self.session.vars['stag_games'][str(game)][1] else: self.points = self.session.vars['stag_games'][str(game)][2] self.participant.vars['sh_points'] = self.points self.participant.vars['payment_action'] = self.payment_action self.participant.vars['payment_action_other'] = self.payment_action_other self.payoff = self.points * self.session.config['sh_conversion']