# Example python code based on parts of game.js import math import random train = { 'dis': 0, 'paused': False, 'stopped': False, 'river': False, 'delayed': False, 'resting': False, 'tavelingTo': 0 } class Date: def __init__(self): self.months = ["Maytember", "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"] self.weekdays = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"] def year(self, d): y = 2 while (d >= 365 and (y) % 4 != 0) or d >= 366: if y % 4 == 0: d -= 366 else: d -= 365 y += 1 y += 1844 return y def day_of_year(self, d): y = 2 while (d >= 365 and (y) % 4 != 0) or d >= 366: if y % 4 == 0: d -= 366 else: d -= 365 y += 1 return d def month(self, day): m = 0 d = self.day_of_year(day) + 1 if self.year(day) % 4 == 0: if d <= 31: m = 1 elif d <= 60: m = 2 elif d <= 91: m = 3 elif d <= 121: m = 4 elif d <= 152: m = 5 elif d <= 182: m = 6 elif d <= 213: m = 7 elif d <= 244: m = 8 elif d <= 274: m = 9 elif d <= 305: m = 10 elif d <= 335: m = 11 elif d <= 366: m = 12 else: if d <= 31: m = 1 elif d <= 59: m = 2 elif d <= 90: m = 3 elif d <= 120: m = 4 elif d <= 151: m = 5 elif d <= 181: m = 6 elif d <= 212: m = 7 elif d <= 243: m = 8 elif d <= 273: m = 9 elif d <= 304: m = 10 elif d <= 334: m = 11 elif d <= 365: m = 12 return m def day_of_month(self, day): d = self.day_of_year(day) + 1 if self.year(day) % 4 == 0: if d <= 31: pass elif d <= 60: d -= 31 elif d <= 91: d -= 60 elif d <= 121: d -= 91 elif d <= 152: d -= 121 elif d <= 182: d -= 152 elif d <= 213: d -= 182 elif d <= 244: d -= 213 elif d <= 274: d -= 244 elif d <= 305: d -= 274 elif d <= 335: d -= 305 elif d <= 366: d -= 335 else: if d <= 31: pass elif d <= 59: d -= 31 elif d <= 90: d -= 59 elif d <= 120: d -= 90 elif d <= 151: d -= 120 elif d <= 181: d -= 151 elif d <= 212: d -= 181 elif d <= 243: d -= 212 elif d <= 273: d -= 243 elif d <= 304: d -= 273 elif d <= 334: d -= 304 elif d <= 365: d -= 334 return d def day_of_week(self, day): y = self.year(day) leap = 0 if y % 4 == 0: leap = 1 return ((2 + y + (y // 4) - (y // 100) + (y // 400) - 2 - leap) + self.day_of_year(day)) % 7 def printed_date(self, day): return f"{self.weekdays[self.day_of_week(day)]}, {self.months[self.month(day)]} {str(self.day_of_month(day))}, {str(self.year(day))}" date = Date() class Weather: def __init__(self): self.seeds = [random.random() / 1, random.random() / 1, random.random() / 1, random.random() / 1, random.random() / 1, random.random() / 1] def temperature(self, day): month = date.month(day) temp = [-10, 30, 40, 50, 60, 70, 80, 90, 80, 70, 60, 50, 40] return ((math.sin(day * self.seeds[0] + self.seeds[1]) * math.cos(day * self.seeds[2] + self.seeds[3]) * -10) + (math.sin(day * self.seeds[4] + self.seeds[5]) * 1)) + temp[month] def clouds(self, day): return ((math.sin(day * self.seeds[0] + self.seeds[1]) * math.cos(day * self.seeds[2] + self.seeds[3])) + 1) / 2 def print_weather(self, day): if self.clouds(day) > 0.98: return "Hail" elif self.clouds(day) > 0.95: if self.temperature(day) >= 40: return "Heavy Rain" else: return "Blizzard" elif self.clouds(day) > 0.85: if self.temperature(day) >= 40: return "Rain" else: return "Snow" elif self.clouds(day) > 0.75: return "Partly Cloudy" elif self.clouds(day) > 0.50: return "Mostly Sunny" else: return "Sunny" def print_temperature(self, day): if self.temperature(day) > 100: return "Extremely Hot" elif self.temperature(day) > 85: return "Hot" elif self.temperature(day) > 55: return "Warm" elif self.temperature(day) > 20: return "Cold" else: return "Extremely Cold" weather = Weather() def next_landmark_index(landmarks, train_distance): for i, landmark in enumerate(landmarks): if landmark['distance'] > train_distance: return i if landmarks[-1]['distance'] < train_distance: return len(landmarks) - 1 else: return 0 def next_landmark(landmarks, train_distance): index = next_landmark_index(landmarks, train_distance) return landmarks[index] def paused_text(train_status): if train_status['paused']: return "Play" elif train_status['stopped'] or train_status['river']: return "Continue" else: return "Pause"