from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c, currency_range ) doc = """communication""" class Constants(BaseConstants): name_in_url = 'a_free_PD' players_per_group = 2 num_rounds = 1 PD_template = 'a_free_PD/PD_Instructions.html' # payoff of PD game""", PD_Both_Square = c(50) PD_Square_Triangle = c(0) PD_Triangle_Square = c(150) PD_Both_Triangle = c(20) class Subsession(BaseSubsession): def do_my_shuffle(self): self.group_randomly() class Group(BaseGroup): pass class Player(BasePlayer): PD_guess1_S = models.IntegerField(min=0, max=100) PD_guess2_S = models.IntegerField(min=0, max=100) PD_guess1_R = models.IntegerField(min=0, max=100) PD_guess2_R = models.IntegerField(min=0, max=100) PD_message = models.LongStringField() PD_decision_S = models.StringField( choices=['Square', 'Triangle'], widget=widgets.RadioSelect ) PD_decision_R = models.StringField( choices=['Square', 'Triangle'], widget=widgets.RadioSelect ) def other_player(self): return self.get_others_in_group()[0] PD_payoff = models.CurrencyField() PD_game_payoff = models.CurrencyField() PD_guess1_payoff = models.CurrencyField() PD_guess2_payoff = models.CurrencyField() def set_payoff(self): if self.id_in_group == 1 and self.PD_decision_S == "Square" and self.other_player().PD_decision_R == "Triangle": self.PD_game_payoff = 0 self.PD_guess1_payoff = (1 - self.PD_guess1_S * 0.01 * self.PD_guess1_S * 0.01) * 20 self.PD_guess2_payoff = (1-((self.PD_guess2_S - self.other_player().PD_guess1_R) * 0.01) * ((self.PD_guess2_S - self.other_player().PD_guess1_R) * 0.01)) * 20 self.PD_payoff = self.PD_game_payoff + self.PD_guess1_payoff + self.PD_guess2_payoff if self.id_in_group == 1 and self.PD_decision_S == "Triangle" and self.other_player().PD_decision_R == "Square": self.PD_game_payoff = 150 self.PD_guess1_payoff = (1 - (self.PD_guess1_S * 0.01 - 1) * (self.PD_guess1_S * 0.01 - 1)) * 20 self.PD_guess2_payoff = (1-((self.PD_guess2_S - self.other_player().PD_guess1_R) * 0.01) * ((self.PD_guess2_S - self.other_player().PD_guess1_R) * 0.01)) * 20 self.PD_payoff = self.PD_game_payoff + self.PD_guess1_payoff + self.PD_guess2_payoff if self.id_in_group == 2 and self.PD_decision_R == "Square" and self.other_player().PD_decision_S == "Triangle": self.PD_game_payoff = 0 self.PD_guess1_payoff = (1 - self.PD_guess1_R * 0.01 * self.PD_guess1_R * 0.01) * 20 self.PD_guess2_payoff = (1-((self.PD_guess2_R - self.other_player().PD_guess1_S) * 0.01) * ((self.PD_guess2_R - self.other_player().PD_guess1_S) * 0.01)) * 20 self.PD_payoff = self.PD_game_payoff + self.PD_guess1_payoff + self.PD_guess2_payoff if self.id_in_group == 2 and self.PD_decision_R == "Triangle" and self.other_player().PD_decision_S == "Square": self.PD_game_payoff = 150 self.PD_guess1_payoff = (1 - (self.PD_guess1_R * 0.01 - 1) * (self.PD_guess1_R * 0.01 - 1)) * 20 self.PD_guess2_payoff = (1-((self.PD_guess2_R - self.other_player().PD_guess1_S) * 0.01) * ((self.PD_guess2_R - self.other_player().PD_guess1_S) * 0.01)) * 20 self.PD_payoff = self.PD_game_payoff + self.PD_guess1_payoff + self.PD_guess2_payoff if self.id_in_group == 1 and self.PD_decision_S == "Square" and self.other_player().PD_decision_R == "Square": self.PD_game_payoff = 50 self.PD_guess1_payoff = (1 - (self.PD_guess1_S * 0.01 - 1) * (self.PD_guess1_S * 0.01 - 1)) * 20 self.PD_guess2_payoff = (1-((self.PD_guess2_S - self.other_player().PD_guess1_R) * 0.01) * ((self.PD_guess2_S - self.other_player().PD_guess1_R) * 0.01)) * 20 self.PD_payoff = self.PD_game_payoff + self.PD_guess1_payoff + self.PD_guess2_payoff if self.id_in_group == 1 and self.PD_decision_S == "Triangle" and self.other_player().PD_decision_R == "Triangle": self.PD_game_payoff = 20 self.PD_guess1_payoff = (1 - self.PD_guess1_S * 0.01 * self.PD_guess1_S * 0.01) * 20 self.PD_guess2_payoff = (1-((self.PD_guess2_S - self.other_player().PD_guess1_R) * 0.01) * ((self.PD_guess2_S - self.other_player().PD_guess1_R) * 0.01)) * 20 self.PD_payoff = self.PD_game_payoff + self.PD_guess1_payoff + self.PD_guess2_payoff if self.id_in_group == 2 and self.PD_decision_R == "Square" and self.other_player().PD_decision_S == "Square": self.PD_game_payoff = 50 self.PD_guess1_payoff = (1 - (self.PD_guess1_R * 0.01 - 1) * (self.PD_guess1_R * 0.01 - 1)) * 20 self.PD_guess2_payoff = (1-((self.PD_guess2_R - self.other_player().PD_guess1_S) * 0.01) * ((self.PD_guess2_R - self.other_player().PD_guess1_S) * 0.01)) * 20 self.PD_payoff = self.PD_game_payoff + self.PD_guess1_payoff + self.PD_guess2_payoff if self.id_in_group == 2 and self.PD_decision_R == "Triangle" and self.other_player().PD_decision_S == "Triangle": self.PD_game_payoff = 20 self.PD_guess1_payoff = (1 - self.PD_guess1_R * 0.01 * self.PD_guess1_R * 0.01) * 20 self.PD_guess2_payoff = (1-((self.PD_guess2_R - self.other_player().PD_guess1_S) * 0.01) * ((self.PD_guess2_R - self.other_player().PD_guess1_S) * 0.01)) * 20 self.PD_payoff = self.PD_game_payoff + self.PD_guess1_payoff + self.PD_guess2_payoff