Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import random
- import operator
- class Game():
- def __init__(self):
- self.wars = []
- self.place_trophies = [25, 20, 15, 10, 5, 5, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- -5, -5, -5, -5, -5, -5, -5, -5, -5, -5,
- -5, -5, -5, -5, -5, -5, -5, -5, -5, -5,
- -5, -5, -5, -5, -5, -10, -10, -10, -10, -10,
- -10, -10, -10, -10, -10, -10, -10, -10, -10, -10,
- -10, -10, -10, -10, -10, -10, -10, -10, -10, -10,
- -20, -20, -20, -20, -20, -25, -25, -25, -25, -25]
- for _ in range(100):
- self.wars.append(War(self.place_trophies))
- def war_day(self, noprint=False):
- for war in self.wars:
- war.war_day(noprint)
- def sort(self, arg, listt):
- listt.sort(key=operator.attrgetter(arg), reverse=True)
- def get_num_0(self):
- all0 = []
- for war in self.wars:
- for clan in war.clans:
- if clan.trophies == 0:
- all0.append(clan)
- return all0
- def get_num_wins(self):
- wins = []
- for war in self.wars:
- for clan in war.clans:
- all0.append(clan.total_wins)
- wins.sort()
- return wins
- def pprint(self):
- all = []
- for war in self.wars:
- for i in range(100):
- all.append(war.clans[i])
- self.sort('trophies', all)
- print(all)
- class War():
- def __init__(self, place_trophies):
- self.clans = []
- self.place_trophies = place_trophies
- self.num_wars = 0
- for _ in range(100):
- self.clans.append(Clan())
- def sort(self, arg):
- self.clans.sort(key=operator.attrgetter(arg), reverse=True)
- #return sorted(self.clans, key=operator.attrgetter(arg))
- def war_day(self, noprint):
- for clan in self.clans:
- clan.war_day()
- self.sort('wins')
- for i in range(100):
- self.clans[i].trophies += self.clans[i].wins + self.place_trophies[i]
- if self.clans[i].trophies < 0:
- self.clans[i].trophies = 0
- self.clans[i].day_3()
- self.sort('trophies')
- if not noprint:
- print(self.clans, '\n\n')
- self.num_wars += 1
- if self.num_wars % 10 == 0:
- for clan in self.clans:
- clan.new_season()
- class Clan():
- def __init__(self):
- self.players = []
- self.trophies = 0
- self.total_wins = 1
- self.wins = 0
- self.skill = random.triangular(.4, .7, .5)
- self.war_history = []
- for _ in range(int(random.triangular(35, 50, 47))):
- self.players.append(Player(self.skill))
- def war_day(self):
- num_left = 60
- for player in self.players:
- if player.battle(Player()) == 'win':
- self.wins += 1
- self.total_wins += 1
- player.wins += 1
- num_left -= 1
- sort = sorted(self.players, key=operator.attrgetter('winrate'), reverse=True)
- for player in sort[:num_left]:
- if player.battle(Player()) == 'win':
- self.wins += 1
- self.total_wins += 1
- player.wins += 1
- def day_3(self):
- data = {'wins': self.wins, 'current trophies': self.trophies}
- self.war_history.append(data)
- self.wins = 0
- def new_season(self):
- if self.trophies > 1000:
- self.trophies -= 1000
- self.trophies //= 2
- self.trophies += 1000
- def get_avg_winrate(self):
- l = []
- for p in self.players:
- l.append(p.winrate)
- return sum(l) / len(l)
- def __repr__(self):
- return f"Trophies: {self.trophies} "
- class Player():
- def __init__(self, clan_skill=.5):
- self.winrate = random.triangular(clan_skill - .2, clan_skill + .3, clan_skill)
- self.wins = 0
- def battle(self, opponent):
- if random.random() < .75: # Miss war
- return 'lose'
- if self.winrate > opponent.winrate:
- return 'win'
- elif self.winrate < opponent.winrate:
- return 'lose'
- else:
- if random.random() < .5:
- return 'win'
- else:
- return 'lose'
- game = Game()
- while True:
- key = input()
- war = game.wars[0]
- if key == '':
- game.war_day('noprint')
- print(war.num_wars)
- continue
- elif key == 'p':
- game.war_day()
- print(war.num_wars)
- continue
- elif key == 'g':
- print(len(game.get_num_0()))
- continue
- elif key == 'w':
- print(game.get_num_wins())
- continue
- elif key == 'a':
- game.pprint()
- # try:
- # print(war.clans[int(key)].war_history)
- # print(war.clans[int(key)].skill)
- # print(len(war.clans[int(key)].players))
- # print(war.clans[int(key)].get_avg_winrate())
- # except:
- # pass
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement