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 = 'Coordination_Structure_6' players_per_group = 3 num_rounds = 3 class Subsession(BaseSubsession): def creating_session(self): import random if self.round_number == 1: for p in self.get_players(): symbols = ['#', '$', '%', '^', '&', '*'] random.shuffle(symbols) random_sym = symbols[:] p.participant.vars['random'] = ''.join(random_sym) for p in self.get_players(): p.State_ball = random.randint(1, 6) def carry_over_message(self): if self.round_number == 1: for p in self.get_players(): p.Message1 = p.participant.vars['Message1'] p.Message2 = p.participant.vars['Message2'] p.Message3 = p.participant.vars['Message3'] p.Message4 = p.participant.vars['Message4'] p.Message5 = p.participant.vars['Message5'] p.Message6 = p.participant.vars['Message6'] class Group(BaseGroup): def set_payoffs(self): for i, j in [(1, 2), (1, 3), (2, 1)]: if self.get_player_by_id(i).State_ball == self.get_player_by_id(j).Action_ball_1: self.get_player_by_id(i).payoff += 2 self.get_player_by_id(j).payoff += 2 for i, j in [(2, 3), (3, 1), (3, 2)]: if self.get_player_by_id(i).State_ball == self.get_player_by_id(j).Action_ball_2: self.get_player_by_id(i).payoff += 2 self.get_player_by_id(j).payoff += 2 for p in self.get_players(): mydict = p.my_trans_dict() p.Message1_trans = ''.join([mydict.get(w) for w in list(p.Message1)]) p.Message2_trans = ''.join([mydict.get(w) for w in list(p.Message2)]) p.Message3_trans = ''.join([mydict.get(w) for w in list(p.Message3)]) p.Message4_trans = ''.join([mydict.get(w) for w in list(p.Message4)]) p.Message5_trans = ''.join([mydict.get(w) for w in list(p.Message5)]) p.Message6_trans = ''.join([mydict.get(w) for w in list(p.Message6)]) if (self.get_player_by_id(1).Message1_trans == self.get_player_by_id( 2).Message1_trans == self.get_player_by_id(3).Message1_trans) & ( self.get_player_by_id(1).Message2_trans == self.get_player_by_id( 2).Message2_trans == self.get_player_by_id(3).Message2_trans) & ( self.get_player_by_id(1).Message3_trans == self.get_player_by_id( 2).Message3_trans == self.get_player_by_id(3).Message3_trans) & ( self.get_player_by_id(1).Message4_trans == self.get_player_by_id( 2).Message4_trans == self.get_player_by_id(3).Message4_trans) & ( self.get_player_by_id(1).Message5_trans == self.get_player_by_id( 2).Message5_trans == self.get_player_by_id(3).Message5_trans) & ( self.get_player_by_id(1).Message6_trans == self.get_player_by_id( 2).Message6_trans == self.get_player_by_id(3).Message6_trans): self.get_player_by_id(1).payoff += 8 self.get_player_by_id(2).payoff += 8 self.get_player_by_id(3).payoff += 8 self.get_player_by_id(1).Match = 2 self.get_player_by_id(2).Match = 2 self.get_player_by_id(3).Match = 2 else: for i, j in [(1, 2), (2, 3), (1, 3)]: if (self.get_player_by_id(i).Message1_trans == self.get_player_by_id( j).Message1_trans) & ( self.get_player_by_id(i).Message2_trans == self.get_player_by_id( j).Message2_trans) & ( self.get_player_by_id(i).Message3_trans == self.get_player_by_id( j).Message3_trans) & ( self.get_player_by_id(i).Message4_trans == self.get_player_by_id( j).Message4_trans) & ( self.get_player_by_id(i).Message5_trans == self.get_player_by_id( j).Message5_trans) & ( self.get_player_by_id(i).Message6_trans == self.get_player_by_id(j).Message6_trans): self.get_player_by_id(i).payoff += 4 self.get_player_by_id(j).payoff += 4 self.get_player_by_id(i).Match = 1 self.get_player_by_id(j).Match = 1 class Player(BasePlayer): State_ball = models.IntegerField() Message1 = models.StringField() Message2 = models.StringField() Message3 = models.StringField() Message4 = models.StringField() Message5 = models.StringField() Message6 = models.StringField() def start(self): if self.round_number > 1: self.Message1 = self.in_round(self.round_number - 1).Message1 self.Message2 = self.in_round(self.round_number - 1).Message2 self.Message3 = self.in_round(self.round_number - 1).Message3 self.Message4 = self.in_round(self.round_number - 1).Message4 self.Message5 = self.in_round(self.round_number - 1).Message5 self.Message6 = self.in_round(self.round_number - 1).Message6 Message1_trans = models.StringField() Message2_trans = models.StringField() Message3_trans = models.StringField() Message4_trans = models.StringField() Message5_trans = models.StringField() Message6_trans = models.StringField() Action_ball_1 = models.IntegerField(blank=True) Action_ball_2 = models.IntegerField(blank=True) Message = models.StringField() my_trans_message = models.StringField() Match = models.IntegerField(initial=0) def my_trans_dict(self): symbols = ['#', '$', '%', '^', '&', '*'] my_random = list(self.participant.vars['random']) mydictionary = dict(zip(my_random, symbols)) return mydictionary def my_trans_message(self): mydict = self.my_trans_dict() words = list(self.Message) trans = [mydict.get(w) for w in words] my_trans_message = ''.join(trans) return my_trans_message def other_trans_dict(self): symbols = ['#', '$', '%', '^', '&', '*'] my_random = list(self.participant.vars['random']) otdictionary = dict(zip(symbols, my_random)) return otdictionary def first_mess(self): message_received = [other.my_trans_message() for other in self.get_others_in_group()] first_mess = message_received[0] return first_mess def first_mess_trans(self): dict = self.other_trans_dict() words = list(self.first_mess()) trans = [dict.get(w) for w in words] first_mess_trans = ''.join(trans) return first_mess_trans def second_mess(self): message_received = [other.my_trans_message() for other in self.get_others_in_group()] second_mess = message_received[1] return second_mess def second_mess_trans(self): dict = self.other_trans_dict() words = list(self.second_mess()) trans = [dict.get(w) for w in words] second_mess_trans = ''.join(trans) return second_mess_trans def nickname(self): if self.id_in_group == 1: nickname = "成員甲" elif self.id_in_group == 2: nickname = "成員乙" else: nickname = "成員丙" return nickname def first_nickname(self): if self.id_in_group == 1: nickname = "成員乙" else: nickname = "成員甲" return nickname def second_nickname(self): if self.id_in_group == 3: nickname = "成員乙" else: nickname = "成員丙" return nickname