From 5136233c2ba1523e033ff7b3704dc8eef6e8e6eb Mon Sep 17 00:00:00 2001 From: Kyler Olsen Date: Fri, 10 May 2024 13:58:45 -0600 Subject: [PATCH] Add game.py --- game.py | 227 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 227 insertions(+) create mode 100644 game.py diff --git a/game.py b/game.py new file mode 100644 index 0000000..5e227f6 --- /dev/null +++ b/game.py @@ -0,0 +1,227 @@ +# 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"