Add game.py
This commit is contained in:
parent
4a332b6f7a
commit
5136233c2b
|
@ -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"
|
Loading…
Reference in New Issue