from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c, currency_range, ) import random author = 'Your name here' doc = """ Your app description """ class Constants(BaseConstants): name_in_url = 'Stage2' players_per_group = 2 num_rounds = 1 time_waiting = 60 optionA_Spay = 6 optionA_Rpay = 2 optionB_pay = 4 class Subsession(BaseSubsession): # def group_by_arrival_time_methods(self,waiting_players): # group_id=self.participant.vars['group_id'] # matrix=self.participant.vars['matrix'] # self.set_group_matrix(matrix) number_of_groups = models.IntegerField() def creating_session(self): self.number_of_groups = len(self.get_groups()) groups = self.get_groups() for player in self.get_players(): player.participant.PARTNER_ALIVE = True class Group(BaseGroup): random_number = 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): prob = random.randint(1, 10) self.random_number=prob sender = self.get_player_by_role('Sender') print(sender) #for p in senders: if prob <= 6 : sender.implemented_decision = sender.decisionSender else: if sender.decisionSender=='Option A': sender.implemented_decision = 'Option B' if sender.decisionSender == 'Option B': sender.implemented_decision = 'Option A' if sender.implemented_decision == 'Option A': # sender.payoff = 6 sender.participant.SEC_PAY = Constants.optionA_Spay sender.partnerearnings = Constants.optionA_Rpay else: # sender.payoff = 4 sender.participant.SEC_PAY = Constants.optionB_pay sender.partnerearnings = Constants.optionB_pay pass partner = sender.get_others_in_group() print(partner) for o in partner: o.implemented_decision=sender.implemented_decision #o.payoff = sender.partnerearnings o.participant.SEC_PAY = sender.partnerearnings #o.partnerearnings = sender.payoff o.partnerearnings = sender.participant.SEC_PAY o.decisionSender = sender.decisionSender if o.decisionSender == 'Option A': o.decisiondummy = 'Option A' o.dummyself = Constants.optionA_Rpay o.dummypartner = Constants.optionA_Spay else: o.decisiondummy = 'Option B' o.dummyself = Constants.optionB_pay o.dummypartner = Constants.optionB_pay class Player(BasePlayer): OpenQ2 = models.LongStringField(blank = True) role = models.StringField() implemented_decision = models.StringField() decisiondummy = models.StringField() dummypartner = models.IntegerField() dummyself = models.IntegerField() partnerearnings = models.CurrencyField() decisionSender = models.StringField( choices = [ ['Option A', 'Option A: You get $6.00, Receiver gets $2.00'], ['Option B', 'Option B: You get $4.00, Receiver gets $4.00'] ], widget=widgets.RadioSelect, blank=False ) revealdecision = models.IntegerField( choices = [ [1,"Reveal my partner's choice"], [0,"Do not reveal my partner's choice"] ], widget=widgets.RadioSelect, blank=False ) guessReceiver = models.IntegerField(blank=False) def role(self): if (self.group.id_in_subsession % 2) == 0: if self.id_in_group == 1: return 'Sender' else: return 'Receiver' else: if self.id_in_group == 2: return 'Sender' else: return 'Receiver' control_question1 = models.IntegerField( choices = [ [1, '0 %'], [2, '40 %'], [3, '60 %'], [4, '100 %'] ], widget=widgets.RadioSelect, blank=False ) control_question2 = models.IntegerField( choices = [ [1, '0 %'], [2, '40 %'], [3, '60 %'], [4, '100 %'] ], widget=widgets.RadioSelect, blank=False ) def control_question1_error_message(self, value): #print('value is', value) if value != 3: return "Remember: The Sender's offer only gets implemented 60% of the times. WWith the other 40%, the computer does exactly the opposite!" def control_question2_error_message(self, value): #print('value is', value) if value != 2: return "Remember: The Sender's offer only gets implemented 60% of the times. With the other 40%, the computer does exactly the opposite!" # Assign roles to players_per_group # If Group ID is even, player 1 becomes sender, if odd, player 1 becomes receiver def checkSenderWish(self): if self.decisionSender == 'Option A': self.dummyself = Constants.optionA_Rpay self.dummypartner = Constants.optionA_Spay else: self.dummyself = Constants.optionB_pay self.dummypartner = Constants.optionB_pay