import random import time from .models import Group, Constants, Player from ._builtin import Page, WaitPage class Pair(WaitPage): group_by_arrival_time = True class InvestRound1(Page): form_model = "player" form_fields = ["invest_amount_r1"] def vars_for_template(self): self.player.start_invest = time.time() return {} class Round1Wait(WaitPage): def after_all_players_arrive(group: Group): if random.random() <= 1 / 3: group.asset_up_r1 = 1 else: group.asset_up_r1 = 0 for p in group.get_players(): if group.asset_up_r1 == 1: p.invest_profit_r1 = p.invest_amount_r1 * 3.5 else: p.invest_profit_r1 = 0 p.total_score += p.invest_profit_r1 + (100 - p.invest_amount_r1) p1, p2 = group.get_players() if p1.total_score > p2.total_score: p1.rank_r1 = "ראשון" p2.rank_r1 = "שני" elif p2.total_score > p1.total_score: p2.rank_r1 = "ראשון" p1.rank_r1 = "שני" else: p1.rank_r1 = "תיקו" p2.rank_r1 = "תיקו" class InvestRound1Results(Page): def vars_for_template(self): player = self.player group = self.group asset_stat = "הנכס הניב רווחים" if group.asset_up_r1 else "הכסף שהושקע הופסד" coins_from_saving = 100 - player.invest_amount_r1 return dict(asset_stat=asset_stat, coins_from_saving=coins_from_saving) class InvestRound2(Page): form_model = "player" form_fields = ["invest_amount_r2"] class Round2Wait(WaitPage): def after_all_players_arrive(group: Group): if random.random() <= 1 / 3: group.asset_up_r2 = 1 else: group.asset_up_r2 = 0 for p in group.get_players(): if group.asset_up_r2 == 1: p.invest_profit_r2 = p.invest_amount_r2 * 3.5 else: p.invest_profit_r2 = 0 p.total_score += p.invest_profit_r2 + (100 - p.invest_amount_r2) p1, p2 = group.get_players() if p1.total_score > p2.total_score: p1.rank_r2 = "ראשון" p2.rank_r2 = "שני" elif p2.total_score > p1.total_score: p2.rank_r2 = "ראשון" p1.rank_r2 = "שני" else: p1.rank_r2 = "תיקו" p2.rank_r2 = "תיקו" class InvestRound2Results(Page): def vars_for_template(self): player = self.player group = self.group asset_stat = "הנכס הניב רווחים" if group.asset_up_r2 else "הכסף שהושקע הופסד" coins_from_saving = 100 - player.invest_amount_r2 return dict(asset_stat=asset_stat, coins_from_saving=coins_from_saving) class InvestRound3(Page): form_model = "player" form_fields = ["invest_amount_r3"] class Round3Wait(WaitPage): def after_all_players_arrive(group: Group): if random.random() <= 1 / 3: group.asset_up_r3 = 1 else: group.asset_up_r3 = 0 for p in group.get_players(): if group.asset_up_r3 == 1: p.invest_profit_r3 = p.invest_amount_r3 * 3.5 else: p.invest_profit_r3 = 0 p.total_score += p.invest_profit_r3 + (100 - p.invest_amount_r3) p1, p2 = group.get_players() if p1.total_score > p2.total_score: p1.rank_r3 = "ראשון" p2.rank_r3 = "שני" elif p2.total_score > p1.total_score: p2.rank_r3 = "ראשון" p1.rank_r3 = "שני" else: p1.rank_r3 = "תיקו" p2.rank_r3 = "תיקו" class InvestRound3Results(Page): def vars_for_template(self): player = self.player group = self.group asset_stat = "הנכס הניב רווחים" if group.asset_up_r3 else "הכסף שהושקע הופסד" coins_from_saving = 100 - player.invest_amount_r3 return dict(asset_stat=asset_stat, coins_from_saving=coins_from_saving) class InvestRound4(Page): form_model = "player" form_fields = ["invest_amount_r4"] class Round4Wait(WaitPage): def after_all_players_arrive(group: Group): if random.random() <= 1 / 3: group.asset_up_r4 = 1 else: group.asset_up_r4 = 0 for p in group.get_players(): if group.asset_up_r4 == 1: p.invest_profit_r4 = p.invest_amount_r4 * 3.5 else: p.invest_profit_r4 = 0 p.total_score += p.invest_profit_r4 + (100 - p.invest_amount_r4) p1, p2 = group.get_players() if p1.total_score > p2.total_score: p1.rank_r4 = "ראשון" p1.payoff = Constants.higher_pay p2.rank_r4 = "שני" p2.payoff = Constants.lower_pay elif p2.total_score > p1.total_score: p2.rank_r4 = "ראשון" p2.payoff = Constants.higher_pay p1.rank_r4 = "שני" p1.payoff = Constants.lower_pay else: p1.rank_r4 = "תיקו" p2.rank_r4 = "תיקו" p1.payoff = (Constants.higher_pay + Constants.lower_pay) / 2 p2.payoff = (Constants.higher_pay + Constants.lower_pay) / 2 p1.participant.vars['total_payout'] = p1.payoff p2.participant.vars['total_payout'] = p2.payoff class InvestRound4Results(Page): def vars_for_template(self): player = self.player group = self.group asset_stat = "הנכס הניב רווחים" if group.asset_up_r4 else "הכסף שהושקע הופסד" coins_from_saving = 100 - player.invest_amount_r4 return dict(asset_stat=asset_stat, coins_from_saving=coins_from_saving) class Results(Page): pass page_sequence = [Pair, InvestRound1, Round1Wait, InvestRound1Results, InvestRound2, Round2Wait, InvestRound2Results, InvestRound3, Round3Wait, InvestRound3Results, InvestRound4, Round4Wait, InvestRound4Results, Results]