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 import json, random, os, math, jsonpickle
from enum import Enum from enum import Enum
import database as db import database as db
import weather
def config(): def config():
if not os.path.exists("games_config.json"): if not os.path.exists("games_config.json"):
@ -127,10 +128,14 @@ class game(object):
self.last_update = None self.last_update = None
self.owner = None self.owner = None
self.ready = False self.ready = False
self.weather = None
if length is not None: if length is not None:
self.max_innings = length self.max_innings = length
else: else:
self.max_innings = config()["default_length"] 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} self.bases = {1 : None, 2 : None, 3 : None}
@ -302,7 +307,16 @@ class game(object):
def batterup(self): def batterup(self):
scores_to_add = 0 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() self.get_batter()
if self.top_of_inning: if self.top_of_inning:
offense_team = self.teams["away"] offense_team = self.teams["away"]
@ -313,6 +327,7 @@ class game(object):
defense_team = self.teams["away"] defense_team = self.teams["away"]
defender = random.choice(self.teams["away"].lineup) defender = random.choice(self.teams["away"].lineup)
if result["ishit"]: #if batter gets a hit: if result["ishit"]: #if batter gets a hit:
self.get_batter().game_stats["hits"] += 1 self.get_batter().game_stats["hits"] += 1
self.get_pitcher().game_stats["hits_allowed"] += 1 self.get_pitcher().game_stats["hits_allowed"] += 1

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