from otree.api import * import random #import string import csv #import itertools doc = """ Your app description """ def set_payoff_dotspot2(player): if player.red_dotspot == 1: if player.ask_red == 1: if abs(player.percentage_red_2 - 65) < random.randint(0, 100): player.payoff_dotspot2=1 else: player.payoff_dotspot2=0 elif player.ask_red == 0: if abs(player.percentage_blue_2 - 35) < random.randint(0, 100): player.payoff_dotspot2=1 else: player.payoff_dotspot2=1 if player.red_dotspot == 0: if player.ask_red == 1: if abs(player.percentage_red_2 - 35) < random.randint(0, 100): player.payoff_dotspot2=1 else: player.payoff_dotspot2=0 elif player.ask_red == 0: if abs(player.percentage_blue_2 - 65) < random.randint(0, 100): player.payoff_dotspot2=1 else: player.payoff_dotspot2=1 ########################################################################################################### ################################## MODELS ################################ ########################################################################################################### class Constants(BaseConstants): name_in_url = 'dot_spot_2' players_per_group = None num_rounds = 1 days_single = 14 class Subsession(BaseSubsession): pass class Group(BaseGroup): pass class Player(BasePlayer): red_dotspot = models.IntegerField() ask_red = models.IntegerField() # check_slider_dotspot = models.IntegerField() HighScope = models.BooleanField() Melessa_ID = models.StringField() percentage_red_2 = models.IntegerField( label='Which percentage of the dots in the graphic were RED?', initial=None, min=0, max=100 ) percentage_blue_2 = models.IntegerField( label='Which percentage of the dots in the graphic were BLUE?', initial=None, min=0, max=100 ) payoff_dotspot2 = models.IntegerField() ########################################################################################################### ################################## PAGES ################################ ########################################################################################################### def set_red_dotspot(player): with open('dot_spot_2/static/data.csv', 'r') as df: data = csv.DictReader(df) for row in data: if player.Melessa_ID == str(row['ID']): player.red_dotspot = int(row['Red']) def set_ask(player): with open('dot_spot_2/static/data.csv', 'r') as df: data = csv.DictReader(df) for row in data: if player.Melessa_ID == str(row['ID']): player.ask_red = int(row['AskRed']) def get_scope(player): player.HighScope = player.participant.high_scope def get_id(player): player.Melessa_ID = player.participant.melessa_id ########################################################################################################### ################################## PAGES ################################ ########################################################################################################### class Part2(Page): @staticmethod def before_next_page(player, timeout_happened): return dict( Melessa_ID=get_id(player), ask_red=set_ask(player), red_dotspot=set_red_dotspot(player), ) class Instructions(Page): @staticmethod def vars_for_template(player: Player): return dict( HighScope=get_scope(player) ) class DotSpotShownRed(Page): @staticmethod def is_displayed(player: Player): return player.red_dotspot == 1 and player.HighScope == False timeout_seconds = 8 @staticmethod def vars_for_template(player: Player): return dict( HighScope=get_scope(player) ) class DotSpotShownBlue(Page): @staticmethod def is_displayed(player: Player): return player.red_dotspot == 0 and player.HighScope == False timeout_seconds = 8 @staticmethod def vars_for_template(player: Player): return dict( HighScope=get_scope(player) ) class EstimationRed(Page): @staticmethod def is_displayed(player: Player): return player.ask_red == True form_model = 'player' form_fields = ['percentage_red_2'] @staticmethod def before_next_page(player, timeout_happened): return dict( payoff_dotspot2=set_payoff_dotspot2(player), ) class EstimationBlue(Page): @staticmethod def is_displayed(player: Player): return player.ask_red == False form_model = 'player' form_fields = ['percentage_blue_2'] @staticmethod def before_next_page(player, timeout_happened): return dict( payoff_dotspot2=set_payoff_dotspot2(player), ) # @staticmethod # def error_message(player, value): # if value["check_slider_dotspot"] == None: # return 'Please use the slider to make a decision.' class LastPage2(Page): pass page_sequence = [ Part2, Instructions, DotSpotShownRed, DotSpotShownBlue, EstimationBlue, EstimationRed, LastPage2, ]