228 lines
6.2 KiB
Python
228 lines
6.2 KiB
Python
# 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"
|