Add game.py

This commit is contained in:
Kyler Olsen 2024-05-10 13:58:45 -06:00
parent 4a332b6f7a
commit 5136233c2b
1 changed files with 227 additions and 0 deletions

227
game.py Normal file
View File

@ -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"