Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Outcome:
- def __init__(self, probability, health_array):
- self.probability = probability
- self.health_array = health_array
- def get_outcomes(self, in_array, move):
- outcomes = []
- if self.health_array[move] == 0:
- outcomes.append(self)
- return outcomes
- attacker = in_array[move]
- enemy_count = 0
- for i in range(len(in_array)):
- defender = in_array[i]
- if attacker.teamid != defender.teamid:
- enemy_count += 1
- for i in range(len(in_array)):
- defender = in_array[i]
- if i == move or attacker.teamid == defender.teamid:
- continue
- if self.health_array[i] == 0:
- win_probability = self.probability * attacker.attack(defender) * (1 / enemy_count)
- win_health_array = self.health_array.copy()
- outcomes.append(Outcome(win_probability, win_health_array))
- continue
- win_probability = self.probability * attacker.attack(defender) * (1 / enemy_count)
- win_health_array = self.health_array.copy()
- win_health_array[i] -= 1
- outcomes.append(Outcome(win_probability, win_health_array))
- loose_probability = self.probability * (1 - attacker.attack(defender)) * (1 / enemy_count)
- loose_health_array = self.health_array.copy()
- outcomes.append(Outcome(loose_probability, loose_health_array))
- return outcomes
- def play_round(in_array):
- probs = [Outcome(1, [3 for _ in range(len(in_array))])]
- probs_buff = []
- for i in range(len(in_array)):
- for j in range(len(probs)):
- buff = probs[j].get_outcomes(in_array, i)
- probs_buff.extend(buff)
- probs = probs_buff.copy()
- probs_buff.clear()
- return probs
- if __name__ == "__main__":
- # test code
- from fighter import Fighter
- initiative = [
- Fighter("Тсия", 0, 8, 8),
- Fighter("Бедный фермер", 1, 0, 0)
- ]
- battle_outcomes = play_round(initiative)
- for i in range(len(initiative)):
- health_probs = [0, 0, 0, 0]
- for j in range(len(battle_outcomes)):
- health_probs[battle_outcomes[j].health_array[i]] += battle_outcomes[j].probability
- print(initiative[i].name)
- for j in range(4):
- print(j, "hp", round(health_probs[j] * 100, 6), "%")
Add Comment
Please, Sign In to add comment