def __init__(self, left_player: Bot, right_player: Bot, mode: Mode = Mode.DEFAULT): self.left_player = left_player self.right_player = right_player self.state = State(left_player.team, right_player.team) if mode not in {Mode.DEFAULT, Mode.HILLMAN}: print('Wrong mode, install default mode') mode = Mode.DEFAULT self.rules = Rules(self.state, mode)
def prepare(self, mainChar: Character, otherChars: list[Character], state: State = None) -> bool: """ Prepares this Event to be triggered, assigning Characters to the Event State if they match. If any of the requirements aren't met, returns False, otherwise returns True. """ self.state = State(self.triggerCts, self.baseChance) if not state else state.sub( self.triggerCts, self.baseChance) if not self.state.doesCharExist(mainChar): return self.prepareBase(mainChar, otherChars) else: return self.prepareSub(otherChars)
def work(self): # initial state state = State() draw_state(state, State.board_size) print("") # start game while not state.has_finished(): counter_to_move = ask_to_choose_counter(state, state.get_turn(), self) new_state = ask_to_move(state, state.get_turn(), counter_to_move, self) print("") print("New State:\n") draw_state(new_state, State.board_size)
def __init__(self, name: str, texts: list[str], checkNamesToArgLists: dict[str, list[list[str]]], effectNamesToArgLists: dict[str, list[list[str]]], sub: list[Event]): self.name = name self.texts = texts self.checkSuites = [ CheckSuite(checkName, checkNamesToArgLists[checkName]) for checkName in checkNamesToArgLists ] self.effectSuites = [ EffectSuite(effectName, effectNamesToArgLists[effectName]) for effectName in effectNamesToArgLists ] self.sub = sub self.triggerCts: dict[Character, int] = {} self.state = State(self.triggerCts) self.baseChance = 100 if self.name.endswith("default"): self.baseChance = 0
def get_win_probability(left_powers: list, right_powers: list, mode: Mode): """ This function gets probability of win, if both players should choose first alive gladiators """ def get_left_win_prob(cur_state: State): if not cur_state.team_left.is_alive(): return 0 elif not cur_state.team_right.is_alive(): return 1 else: state_left_win = cur_state.__copy__() state_right_win = cur_state.__copy__() rules_left_win = Rules(state_left_win, mode) rules_right_win = Rules(state_right_win, mode) left_glad = cur_state.team_left[0] right_glad = cur_state.team_right[0] prob_glad_win = rules_left_win \ .get_probability_glad_win(left_glad, right_glad) rules_left_win.fight(state_left_win.team_left[0], state_left_win.team_right[0], mode='test', winner=Party.LEFT) rules_right_win.fight(state_right_win.team_left[0], state_right_win.team_right[0], mode='test', winner=Party.RIGHT) return prob_glad_win[0] * get_left_win_prob(rules_left_win.state) \ + prob_glad_win[1] * get_left_win_prob(rules_right_win.state) left_team = Team(powers=left_powers) right_team = Team(powers=right_powers) prob_left_win = get_left_win_prob(State(left_team, right_team)) return prob_left_win, 1 - prob_left_win