from otree.api import Currency as c, currency_range, SubmissionMustFail from . import pages from ._builtin import Bot from .models import Constants class PlayerBot(Bot): cases = [ {'offer': c(0), 'return': c(0), 'p1_payoff': c(10), 'p2_payoff': c(0)}, {'offer': c(5), 'return': c(10), 'p1_payoff': c(15), 'p2_payoff': c(5)}, {'offer': c(10), 'return': c(30), 'p1_payoff': c(30), 'p2_payoff': c(0)} ] def play_round(self): case = self.case if self.player.id_in_group == 1: yield (pages.Send, {"sent_amount": case['offer']}) else: for invalid_return in [-1, case['offer'] * Constants.multiplier + 1]: yield SubmissionMustFail(pages.SendBack, {'sent_back_amount': invalid_return}) yield (pages.SendBack, {'sent_back_amount': case['return']}) if self.player.id_in_group == 1: expected_payoff = case['p1_payoff'] else: expected_payoff = case['p2_payoff'] assert self.player.payoff == expected_payoff