from otree.api import * c = cu doc = 'During this short experiment you will see various games as in the image below. We will first explain the meaning of this table.' class C(BaseConstants): NAME_IN_URL = 'T1_Without_Game_Miner' PLAYERS_PER_GROUP = 2 NUM_ROUNDS = 1 #Payoff screen: Instructions PAYOFF_Instructions = (-5, 2, 7, 4, 2, 6, 4, 3) #Payoff screen: Game 1 AND Game 2 PAYOFF_G1AG2_1 = (-3, 6, 2, 5, -2, -2, 3, 6) PAYOFF_G1AG2_2 = (2, 6, 7, 5, 1, 2, 6, 6) #Payoff screen: Game 1 OR Game 2 PAYOFF_G1OG2_1 = (-3, 6, 2, 5, -2, -2, 3, 6) PAYOFF_G1OG2_2 = (2, 6, 7, 5, 1, 2, 6, 6) class Subsession(BaseSubsession): pass class Group(BaseGroup): pass def set_payoffs(group: Group): for p in group.get_players(): set_payoff(p) class Player(BasePlayer): choiceG1ANDG2_A = models.IntegerField() choiceG1ANDG2_B = models.IntegerField() choiceG1orG2 = models.IntegerField() Game1P1Decision = models.IntegerField() Game2P1Decision = models.IntegerField() Game1P2Decision = models.IntegerField() Game2P2Decision = models.IntegerField() my_Name = models.StringField(label='We will send you the results and your payment by Bizum. Please write your phone number. ') my_Strategy = models.LongStringField(label='Please describe how you made your decisions. Did you have a strategy how to answer? Any information on that will be interesting for our research.') Profit = models.IntegerField() def role(self): if self.id_in_group == 1: return 'Player 1' if self.id_in_group == 2: return 'Player 2' def other_player(player: Player): group = player.group return player.get_others_in_group()[0] class Welcome(Page): form_model = 'player' class InstructionsP1(Page): form_model = 'player' def is_displayed(player: Player): return player.role() == 'Player 1' def vars_for_template(player: Player): return dict( intro1 = C.PAYOFF_Instructions[0], intro2 = C.PAYOFF_Instructions[1], intro3 = C.PAYOFF_Instructions[2], intro4 = C.PAYOFF_Instructions[3], intro5 = C.PAYOFF_Instructions[4], intro6 = C.PAYOFF_Instructions[5], intro7 = C.PAYOFF_Instructions[6], intro8 = C.PAYOFF_Instructions[7], ) class InstructionsP2(Page): form_model = 'player' def is_displayed(player: Player): return player.role() == 'Player 2' def vars_for_template(player: Player): return dict( intro1 = C.PAYOFF_Instructions[1], intro2 = C.PAYOFF_Instructions[0], intro3 = C.PAYOFF_Instructions[3], intro4 = C.PAYOFF_Instructions[2], intro5 = C.PAYOFF_Instructions[5], intro6 = C.PAYOFF_Instructions[4], intro7 = C.PAYOFF_Instructions[7], intro8 = C.PAYOFF_Instructions[6], ) class Game1ANDGame2DecisionP1(Page): form_model = 'player' form_fields = ['choiceG1ANDG2_A', 'choiceG1ANDG2_B'] def is_displayed(player: Player): return player.role() == 'Player 1' def vars_for_template(player: Player): return dict( payoffG1G2_11 = C.PAYOFF_G1AG2_1[0], payoffG1G2_12 = C.PAYOFF_G1AG2_1[1], payoffG1G2_13 = C.PAYOFF_G1AG2_1[2], payoffG1G2_14 = C.PAYOFF_G1AG2_1[3], payoffG1G2_15 = C.PAYOFF_G1AG2_1[4], payoffG1G2_16 = C.PAYOFF_G1AG2_1[5], payoffG1G2_17 = C.PAYOFF_G1AG2_1[6], payoffG1G2_18 = C.PAYOFF_G1AG2_1[7], payoffG1G2_21 = C.PAYOFF_G1AG2_2[0], payoffG1G2_22 = C.PAYOFF_G1AG2_2[1], payoffG1G2_23 = C.PAYOFF_G1AG2_2[2], payoffG1G2_24 = C.PAYOFF_G1AG2_2[3], payoffG1G2_25 = C.PAYOFF_G1AG2_2[4], payoffG1G2_26 = C.PAYOFF_G1AG2_2[5], payoffG1G2_27 = C.PAYOFF_G1AG2_2[6], payoffG1G2_28 = C.PAYOFF_G1AG2_2[7], ) class Game1ANDGame2DecisionP2(Page): form_model = 'player' form_fields = ['choiceG1ANDG2_A', 'choiceG1ANDG2_B'] def is_displayed(player: Player): return player.role() == 'Player 2' def vars_for_template(player: Player): return dict( payoffG1G2_11 = C.PAYOFF_G1AG2_1[1], payoffG1G2_12 = C.PAYOFF_G1AG2_1[0], payoffG1G2_13 = C.PAYOFF_G1AG2_1[3], payoffG1G2_14 = C.PAYOFF_G1AG2_1[2], payoffG1G2_15 = C.PAYOFF_G1AG2_1[5], payoffG1G2_16 = C.PAYOFF_G1AG2_1[4], payoffG1G2_17 = C.PAYOFF_G1AG2_1[7], payoffG1G2_18 = C.PAYOFF_G1AG2_1[6], payoffG1G2_21 = C.PAYOFF_G1AG2_2[1], payoffG1G2_22 = C.PAYOFF_G1AG2_2[0], payoffG1G2_23 = C.PAYOFF_G1AG2_2[3], payoffG1G2_24 = C.PAYOFF_G1AG2_2[2], payoffG1G2_25 = C.PAYOFF_G1AG2_2[5], payoffG1G2_26 = C.PAYOFF_G1AG2_2[4], payoffG1G2_27 = C.PAYOFF_G1AG2_2[7], payoffG1G2_28 = C.PAYOFF_G1AG2_2[6], ) class Game1ORGame2P1Decision(Page): form_model = 'player' form_fields = ['choiceG1orG2'] def is_displayed(player: Player): return player.role() == 'Player 1' def vars_for_template(player: Player): return dict( payoffG1OG2_11 = C.PAYOFF_G1OG2_1[0], payoffG1OG2_12 = C.PAYOFF_G1OG2_1[1], payoffG1OG2_13 = C.PAYOFF_G1OG2_1[2], payoffG1OG2_14 = C.PAYOFF_G1OG2_1[3], payoffG1OG2_15 = C.PAYOFF_G1OG2_1[4], payoffG1OG2_16 = C.PAYOFF_G1OG2_1[5], payoffG1OG2_17 = C.PAYOFF_G1OG2_1[6], payoffG1OG2_18 = C.PAYOFF_G1OG2_1[7], payoffG1OG2_21 = C.PAYOFF_G1OG2_2[0], payoffG1OG2_22 = C.PAYOFF_G1OG2_2[1], payoffG1OG2_23 = C.PAYOFF_G1OG2_2[2], payoffG1OG2_24 = C.PAYOFF_G1OG2_2[3], payoffG1OG2_25 = C.PAYOFF_G1OG2_2[4], payoffG1OG2_26 = C.PAYOFF_G1OG2_2[5], payoffG1OG2_27 = C.PAYOFF_G1OG2_2[6], payoffG1OG2_28 = C.PAYOFF_G1OG2_2[7], ) class Game1ORGame2P2(Page): def is_displayed(player: Player): return player.role() == 'Player 2' def vars_for_template(player: Player): return dict( payoffG1OG2_11 = C.PAYOFF_G1OG2_1[1], payoffG1OG2_12 = C.PAYOFF_G1OG2_1[0], payoffG1OG2_13 = C.PAYOFF_G1OG2_1[3], payoffG1OG2_14 = C.PAYOFF_G1OG2_1[2], payoffG1OG2_15 = C.PAYOFF_G1OG2_1[5], payoffG1OG2_16 = C.PAYOFF_G1OG2_1[4], payoffG1OG2_17 = C.PAYOFF_G1OG2_1[7], payoffG1OG2_18 = C.PAYOFF_G1OG2_1[6], payoffG1OG2_21 = C.PAYOFF_G1OG2_2[1], payoffG1OG2_22 = C.PAYOFF_G1OG2_2[0], payoffG1OG2_23 = C.PAYOFF_G1OG2_2[3], payoffG1OG2_24 = C.PAYOFF_G1OG2_2[2], payoffG1OG2_25 = C.PAYOFF_G1OG2_2[5], payoffG1OG2_26 = C.PAYOFF_G1OG2_2[4], payoffG1OG2_27 = C.PAYOFF_G1OG2_2[7], payoffG1OG2_28 = C.PAYOFF_G1OG2_2[6], ) class Game1P1Decision(Page): form_model = 'player' form_fields = ['Game1P1Decision'] def is_displayed(player: Player): return player.role() == 'Player 1' and player.choiceG1orG2 == 1 def vars_for_template(player: Player): return dict( payoffG1OG2_11 = C.PAYOFF_G1OG2_1[0], payoffG1OG2_12 = C.PAYOFF_G1OG2_1[1], payoffG1OG2_13 = C.PAYOFF_G1OG2_1[2], payoffG1OG2_14 = C.PAYOFF_G1OG2_1[3], payoffG1OG2_15 = C.PAYOFF_G1OG2_1[4], payoffG1OG2_16 = C.PAYOFF_G1OG2_1[5], payoffG1OG2_17 = C.PAYOFF_G1OG2_1[6], payoffG1OG2_18 = C.PAYOFF_G1OG2_1[7], ) class Game2P1Decision(Page): form_model = 'player' form_fields = ['Game2P1Decision'] def is_displayed(player: Player): return player.role() == 'Player 1' and player.choiceG1orG2 == 2 def vars_for_template(player: Player): return dict( payoffG1OG2_21 = C.PAYOFF_G1OG2_2[0], payoffG1OG2_22 = C.PAYOFF_G1OG2_2[1], payoffG1OG2_23 = C.PAYOFF_G1OG2_2[2], payoffG1OG2_24 = C.PAYOFF_G1OG2_2[3], payoffG1OG2_25 = C.PAYOFF_G1OG2_2[4], payoffG1OG2_26 = C.PAYOFF_G1OG2_2[5], payoffG1OG2_27 = C.PAYOFF_G1OG2_2[6], payoffG1OG2_28 = C.PAYOFF_G1OG2_2[7], ) class Game1ORGame2WaitPage(WaitPage): @staticmethod def after_all_players_arrive(group: Group): for p in group.get_players(): p.payoff = 100 class Game1P2Decision(Page): form_model = 'player' form_fields = ['Game1P2Decision'] def is_displayed(player: Player): other = other_player(player) return player.role() == 'Player 2' and other.choiceG1orG2 == 1 def vars_for_template(player: Player): return dict( payoffG1OG2_11 = C.PAYOFF_G1OG2_1[1], payoffG1OG2_12 = C.PAYOFF_G1OG2_1[0], payoffG1OG2_13 = C.PAYOFF_G1OG2_1[3], payoffG1OG2_14 = C.PAYOFF_G1OG2_1[2], payoffG1OG2_15 = C.PAYOFF_G1OG2_1[5], payoffG1OG2_16 = C.PAYOFF_G1OG2_1[4], payoffG1OG2_17 = C.PAYOFF_G1OG2_1[7], payoffG1OG2_18 = C.PAYOFF_G1OG2_1[6], ) class Game2P2Decision(Page): form_model = 'player' form_fields = ['Game2P2Decision'] def is_displayed(player: Player): other = other_player(player) return player.role() == 'Player 2' and other.choiceG1orG2 == 2 def vars_for_template(player: Player): return dict( payoffG1OG2_21 = C.PAYOFF_G1OG2_2[1], payoffG1OG2_22 = C.PAYOFF_G1OG2_2[0], payoffG1OG2_23 = C.PAYOFF_G1OG2_2[3], payoffG1OG2_24 = C.PAYOFF_G1OG2_2[2], payoffG1OG2_25 = C.PAYOFF_G1OG2_2[5], payoffG1OG2_26 = C.PAYOFF_G1OG2_2[4], payoffG1OG2_27 = C.PAYOFF_G1OG2_2[7], payoffG1OG2_28 = C.PAYOFF_G1OG2_2[6], ) class ResultsWaitPage(WaitPage): @staticmethod def after_all_players_arrive(group: Group): for p in group.get_players(): p.payoff = 100 class PayoffsP1(Page): def is_displayed(player: Player): return player.role() == 'Player 1' def vars_for_template(player: Player): return dict( myProfit = 100 ) class PayoffsP2(Page): def is_displayed(player: Player): return player.role() == 'Player 2' def vars_for_template(player: Player): return dict( myProfit = 200 ) class QuestionsP1(Page): form_model = 'player' form_fields = ['my_Name', 'my_Strategy'] def is_displayed(player: Player): return player.role() == 'Player 1' and player.round_number == C.NUM_ROUNDS class QuestionsP2(Page): form_model = 'player' form_fields = ['my_Name', 'my_Strategy'] def is_displayed(player: Player): return player.role() == 'Player 2' and player.round_number == C.NUM_ROUNDS page_sequence = [Welcome, InstructionsP1, InstructionsP2, Game1ANDGame2DecisionP1, Game1ANDGame2DecisionP2, Game1ORGame2P1Decision, Game1ORGame2P2, Game1ORGame2WaitPage, Game1P1Decision, Game1P2Decision, Game2P1Decision, Game2P2Decision, ResultsWaitPage, PayoffsP1, PayoffsP2, QuestionsP1, QuestionsP2]