from otree.api import * author = 'Alistair Munro, Fitawhidan Nashuha, and Gerald Ezra Charles' doc = """ Coin-Flip Gambling Task by Fitawhidan Nashuha. """ # models.py (main game) GAME_PARAMS = [ {"multiplier": 1.2, "prob": 0.2969}, # House Edge = 5% {"multiplier": 1.5, "prob": 0.2714}, # House Edge = 5% {"multiplier": 2.0, "prob": 0.2375}, # House Edge = 5% {"multiplier": 1.3, "prob": 0.2879}, # House Edge = 5% {"multiplier": 1.8, "prob": 0.25}, # House Edge = 5% ] class C(BaseConstants): NAME_IN_URL = 'd_coin_nash' PLAYERS_PER_GROUP = None NUM_ROUNDS = 20 INITIAL_BALANCE = cu(50000) # starting credits COIN_BALANCE_MAIN = 'coin_main_balance' class Subsession(BaseSubsession): def creating_session(self): for p in self.get_players(): # Initialize balance in the first round if self.round_number == 1: p.participant.vars[C.COIN_BALANCE_MAIN] = C.INITIAL_BALANCE p.participant.vars['play_next_round_real'] = True # Determine which set of parameters to use for this round index = (self.round_number - 1) % len(GAME_PARAMS) params = GAME_PARAMS[index] # Assign to player p.multiplier = params["multiplier"] p.win_probability = params["prob"] class Group(BaseGroup): pass class Player(BasePlayer): final_balance = models.CurrencyField() multiplier = models.FloatField() win_probability = models.FloatField() # outcome variables coin_result = models.StringField() round_win = models.BooleanField() round_payoff = models.CurrencyField() def set_final_balance(player): if player.round_number == C.NUM_ROUNDS: player.final_balance = player.participant.vars.get(C.COIN_BALANCE_MAIN, 0) def vars_for_template(player): return dict( round_number=player.round_number ) bet_amount = models.CurrencyField( choices=[ (cu(x), f"{x:,}".replace(",", ".")) for x in range(0, 50001, 500) ], label='Berapa nominal yang hendak Anda pertaruhkan di ronde ini?
' 'Pilih dari pilihan yang tersedia di kotak di bawah ini.', ) choice = models.StringField( choices=[['H', 'Kepala'], ['T', 'Ekor']], widget=widgets.RadioSelect, label='

Pilihlah salah satu:

' ) # Next Round? ## Consent play_round = models.BooleanField( choices=[[True, 'Ya, Saya ingin bermain'], [False, 'Tidak, Saya ingin berhenti bermain']], widget=widgets.RadioSelect, label='

Apakah Anda ingin bermain di Ronde ini?

' ) play_round_sure = models.BooleanField( choices=[[True, 'Ya, Saya yakin untuk menyudahi permainan'], [False, 'Tidak, Saya ingin melanjutkan permainan'], ], widget=widgets.RadioSelect, label='

Apakah Anda yakin untuk keluar dari permainan ini?

' ) belief_elicit_1 = models.StringField( label='

Menurut Anda, bagaimana peluang munculnya Kepala dan Ekor dalam permainan ini?

', choices=[ ['Equal', 'Keduanya memiliki peluang yang sama'], ['Heads', 'Kepala muncul lebih sering'], ['Tails', 'Ekor muncul lebih sering'], ['Not Sure', 'Saya tidak yakin'] ], widget=widgets.RadioSelect, ) belief_elicit_2 = models.IntegerField( label='

Menurut perkiraan Anda, dari 100 ronde, berapa kali koin akan menunjukkan Kepala?

', choices=list(range(101)) )