from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c, currency_range ) import random doc = """ """ class Constants(BaseConstants): players_per_group = 2 minutes_given = 4 num_rounds = 1 num_questions = 10 answer_keys = ["I", "M", "S", "L", "H", "A", "R", "I", "I", "K"] name_in_url = 'competition' pper_question = 3 cper_question = 9 class Subsession(BaseSubsession): pass class Group(BaseGroup): winning_performance = models.FloatField() losing_performance = models.FloatField() assigned_comp = models.IntegerField() def assign_comp(self): players = self.get_players() possibilities = [0, 1] if random.random() < 0.5: p_implement = random.choice(players) self.assigned_comp = p_implement.comp_selection else: self.assigned_comp = random.choice(possibilities) def set_guess_payoffs(self): players = self.get_players() p1 = self.get_player_by_id(1) p2 = self.get_player_by_id(2) for p in players: if p.guess_own == p.word_total_correct: p.payoff_guess1c = 2 else: p.payoff_guess1c = 0 p.participant.vars['payoff_guess1c'] = p.payoff_guess1c print ("Player:", p.id_in_group, ", payoff_guess1c", p.participant.vars['payoff_guess1c']) if p1.guess_others == p2.word_total_correct: p1.payoff_guess2c = 2 else: p1.payoff_guess2c = 0 if p2.guess_others == p1.word_total_correct: p2.payoff_guess2c = 2 else: p2.payoff_guess2c = 0 for p in players: p.participant.vars['payoff_guess2c'] = p.payoff_guess2c print ("Player:", p.id_in_group, ", payoff_guess2c", p.participant.vars['payoff_guess2c']) def set_payoffs(self): players = self.get_players() #assign teams to competition with 1/2 probability if self.assigned_comp ==1: self.winning_performance = max([p.word_total_correct for p in players]) print(self.winning_performance, "Winning performance") winners = [p for p in players if p.word_total_correct == self.winning_performance] winner = random.choice(winners) for p in players: if p == winner: p.is_winner = True p.payoff_competition = p.word_total_correct * Constants.cper_question else: p.is_winner = False p.payoff_competition = 0 else: for p in players: p.payoff_competition = p.word_total_correct * Constants.pper_question players = self.get_players() for p in players: p.participant.vars['payoff_competition'] = p.payoff_competition + p.participant.vars['payoff_guess1c'] + p.participant.vars['payoff_guess2c'] print("Player:", p.id_in_group, " total number of correct answers is", p.word_total_correct) print("Player:", p.id_in_group, ", payoff:", p.participant.vars['payoff_competition']) class Player(BasePlayer): payoff_guess1c = models.FloatField() payoff_guess2c = models.FloatField() is_winner = models.BooleanField() payoff_competition= models.IntegerField() comp_selection = models.IntegerField(label='Hangi senaryoda oynamak istersiniz?', choices=[ [0, 'Bireysel olarak oynamak istiyorum.'], [1, 'Rastgele atanan bir katılımcı ile turnuvaya katılmak istiyorum.'], ], widget=widgets.RadioSelectHorizontal) guess_own = models.IntegerField( label='Sizce, bu oyunda 4 dakika içinde 10 sorudan kaç tane soruyu doğru yanıtlayabileceksiniz? Tahmininizin doğru olması durumunda kazancınıza ek 2 TL kazanacaksınız.' ) guess_others = models.IntegerField( label='Sizce, katılımcılar arasından rastgele seçilen bir kişi bu oyunda 4 dakika içinde 10 sorudan kaç tane soruyu doğru yanıtlayabilecek? Tahmininizin doğru olması durumunda kazancınıza ek 2 TL kazanacaksınız.' ) # answer = models.IntegerField(choices=[0, 1,2,3,4,5,6,7,8], widget=widgets.RadioSelect, initial=0) q1 = models.StringField(label="RAN/NEK/Kİ") q2 = models.StringField(label="KU/SO/GA") q3 = models.StringField(label="AKİ/IRA/AHA") q4 = models.StringField(label="TEKİ/YE/KİRİ") q5 = models.StringField(label="AR/AL/OR") q6 = models.StringField(label="TA/SA/MA") q7 = models.StringField(label="TU/KU/FA") q8 = models.StringField(label="CAN/KİM/SİN") q9 = models.StringField(label="KAZ/BARE/LİM") q10 = models.StringField(label="ARA/UMA/İRA") q1_correct = models.IntegerField() q2_correct = models.IntegerField() q3_correct = models.IntegerField() q4_correct = models.IntegerField() q5_correct = models.IntegerField() q6_correct = models.IntegerField() q7_correct = models.IntegerField() q8_correct = models.IntegerField() q9_correct = models.IntegerField() q10_correct = models.IntegerField() word_total_correct = models.IntegerField( initial=0, doc="total number of correct answers" ) def set_performances(self): self.q1=self.q1.upper() self.q2=self.q2.upper() self.q3=self.q3.upper() self.q4=self.q4.upper() self.q5=self.q5.upper() self.q6=self.q6.upper() self.q7=self.q7.upper() self.q8=self.q8.upper() self.q9=self.q9.upper() self.q10=self.q10.upper() if self.q1 == Constants.answer_keys[0]: self.q1_correct = 1 else: self.q1_correct = 0 if self.q2 == Constants.answer_keys[1]: self.q2_correct = 1 else: self.q2_correct = 0 if self.q3 == Constants.answer_keys[2]: self.q3_correct = 1 else: self.q3_correct = 0 if self.q4 == Constants.answer_keys[3]: self.q4_correct = 1 else: self.q4_correct = 0 if self.q5 == Constants.answer_keys[4]: self.q5_correct = 1 else: self.q5_correct = 0 if self.q6 == Constants.answer_keys[5]: self.q6_correct = 1 else: self.q6_correct = 0 if self.q7 == Constants.answer_keys[6]: self.q7_correct = 1 else: self.q7_correct = 0 if self.q8 == Constants.answer_keys[7]: self.q8_correct = 1 else: self.q8_correct = 0 if self.q9 == Constants.answer_keys[8]: self.q9_correct = 1 else: self.q9_correct = 0 if self.q10 == Constants.answer_keys[9]: self.q10_correct = 1 else: self.q10_correct = 0 self.word_total_correct = self.q1_correct + \ self.q2_correct + \ self.q3_correct + \ self.q4_correct + \ self.q5_correct + \ self.q6_correct + \ self.q7_correct + \ self.q8_correct + \ self.q9_correct + \ self.q10_correct print('Competition: Total number of correct answer:', self.word_total_correct)