Add rudimentary weather implementation

This commit is contained in:
hillexed 2020-12-25 19:50:25 -05:00
parent 0ea47c1adb
commit e647a910d8
2 changed files with 109 additions and 2 deletions

View file

@ -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
return None

92
weather.py Normal file
View file

@ -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,
]