Add rudimentary weather implementation
This commit is contained in:
parent
0ea47c1adb
commit
e647a910d8
19
games.py
19
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
|
||||
return None
|
||||
|
|
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