Add rudimentary weather implementation
This commit is contained in:
parent
0ea47c1adb
commit
e647a910d8
17
games.py
17
games.py
|
@ -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
92
weather.py
Normal 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,
|
||||||
|
]
|
Loading…
Reference in a new issue