From e647a910d8b6d60f70b1f905a30a10b3368c96af Mon Sep 17 00:00:00 2001 From: hillexed Date: Fri, 25 Dec 2020 19:50:25 -0500 Subject: [PATCH] Add rudimentary weather implementation --- games.py | 19 +++++++++-- weather.py | 92 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 109 insertions(+), 2 deletions(-) create mode 100644 weather.py diff --git a/games.py b/games.py index b0c79b9..74fc3c4 100644 --- a/games.py +++ b/games.py @@ -1,6 +1,7 @@ import json, random, os, math, jsonpickle from enum import Enum import database as db +import weather def config(): if not os.path.exists("games_config.json"): @@ -127,10 +128,14 @@ class game(object): self.last_update = None self.owner = None self.ready = False + self.weather = None if length is not None: self.max_innings = length else: self.max_innings = config()["default_length"] + # choose weather + if random.random() > 0.5: + self.weather = random.choice(weather.all_weathers)() self.bases = {1 : None, 2 : None, 3 : None} @@ -302,7 +307,16 @@ class game(object): def batterup(self): scores_to_add = 0 - result = self.at_bat() + + if not self.weather: + result = self.at_bat() + else: + weatheraction = self.weather.activate(self) + if weatheraction: + result = weatheraction + else: + result = self.at_bat() + self.get_batter() if self.top_of_inning: offense_team = self.teams["away"] @@ -313,6 +327,7 @@ class game(object): defense_team = self.teams["away"] defender = random.choice(self.teams["away"].lineup) + if result["ishit"]: #if batter gets a hit: self.get_batter().game_stats["hits"] += 1 self.get_pitcher().game_stats["hits_allowed"] += 1 @@ -469,4 +484,4 @@ def save_team(this_team): db.save_team(this_team.name, team_json_string) return True except: - return None \ No newline at end of file + return None diff --git a/weather.py b/weather.py new file mode 100644 index 0000000..270ee93 --- /dev/null +++ b/weather.py @@ -0,0 +1,92 @@ +import random +class Weather: + def __init__(self): + self.name = "None" + def activate(self, game, result): + pass + +class Sun2(Weather): + def __init__(self): + self.name = "Sun 2" + def activate(self, game): + for teamtype in game.teams: + team = game.teams[teamtype] + if team.score >= 10: + team.score -= 10 + # no win counting yet :( + result = { + "text": "The {} collect 10! Sun 2 smiles.".format(team.name) + } + return result + return None + +class NameSwappyWeather(Weather): + def __init__(self): + self.name = "Literacy" + self.activation_chance = 0.01 + def activate(self, game): + if random.random() < self.activation_chance: + teamtype = random.choice(["away","home"]) + team = game.teams[teamtype] + player = random.choice(team.lineup) + old_player_name = player.name + if ' ' in player.name: + names = player.name.split(" ") + first_first_letter = names[0][0] + last_first_letter = names[-1][0] + names[0][0] = last_first_letter + names[-1][0] = first_first_letter + player.name = ' '.join(names) + else: + #name is one word, so turn 'bartholemew' into 'martholebew' + first_letter = player.name[0] + last_letter = player.name[-1] + player.name[0] = last_letter + player.name[-1] = first_letter + + result = { + "text": "{} is Literate! {} is now {}!".format(old_player_name,old_player_name, player.name) + } + return result + return None + +class Feedback(Weather): + def __init__(self): + self.activation_chance = 0.01 + self.swap_batter_vs_pitcher_chance = 0.8 + def activate(self, game): + if random.random() < self.activation_chance: + # feedback time + result = {} + player1 = None + player2 = None + if random.random() < self.swap_batter_vs_pitcher_chance: + # swapping batters + # theoretically this could swap players already on base :( + homePlayerIndex = random.randint(len(teams["home"].lineup)) + awayPlayerIndex = random.randint(len(teams["away"].lineup)) + + homePlayer = teams["home"].lineup[homePlayerIndex] + awayPlayer = teams["away"].lineup[awayPlayerIndex] + + teams["home"].lineup[homePlayerIndex] = awayPlayer + teams["away"].lineup[awayPlayerIndex] = homePlayer + else: + # swapping pitchers + player1 = teams["home"].pitcher + player2 = teams["away"].pitcher + teams["home"].set_pitcher(player2) + teams["away"].set_pitcher(player1) + + result = { + "text": "{} and {} switched teams in the feedback!".format(player1.name,player2.name), + } + return result + return None + + +all_weathers = [ + Sun2, + Feedback, +# NameSwappyWeather, + ]