from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c, currency_range ) import random author = 'Mingxian Jin' doc = """ Your app description """ class Constants(BaseConstants): name_in_url = 'cutcake_sequential_split_4' players_per_group = 4 num_rounds = 7 class Subsession(BaseSubsession): def creating_session(self): if self.round_number == 1: self.group_randomly() else: self.group_like_round(1) class Group(BaseGroup): splitpoint = models.IntegerField() secondcut_1 = models.IntegerField() secondcut_2 = models.IntegerField() def set_splitpoint(self): cuts = sorted([p.cut_value for p in self.get_players()]) self.splitpoint = cuts[1] players_left_part = [p for p in self.get_players() if p.cut_value <= self.splitpoint] players_min = [p for p in self.get_players() if p.cut_value == cuts[0]] two_left = random.sample(players_left_part,2) if set(players_min) <= set(two_left): for p in two_left: p.is_in_left_part = 1 else: two_left.pop(1) two_left.insert(1,players_min[0]) for p in two_left: p.is_in_left_part = 1 def find_values(self): if self.splitpoint <= 90: self.get_player_by_id(1).left_value = 0 self.get_player_by_id(1).right_value = 120 elif self.splitpoint <= 120: self.get_player_by_id(1).left_value = self.splitpoint - 90 self.get_player_by_id(1).right_value = 120 - self.get_player_by_id(1).left_value elif self.splitpoint <= 170: self.get_player_by_id(1).left_value = 30 self.get_player_by_id(1).right_value = 120 - self.get_player_by_id(1).left_value elif self.splitpoint<= 240: self.get_player_by_id(1).left_value = self.splitpoint - 170 + 30 self.get_player_by_id(1).right_value = 120 - self.get_player_by_id(1).left_value elif self.splitpoint <= 300: self.get_player_by_id(1).left_value = 100 self.get_player_by_id(1).right_value = 120 - self.get_player_by_id(1).left_value elif self.splitpoint <= 320: self.get_player_by_id(1).left_value = self.splitpoint - 300 + 100 self.get_player_by_id(1).right_value = 120 - self.get_player_by_id(1).left_value else: self.get_player_by_id(1).left_value = 120 self.get_player_by_id(1).right_value = 120 - self.get_player_by_id(1).left_value if self.splitpoint <= 110: self.get_player_by_id(2).left_value = 0 self.get_player_by_id(2).right_value = 120 - self.get_player_by_id(2).left_value elif self.splitpoint <= 140: self.get_player_by_id(2).left_value = self.splitpoint - 110 self.get_player_by_id(2).right_value = 120 - self.get_player_by_id(2).left_value elif self.splitpoint <= 170: self.get_player_by_id(2).left_value = 30 self.get_player_by_id(2).right_value = 120 - self.get_player_by_id(2).left_value elif self.splitpoint<= 210: self.get_player_by_id(2).left_value = self.splitpoint - 170 + 30 self.get_player_by_id(2).right_value = 120 - self.get_player_by_id(2).left_value elif self.splitpoint <= 280: self.get_player_by_id(2).left_value = 70 self.get_player_by_id(2).right_value = 120 - self.get_player_by_id(2).left_value elif self.splitpoint <= 320: self.get_player_by_id(2).left_value = self.splitpoint - 280 + 70 self.get_player_by_id(2).right_value = 120 - self.get_player_by_id(2).left_value elif self.splitpoint <= 350: self.get_player_by_id(2).left_value = 110 self.get_player_by_id(2).right_value = 120 - self.get_player_by_id(2).left_value elif self.splitpoint <= 360: self.get_player_by_id(2).left_value = self.splitpoint - 350 + 110 self.get_player_by_id(2).right_value = 120 - self.get_player_by_id(2).left_value else: self.get_player_by_id(2).left_value = 120 self.get_player_by_id(2).right_value = 120 - self.get_player_by_id(2).left_value if self.splitpoint <= 190: self.get_player_by_id(3).left_value = 0 self.get_player_by_id(3).right_value = 120 - self.get_player_by_id(3).left_value elif self.splitpoint <= 220: self.get_player_by_id(3).left_value = self.splitpoint - 190 self.get_player_by_id(3).right_value = 120 - self.get_player_by_id(3).left_value elif self.splitpoint <= 280: self.get_player_by_id(3).left_value = 30 self.get_player_by_id(3).right_value = 120 - self.get_player_by_id(3).left_value elif self.splitpoint <= 320: self.get_player_by_id(3).left_value = self.splitpoint - 280 + 30 self.get_player_by_id(3).right_value = 120 - self.get_player_by_id(3).left_value elif self.splitpoint <= 340: self.get_player_by_id(3).left_value = 70 self.get_player_by_id(3).right_value = 120 - self.get_player_by_id(3).left_value elif self.splitpoint <= 370: self.get_player_by_id(3).left_value = self.splitpoint - 340 + 70 self.get_player_by_id(3).right_value = 120 - self.get_player_by_id(3).left_value elif self.splitpoint <= 410: self.get_player_by_id(3).left_value = 100 self.get_player_by_id(3).right_value = 120 - self.get_player_by_id(3).left_value elif self.splitpoint <= 430: self.get_player_by_id(3).left_value = self.splitpoint - 410 + 100 self.get_player_by_id(3).right_value = 120 - self.get_player_by_id(3).left_value else: self.get_player_by_id(3).left_value = 120 self.get_player_by_id(3).right_value = 120 - self.get_player_by_id(3).left_value if self.splitpoint <= 160: self.get_player_by_id(4).left_value = 0 self.get_player_by_id(4).right_value = 120 - self.get_player_by_id(4).left_value elif self.splitpoint <= 190: self.get_player_by_id(4).left_value = self.splitpoint - 160 self.get_player_by_id(4).right_value = 120 - self.get_player_by_id(4).left_value elif self.splitpoint <= 240: self.get_player_by_id(4).left_value = 30 self.get_player_by_id(4).right_value = 120 - self.get_player_by_id(4).left_value elif self.splitpoint <= 270: self.get_player_by_id(4).left_value = self.splitpoint - 240 + 30 self.get_player_by_id(4).right_value = 120 - self.get_player_by_id(4).left_value elif self.splitpoint <= 330: self.get_player_by_id(4).left_value = 60 self.get_player_by_id(4).right_value = 120 - self.get_player_by_id(4).left_value elif self.splitpoint <= 350: self.get_player_by_id(4).left_value = self.splitpoint - 330 + 60 self.get_player_by_id(4).right_value = 120 - self.get_player_by_id(4).left_value elif self.splitpoint <= 470: self.get_player_by_id(4).left_value = 80 self.get_player_by_id(4).right_value = 120 - self.get_player_by_id(4).left_value elif self.splitpoint <= 510: self.get_player_by_id(4).left_value = self.splitpoint - 470 + 80 self.get_player_by_id(4).right_value = 120 - self.get_player_by_id(4).left_value else: self.get_player_by_id(4).left_value = 120 self.get_player_by_id(4).right_value = 120 - self.get_player_by_id(4).left_value def find_leftmost(self): secondcuts_1 = [p.secondcut_value for p in self.get_players() if p.is_in_left_part == 1] secondcuts_1 = sorted(secondcuts_1) self.secondcut_1 = secondcuts_1[0] players_leftmost_1 = [p for p in self.get_players() if p.is_in_left_part == 1 and p.secondcut_value <= secondcuts_1[0]] leftmostplayer_1 = random.sample(players_leftmost_1, 1) for p in leftmostplayer_1: p.is_leftmost = 1 secondcuts_2 = [p.secondcut_value for p in self.get_players() if p.is_in_left_part == 0] secondcuts_2 = sorted(secondcuts_2) self.secondcut_2 = secondcuts_2[0] players_leftmost_2 = [p for p in self.get_players() if p.is_in_left_part == 0 and p.secondcut_value <= secondcuts_2[0]] leftmostplayer_2 = random.sample(players_leftmost_2, 1) for p in leftmostplayer_2: p.is_leftmost = 1 def find_leftmostvalue_1(self): self.get_players() if self.secondcut_1 <= 90: self.get_player_by_id(1).leftmostvalue_1 = 0 elif self.secondcut_1 <= 120: self.get_player_by_id(1).leftmostvalue_1 = self.secondcut_1 - 90 elif self.secondcut_1 <= 170: self.get_player_by_id(1).leftmostvalue_1 = 30 elif self.secondcut_1 <= 240: self.get_player_by_id(1).leftmostvalue_1 = self.secondcut_1 - 170 + 30 elif self.secondcut_1 <= 300: self.get_player_by_id(1).leftmostvalue_1 = 100 elif self.secondcut_1 <= 320: self.get_player_by_id(1).leftmostvalue_1 = self.secondcut_1 - 300 + 100 else: self.get_player_by_id(1).leftmostvalue_1 = 120 if self.secondcut_1 <= 110: self.get_player_by_id(2).leftmostvalue_1 = 0 elif self.secondcut_1 <= 140: self.get_player_by_id(2).leftmostvalue_1 = self.secondcut_1 - 110 elif self.secondcut_1 <= 170: self.get_player_by_id(2).leftmostvalue_1 = 30 elif self.secondcut_1 <= 210: self.get_player_by_id(2).leftmostvalue_1 = self.secondcut_1 - 170 + 30 elif self.secondcut_1 <= 280: self.get_player_by_id(2).leftmostvalue_1 = 70 elif self.secondcut_1 <= 320: self.get_player_by_id(2).leftmostvalue_1 = self.secondcut_1 - 280 + 70 elif self.secondcut_1 <= 350: self.get_player_by_id(2).leftmostvalue_1 = 110 elif self.secondcut_1 <= 360: self.get_player_by_id(2).leftmostvalue_1 = self.secondcut_1 - 420 + 110 else: self.get_player_by_id(2).leftmostvalue_1 = 120 if self.secondcut_1 <= 190: self.get_player_by_id(3).leftmostvalue_1 = 0 elif self.secondcut_1 <= 220: self.get_player_by_id(3).leftmostvalue_1 = self.secondcut_1 - 190 elif self.secondcut_1 <= 280: self.get_player_by_id(3).leftmostvalue_1 = 30 elif self.secondcut_1 <= 320: self.get_player_by_id(3).leftmostvalue_1 = self.secondcut_1 - 280 + 30 elif self.secondcut_1 <= 340: self.get_player_by_id(3).leftmostvalue_1 = 70 elif self.secondcut_1 <= 370: self.get_player_by_id(3).leftmostvalue_1 = self.secondcut_1 - 340 + 70 elif self.secondcut_1 <= 410: self.get_player_by_id(3).leftmostvalue_1 = 100 elif self.secondcut_1 <= 430: self.get_player_by_id(3).leftmostvalue_1 = self.secondcut_1 - 410 + 100 else: self.get_player_by_id(3).leftmostvalue_1 = 120 if self.secondcut_1 <= 160: self.get_player_by_id(4).leftmostvalue_1 = 0 elif self.secondcut_1 <= 190: self.get_player_by_id(4).leftmostvalue_1 = self.secondcut_1 - 160 elif self.secondcut_1 <= 240: self.get_player_by_id(4).leftmostvalue_1 = 30 elif self.secondcut_1 <= 270: self.get_player_by_id(4).leftmostvalue_1 = self.secondcut_1 - 240 + 30 elif self.secondcut_1 <= 330: self.get_player_by_id(4).leftmostvalue_1 = 60 elif self.secondcut_1 <= 350: self.get_player_by_id(4).leftmostvalue_1 = self.secondcut_1 - 330 + 60 elif self.secondcut_1 <= 470: self.get_player_by_id(4).leftmostvalue_1 = 80 elif self.secondcut_1 <= 510: self.get_player_by_id(4).leftmostvalue_1 = self.secondcut_1 - 470 + 80 else: self.get_player_by_id(4).leftmostvalue_1 = 120 def find_leftmostvalue_2(self): self.get_players() if self.splitpoint <= 90: self.get_player_by_id(1).leftmostvalue_2 = 0 elif self.splitpoint <= 120: self.get_player_by_id(1).leftmostvalue_2 = max(self.splitpoint- 90 - self.get_player_by_id(1).leftmostvalue_1, 0) elif self.splitpoint <= 170: self.get_player_by_id(1).leftmostvalue_2 = max(30 - self.get_player_by_id(1).leftmostvalue_1, 0) elif self.splitpoint <= 240: self.get_player_by_id(1).leftmostvalue_2 = max(self.splitpoint - 170 + 30 - self.get_player_by_id(1).leftmostvalue_1, 0) elif self.splitpoint <= 300: self.get_player_by_id(1).leftmostvalue_2 = max(100 - self.get_player_by_id(1).leftmostvalue_1, 0) elif self.splitpoint <= 320: self.get_player_by_id(1).leftmostvalue_2 = max(self.splitpoint - 300 + 100 - self.get_player_by_id(1).leftmostvalue_1, 0) else: self.get_player_by_id(1).leftmostvalue_2 = 120 - self.get_player_by_id(1).leftmostvalue_1 if self.splitpoint <= 110: self.get_player_by_id(2).leftmostvalue_2 = 0 elif self.splitpoint <= 140: self.get_player_by_id(2).leftmostvalue_2 = max(self.splitpoint - 110 - self.get_player_by_id(2).leftmostvalue_1, 0) elif self.splitpoint <= 170: self.get_player_by_id(2).leftmostvalue_2 = max(30 - self.get_player_by_id(2).leftmostvalue_1, 0) elif self.splitpoint <= 210: self.get_player_by_id(2).leftmostvalue_2 = max(self.splitpoint - 170 + 30 - self.get_player_by_id(2).leftmostvalue_1, 0) elif self.splitpoint <= 280: self.get_player_by_id(2).leftmostvalue_2 = max(70 - self.get_player_by_id(2).leftmostvalue_1, 0) elif self.splitpoint <= 320: self.get_player_by_id(2).leftmostvalue_2 = max(self.splitpoint - 280 + 70 - self.get_player_by_id(2).leftmostvalue_1, 0) elif self.splitpoint <= 350: self.get_player_by_id(2).leftmostvalue_2 = max(110 - self.get_player_by_id(2).leftmostvalue_1, 0) elif self.splitpoint <= 360: self.get_player_by_id(2).leftmostvalue_2 = max(self.splitpoint - 350 + 110 - self.get_player_by_id(2).leftmostvalue_1, 0) else: self.get_player_by_id(2).leftmostvalue_2 = 120 - self.get_player_by_id(2).leftmostvalue_1 if self.splitpoint <= 190: self.get_player_by_id(3).leftmostvalue_2 = 0 elif self.splitpoint <= 220: self.get_player_by_id(3).leftmostvalue_2 = max(self.splitpoint - 190 - self.get_player_by_id(3).leftmostvalue_1, 0) elif self.splitpoint <= 280: self.get_player_by_id(3).leftmostvalue_2 = max(30 - self.get_player_by_id(3).leftmostvalue_1, 0) elif self.splitpoint <= 320: self.get_player_by_id(3).leftmostvalue_2 = max(self.splitpoint - 280 + 30 - self.get_player_by_id(3).leftmostvalue_1, 0) elif self.splitpoint <= 340: self.get_player_by_id(3).leftmostvalue_2 = max(70 - self.get_player_by_id(3).leftmostvalue_1, 0) elif self.splitpoint <= 370: self.get_player_by_id(3).leftmostvalue_2 = max(self.splitpoint - 340 + 70 - self.get_player_by_id(3).leftmostvalue_1, 0) elif self.splitpoint <= 410: self.get_player_by_id(3).leftmostvalue_2 = max(100 - self.get_player_by_id(3).leftmostvalue_1, 0) elif self.splitpoint <= 430: self.get_player_by_id(3).leftmostvalue_2 = max(self.splitpoint - 410 + 100 - self.get_player_by_id(3).leftmostvalue_1, 0) else: self.get_player_by_id(3).leftmostvalue_2 = 120 - self.get_player_by_id(3).leftmostvalue_1 if self.splitpoint <= 160: self.get_player_by_id(4).leftmostvalue_2 = 0 elif self.splitpoint <= 190: self.get_player_by_id(4).leftmostvalue_2 = max(self.splitpoint - 160 - self.get_player_by_id(4).leftmostvalue_1, 0) elif self.splitpoint <= 240: self.get_player_by_id(4).leftmostvalue_2 = max(30 - self.get_player_by_id(4).leftmostvalue_1, 0) elif self.splitpoint <= 270: self.get_player_by_id(4).leftmostvalue_2 = max(self.splitpoint - 240 + 30 - self.get_player_by_id(4).leftmostvalue_1, 0) elif self.splitpoint <= 330: self.get_player_by_id(4).leftmostvalue_2 = max(60 - self.get_player_by_id(4).leftmostvalue_1, 0) elif self.splitpoint <= 350: self.get_player_by_id(4).leftmostvalue_2 = max(self.splitpoint - 330 + 60 - self.get_player_by_id(4).leftmostvalue_1, 0) elif self.splitpoint <= 470: self.get_player_by_id(4).leftmostvalue_2 = max(80 - self.get_player_by_id(4).leftmostvalue_1, 0) elif self.splitpoint <= 510: self.get_player_by_id(4).leftmostvalue_2 = max(self.splitpoint - 470 + 80 - self.get_player_by_id(4).leftmostvalue_1, 0) else: self.get_player_by_id(4).leftmostvalue_2 = 120 - self.get_player_by_id(4).leftmostvalue_1 def find_leftmostvalue_3(self): self.get_players() if self.secondcut_2 <= 90: self.get_player_by_id(1).leftmostvalue_3 = 0 elif self.secondcut_2 <= 120: self.get_player_by_id(1).leftmostvalue_3 = max(self.secondcut_2 - 90 - self.get_player_by_id(1).leftmostvalue_1 - self.get_player_by_id(1).leftmostvalue_2, 0) elif self.secondcut_2 <= 170: self.get_player_by_id(1).leftmostvalue_3 = max(30 - self.get_player_by_id(1).leftmostvalue_1 - self.get_player_by_id(1).leftmostvalue_2, 0) elif self.secondcut_2 <= 240: self.get_player_by_id(1).leftmostvalue_3 = max(self.secondcut_2 - 170 + 30 - self.get_player_by_id(1).leftmostvalue_1 - self.get_player_by_id(1).leftmostvalue_2, 0) elif self.secondcut_2 <= 300: self.get_player_by_id(1).leftmostvalue_3 = max(100 - self.get_player_by_id(1).leftmostvalue_1 - self.get_player_by_id(1).leftmostvalue_2, 0) elif self.secondcut_2 <= 320: self.get_player_by_id(1).leftmostvalue_3 = max(self.secondcut_2 - 300 + 100 - self.get_player_by_id(1).leftmostvalue_1 - self.get_player_by_id(1).leftmostvalue_2, 0) else: self.get_player_by_id(1).leftmostvalue_3 = 120 - self.get_player_by_id(1).leftmostvalue_1 - self.get_player_by_id(1).leftmostvalue_2 if self.secondcut_2 <= 110: self.get_player_by_id(2).leftmostvalue_3 = 0 elif self.secondcut_2 <= 140: self.get_player_by_id(2).leftmostvalue_3 = max(self.secondcut_2 - 110 - self.get_player_by_id(2).leftmostvalue_1 - self.get_player_by_id(2).leftmostvalue_2, 0) elif self.secondcut_2 <= 170: self.get_player_by_id(2).leftmostvalue_3 = max(30 - self.get_player_by_id(2).leftmostvalue_1 - self.get_player_by_id(2).leftmostvalue_2, 0) elif self.secondcut_2 <= 210: self.get_player_by_id(2).leftmostvalue_3 = max(self.secondcut_2 - 170 + 30 - self.get_player_by_id(2).leftmostvalue_1 - self.get_player_by_id(2).leftmostvalue_2, 0) elif self.secondcut_2 <= 280: self.get_player_by_id(2).leftmostvalue_3 = max(70 - self.get_player_by_id(2).leftmostvalue_1 - self.get_player_by_id(2).leftmostvalue_2, 0) elif self.secondcut_2 <= 320: self.get_player_by_id(2).leftmostvalue_3 = max(self.secondcut_2 - 280 + 70 - self.get_player_by_id(2).leftmostvalue_1 - self.get_player_by_id(2).leftmostvalue_2, 0) elif self.secondcut_2 <= 350: self.get_player_by_id(2).leftmostvalue_3 = max(110 - self.get_player_by_id(2).leftmostvalue_1 - self.get_player_by_id(2).leftmostvalue_2, 0) elif self.secondcut_2 <= 360: self.get_player_by_id(2).leftmostvalue_3 = max(self.secondcut_2 - 350 + 110 - self.get_player_by_id(2).leftmostvalue_1 - self.get_player_by_id(2).leftmostvalue_2, 0) else: self.get_player_by_id(2).leftmostvalue_3 = 120 - self.get_player_by_id(2).leftmostvalue_1 - self.get_player_by_id(2).leftmostvalue_2 if self.secondcut_2 <= 190: self.get_player_by_id(3).leftmostvalue_3 = 0 elif self.secondcut_2 <= 220: self.get_player_by_id(3).leftmostvalue_3 = max(self.secondcut_2 - 190 - self.get_player_by_id(3).leftmostvalue_1 - self.get_player_by_id(3).leftmostvalue_2, 0) elif self.secondcut_2 <= 280: self.get_player_by_id(3).leftmostvalue_3 = max(30 - self.get_player_by_id(3).leftmostvalue_1 - self.get_player_by_id(3).leftmostvalue_2, 0) elif self.secondcut_2 <= 320: self.get_player_by_id(3).leftmostvalue_3 = max(self.secondcut_2 - 280 + 30 - self.get_player_by_id(3).leftmostvalue_1 - self.get_player_by_id(3).leftmostvalue_2, 0) elif self.secondcut_2 <= 340: self.get_player_by_id(3).leftmostvalue_3 = max(70 - self.get_player_by_id(3).leftmostvalue_1 - self.get_player_by_id(3).leftmostvalue_2, 0) elif self.secondcut_2 <= 370: self.get_player_by_id(3).leftmostvalue_3 = max(self.secondcut_2 - 340 + 70 - self.get_player_by_id(3).leftmostvalue_1 - self.get_player_by_id(3).leftmostvalue_2, 0) elif self.secondcut_2 <= 410: self.get_player_by_id(3).leftmostvalue_3 = max(100 - self.get_player_by_id(3).leftmostvalue_1 - self.get_player_by_id(3).leftmostvalue_2, 0) elif self.secondcut_2 <= 430: self.get_player_by_id(3).leftmostvalue_3 = max(self.secondcut_2 - 410 + 100 - self.get_player_by_id(3).leftmostvalue_1 - self.get_player_by_id(3).leftmostvalue_2, 0) else: self.get_player_by_id(3).leftmostvalue_3 = 120 - self.get_player_by_id(3).leftmostvalue_1 - self.get_player_by_id(3).leftmostvalue_2 if self.secondcut_2 <= 160: self.get_player_by_id(4).leftmostvalue_3 = 0 elif self.secondcut_2 <= 190: self.get_player_by_id(4).leftmostvalue_3 = max(self.secondcut_2 - 160 - self.get_player_by_id(4).leftmostvalue_1 - self.get_player_by_id(4).leftmostvalue_2, 0) elif self.secondcut_2 <= 240: self.get_player_by_id(4).leftmostvalue_3 = max(30 - self.get_player_by_id(4).leftmostvalue_1 - self.get_player_by_id(4).leftmostvalue_2, 0) elif self.secondcut_2 <= 270: self.get_player_by_id(4).leftmostvalue_3 = max(self.secondcut_2 - 240 + 30 - self.get_player_by_id(4).leftmostvalue_1 - self.get_player_by_id(4).leftmostvalue_2, 0) elif self.secondcut_2 <= 330: self.get_player_by_id(4).leftmostvalue_3 = max(60 - self.get_player_by_id(4).leftmostvalue_1 - self.get_player_by_id(4).leftmostvalue_2, 0) elif self.secondcut_2 <= 350: self.get_player_by_id(4).leftmostvalue_3 = max(self.secondcut_2 - 330 + 60 - self.get_player_by_id(4).leftmostvalue_1 - self.get_player_by_id(4).leftmostvalue_2, 0) elif self.secondcut_2 <= 470: self.get_player_by_id(4).leftmostvalue_3 = max(80 - self.get_player_by_id(4).leftmostvalue_1 - self.get_player_by_id(4).leftmostvalue_2, 0) elif self.secondcut_2 <= 510: self.get_player_by_id(4).leftmostvalue_3 = max(self.secondcut_2 - 470 + 80 - self.get_player_by_id(4).leftmostvalue_1 - self.get_player_by_id(4).leftmostvalue_2, 0) else: self.get_player_by_id(4).leftmostvalue_3 = 120 - self.get_player_by_id(4).leftmostvalue_1 - self.get_player_by_id(4).leftmostvalue_2 class Player(BasePlayer): cut_value = models.IntegerField(initial=0) is_in_left_part = models.IntegerField(initial=0) left_value = models.IntegerField() right_value = models.IntegerField() secondcut_value = models.IntegerField() is_leftmost = models.IntegerField(initial=0) leftmostvalue_1 = models.IntegerField() leftmostvalue_2 = models.IntegerField() leftmostvalue_3 = models.IntegerField() whatsleft = models.IntegerField() envy = models.BooleanField() payoff_help = models.CurrencyField(initial= 0) planned_leftpiece_1 = models.IntegerField() truth_telling_1st_stage = models.BooleanField() planned_leftpiece_2 = models.IntegerField() truth_telling_2nd_stage = models.BooleanField() def get_whatsleft(self): self.whatsleft = 120 - self.leftmostvalue_1 - self.leftmostvalue_2 - self.leftmostvalue_3 def get_payoff(self): if self.is_in_left_part == 1 and self.is_leftmost == 1: self.payoff = c(self.leftmostvalue_1) elif self.is_in_left_part == 1 and self.is_leftmost == 0: self.payoff = c(self.leftmostvalue_2) elif self.is_in_left_part == 0 and self.is_leftmost == 1: self.payoff = c(self.leftmostvalue_3) else: self.payoff = c(self.whatsleft) def set_envy(self): if self.is_in_left_part == 1 and self.is_leftmost == 1: if self.leftmostvalue_1 >= self.leftmostvalue_2 and self.leftmostvalue_1 >= self.leftmostvalue_3 and self.leftmostvalue_1 >= self.whatsleft: self.envy = False else: self.envy = True elif self.is_in_left_part == 1 and self.is_leftmost == 0: if self.leftmostvalue_2 >= self.leftmostvalue_1 and self.leftmostvalue_2 >= self.leftmostvalue_3 and self.leftmostvalue_2 >= self.whatsleft: self.envy = False else: self.envy = True elif self.is_in_left_part == 0 and self.is_leftmost == 1: if self.leftmostvalue_3 >= self.leftmostvalue_1 and self.leftmostvalue_3 >= self.leftmostvalue_2 and self.leftmostvalue_3 >= self.whatsleft: self.envy = False else: self.envy = True else: if self.whatsleft >= self.leftmostvalue_1 and self.whatsleft >= self.leftmostvalue_2 and self.whatsleft >= self.leftmostvalue_3: self.envy = False else: self.envy = True def score_calculation(self): self.payoff_help = self.in_round(1).payoff + self.in_round(2).payoff + self.in_round( 3).payoff + self.in_round(4).payoff + self.in_round(5).payoff + self.in_round(6).payoff + self.in_round( 7).payoff def set_planned_leftpiece_1(self): if self.id_in_group == 1: if self.cut_value <= 90: self.planned_leftpiece_1 = 0 elif self.cut_value <= 120: self.planned_leftpiece_1 = self.cut_value - 90 elif self.cut_value <= 170: self.planned_leftpiece_1 = 30 elif self.cut_value <= 240: self.planned_leftpiece_1 = self.cut_value - 170 + 30 elif self.cut_value <= 300: self.planned_leftpiece_1 = 100 elif self.cut_value <= 320: self.planned_leftpiece_1 = self.cut_value - 300 + 100 else: self.planned_leftpiece_1 = 120 if self.id_in_group == 2: if self.cut_value <= 110: self.planned_leftpiece_1 = 0 elif self.cut_value <= 140: self.planned_leftpiece_1 = self.cut_value - 110 elif self.cut_value <= 170: self.planned_leftpiece_1 = 30 elif self.cut_value <= 210: self.planned_leftpiece_1 = self.cut_value - 170 + 30 elif self.cut_value <= 280: self.planned_leftpiece_1 = 70 elif self.cut_value <= 320: self.planned_leftpiece_1 = self.cut_value - 280 + 70 elif self.cut_value <= 350: self.planned_leftpiece_1 = 110 elif self.cut_value <= 360: self.planned_leftpiece_1 = self.cut_value - 350 + 110 else: self.planned_leftpiece_1 = 120 if self.id_in_group == 3: if self.cut_value <= 190: self.planned_leftpiece_1 = 0 elif self.cut_value <= 210: self.planned_leftpiece_1 = self.cut_value - 190 elif self.cut_value <= 280: self.planned_leftpiece_1 = 30 elif self.cut_value <= 320: self.planned_leftpiece_1 = self.cut_value - 280 + 30 elif self.cut_value <= 340: self.planned_leftpiece_1 = 70 elif self.cut_value <= 370: self.planned_leftpiece_1 = self.cut_value - 340 + 70 elif self.cut_value <= 410: self.planned_leftpiece_1 = 100 elif self.cut_value <= 430: self.planned_leftpiece_1 = self.cut_value - 410 + 100 else: self.planned_leftpiece_1 = 120 if self.id_in_group == 4: if self.cut_value <= 160: self.planned_leftpiece_1 = 0 elif self.cut_value <= 190: self.planned_leftpiece_1 = self.cut_value - 160 elif self.cut_value <= 240: self.planned_leftpiece_1 = 30 elif self.cut_value <= 270: self.planned_leftpiece_1 = self.cut_value - 240 + 30 elif self.cut_value <= 330: self.planned_leftpiece_1 = 60 elif self.cut_value <= 350: self.planned_leftpiece_1 = self.cut_value - 330 + 60 elif self.cut_value <= 470: self.planned_leftpiece_1 = 80 elif self.cut_value <= 510: self.planned_leftpiece_1 = self.cut_value - 470 + 80 else: self.planned_leftpiece_1 = 120 def set_truthtelling_1st_stage(self): if self.planned_leftpiece_1 >= 55 and self.planned_leftpiece_1 <= 65: self.truth_telling_1st_stage = True else: self.truth_telling_1st_stage = False def set_planned_leftpiece_2(self): if self.id_in_group == 1 and self.is_in_left_part == 1: if self.secondcut_value <= 90: rightpiece = max( 120 - self.right_value, 0) self.planned_leftpiece_2 = 120 - rightpiece - self.right_value elif self.secondcut_value <= 120: rightpiece = max( 120 - self.secondcut_value + 90 - self.right_value, 0) self.planned_leftpiece_2 = 120 - rightpiece - self.right_value elif self.secondcut_value <= 170: rightpiece = max( 90 - self.right_value, 0) self.planned_leftpiece_2 = 120 - rightpiece - self.right_value elif self.secondcut_value <= 240: rightpiece = max( 240 - self.secondcut_value + 20 - self.right_value, 0) self.planned_leftpiece_2 = 120 - rightpiece - self.right_value elif self.secondcut_value <= 300: rightpiece = max( 20 - self.right_value, 0) self.planned_leftpiece_2 = 120 - rightpiece - self.right_value elif self.secondcut_value <= 320: rightpiece = max( 320 - self.secondcut_value - self.right_value, 0) self.planned_leftpiece_2 = 120 - rightpiece - self.right_value else: rightpiece = 0 self.planned_leftpiece_2 = 120 - rightpiece - self.right_value if self.id_in_group == 1 and self.is_in_left_part == 0: if self.secondcut_value <= 90: self.planned_leftpiece_2 = 0 elif self.secondcut_value <= 120: self.planned_leftpiece_2 = max(self.secondcut_value - 90 - self.left_value, 0) elif self.secondcut_value <= 170: self.planned_leftpiece_2 = max(30 - self.left_value, 0) elif self.secondcut_value <= 240: self.planned_leftpiece_2 = max(self.secondcut_value - 170 + 30 - self.left_value, 0) elif self.secondcut_value <= 300: self.planned_leftpiece_2 = max(100 - self.left_value, 0) elif self.secondcut_value <= 320: self.planned_leftpiece_2 = max(self.secondcut_value - 300 + 100 - self.left_value, 0) else: self.planned_leftpiece_2 = max(120 - self.left_value, 0) if self.id_in_group == 2 and self.is_in_left_part == 1: if self.secondcut_value <= 110: rightpiece = max(120 - self.right_value, 0) self.planned_leftpiece_2 = 120 - rightpiece - self.right_value elif self.secondcut_value <= 140: rightpiece = max(140 - self.secondcut_value + 90 - self.right_value, 0) self.planned_leftpiece_2 = 120 - rightpiece - self.right_value elif self.secondcut_value <= 170: rightpiece = max(90 - self.right_value, 0) self.planned_leftpiece_2 = 120 - rightpiece - self.right_value elif self.secondcut_value <= 210: rightpiece = max(210 - self.secondcut_value + 50 - self.right_value, 0) self.planned_leftpiece_2 = 120 - rightpiece - self.right_value elif self.secondcut_value <= 280: rightpiece = max(50 - self.right_value, 0) self.planned_leftpiece_2 = 120 - rightpiece - self.right_value elif self.secondcut_value <= 320: rightpiece = max(320 - self.secondcut_value + 10 - self.right_value, 0) self.planned_leftpiece_2 = 120 - rightpiece - self.right_value elif self.secondcut_value <= 350: rightpiece = max(10 - self.right_value, 0) self.planned_leftpiece_2 = 120 - rightpiece - self.right_value elif self.secondcut_value <= 360: rightpiece = max(360 - self.secondcut_value - self.right_value, 0) self.planned_leftpiece_2 = 120 - rightpiece - self.right_value else: rightpiece = 0 self.planned_leftpiece_2 = 120 - rightpiece - self.right_value if self.id_in_group == 2 and self.is_in_left_part == 0: if self.secondcut_value <= 110: self.planned_leftpiece_2 = 0 elif self.secondcut_value <= 140: self.planned_leftpiece_2 = max(self.secondcut_value - 110 - self.left_value, 0) elif self.secondcut_value <= 170: self.planned_leftpiece_2 = max(30 - self.left_value, 0) elif self.secondcut_value <= 210: self.planned_leftpiece_2 = max(self.secondcut_value - 170 + 30 - self.left_value, 0) elif self.secondcut_value <= 280: self.planned_leftpiece_2 = max(70 - self.left_value, 0) elif self.secondcut_value <= 320: self.planned_leftpiece_2 = max(self.secondcut_value - 280 + 70 - self.left_value, 0) elif self.secondcut_value <= 350: self.planned_leftpiece_2 = max(110 - self.left_value, 0) elif self.secondcut_value <= 360: self.planned_leftpiece_2 = max(self.secondcut_value - 350 + 110 - self.left_value, 0) else: self.planned_leftpiece_2 = max(120 - self.left_value, 0) if self.id_in_group == 3 and self.is_in_left_part == 1: if self.secondcut_value <= 190: rightpiece = max(120 - self.right_value, 0) self.planned_leftpiece_2 = 120 - rightpiece - self.right_value elif self.secondcut_value <= 220: rightpiece = max(220 - self.secondcut_value + 90 - self.right_value, 0) self.planned_leftpiece_2 = 120 - rightpiece - self.right_value elif self.secondcut_value <= 280: rightpiece = max(90 - self.right_value, 0) self.planned_leftpiece_2 = 120 - rightpiece - self.right_value elif self.secondcut_value <= 320: rightpiece = max(320 - self.secondcut_value + 50 - self.right_value, 0) self.planned_leftpiece_2 = 120 - rightpiece - self.right_value elif self.secondcut_value <= 340: rightpiece = max(50 - self.right_value, 0) self.planned_leftpiece_2 = 120 - rightpiece - self.right_value elif self.secondcut_value <= 370: rightpiece = max(370 - self.secondcut_value + 20 - self.right_value, 0) self.planned_leftpiece_2 = 120 - rightpiece - self.right_value elif self.secondcut_value <= 410: rightpiece = max(20 - self.right_value, 0) self.planned_leftpiece_2 = 120 - rightpiece - self.right_value elif self.secondcut_value <= 430: rightpiece = max(430 - self.secondcut_value - self.right_value, 0) self.planned_leftpiece_2 = 120 - rightpiece - self.right_value else: rightpiece = 0 self.planned_leftpiece_2 = 120 - rightpiece - self.right_value if self.id_in_group == 3 and self.is_in_left_part == 0: if self.secondcut_value <= 190: self.planned_leftpiece_2 = 0 elif self.secondcut_value <= 220: self.planned_leftpiece_2 = max(self.secondcut_value - 190 - self.left_value, 0) elif self.secondcut_value <= 280: self.planned_leftpiece_2 = max(30 - self.left_value, 0) elif self.secondcut_value <= 320: self.planned_leftpiece_2 = max(self.secondcut_value - 280 + 30 - self.left_value, 0) elif self.secondcut_value <= 340: self.planned_leftpiece_2 = max(70 - self.left_value, 0) elif self.secondcut_value <= 370: self.planned_leftpiece_2 = max(self.secondcut_value - 340 + 70 - self.left_value, 0) elif self.secondcut_value <= 410: self.planned_leftpiece_2 = max(100 - self.left_value, 0) elif self.secondcut_value <= 430: self.planned_leftpiece_2 = max(self.secondcut_value - 410 + 100 - self.left_value, 0) else: self.planned_leftpiece_2 = max(120 - self.left_value, 0) if self.id_in_group == 4 and self.is_in_left_part == 1: if self.secondcut_value <= 160: rightpiece = max(120 - self.right_value, 0) self.planned_leftpiece_2 = 120 - rightpiece - self.right_value elif self.secondcut_value <= 190: rightpiece = max(190 - self.secondcut_value + 90 - self.right_value, 0) self.planned_leftpiece_2 = 120 - rightpiece - self.right_value elif self.secondcut_value <= 240: rightpiece = max(90 - self.right_value, 0) self.planned_leftpiece_2 = 120 - rightpiece - self.right_value elif self.secondcut_value <= 270: rightpiece = max(270 - self.secondcut_value + 60 - self.right_value, 0) self.planned_leftpiece_2 = 120 - rightpiece - self.right_value elif self.secondcut_value <= 330: rightpiece = max(60 - self.right_value, 0) self.planned_leftpiece_2 = 120 - rightpiece - self.right_value elif self.secondcut_value <= 350: rightpiece = max(350 - self.secondcut_value + 40 - self.right_value, 0) self.planned_leftpiece_2 = 120 - rightpiece - self.right_value elif self.secondcut_value <= 470: rightpiece = max(40 - self.right_value, 0) self.planned_leftpiece_2 = 120 - rightpiece - self.right_value elif self.secondcut_value <= 510: rightpiece = max(510 - self.secondcut_value - self.right_value, 0) self.planned_leftpiece_2 = 120 - rightpiece - self.right_value else: rightpiece = 0 self.planned_leftpiece_2 = 120 - rightpiece - self.right_value if self.id_in_group == 4 and self.is_in_left_part == 0: if self.secondcut_value <= 160: self.planned_leftpiece_2 = 0 elif self.secondcut_value <= 190: self.planned_leftpiece_2 = max(self.secondcut_value - 160 - self.left_value, 0) elif self.secondcut_value <= 240: self.planned_leftpiece_2 = max(30 - self.left_value, 0) elif self.secondcut_value <= 270: self.planned_leftpiece_2 = max(self.secondcut_value - 240 + 30 - self.left_value, 0) elif self.secondcut_value <= 330: self.planned_leftpiece_2 = max(60 - self.left_value, 0) elif self.secondcut_value <= 350: self.planned_leftpiece_2 = max(self.secondcut_value - 330 + 60 - self.left_value, 0) elif self.secondcut_value <= 470: self.planned_leftpiece_2 = max(80 - self.left_value, 0) elif self.secondcut_value <= 510: self.planned_leftpiece_2 = max(self.secondcut_value - 470 + 80 - self.left_value, 0) else: self.planned_leftpiece_2 = max(120 - self.left_value, 0) def set_truthtelling_2nd_stage(self): if self.is_in_left_part == 1: if self.planned_leftpiece_2 >= int(self.left_value/2) - 5 and self.planned_leftpiece_2 <= int(self.left_value/2) + 5 : self.truth_telling_2nd_stage = True else: self.truth_telling_2nd_stage = False elif self.is_in_left_part == 0: if self.planned_leftpiece_2 >= int(self.right_value / 2) - 5 and self.planned_leftpiece_2 <= int( self.right_value / 2) + 5: self.truth_telling_2nd_stage = True else: self.truth_telling_2nd_stage = False