-
Notifications
You must be signed in to change notification settings - Fork 0
/
Genesis.py
111 lines (97 loc) · 2.77 KB
/
Genesis.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
import sys
from Enum import Enum
import Initial
from Jobs import Jobs
import UI
from Quest import Quest
import random
quest_list = []
def main():
genesis = Initial.test_ship()
for mate in genesis.crew:
mate.job = "Laborer"
while not (lose(genesis) or win(genesis)):
# while True:
decision_loop(genesis)
def inspect_crew(s):
answer = UI.pick_list_crew(s.crew)
if answer == -1:
return
UI.full_info(s.crew[answer])
Research = Enum(['Health', 'Safety', 'Art', 'Research', 'Engine'])
def choose_research(s):
answer = UI.list_options(Research)
s.priority = answer
def assign_job(s):
mate = UI.pick_list_crew(s.crew)
if mate == -1:
return
colorful_jobs = map(UI.color_code, Jobs)
for quest in quest_list:
colorful_jobs.append(quest.description+" "+str(quest.quest_id))
job = UI.list_options(colorful_jobs, UI.inline_print(s.crew[mate]))
if job < len(Jobs):
s.crew[mate].job = Jobs[job]
else:
index = job - len(Jobs)
s.crew[mate].job = quest_list[index].description+" "+str(quest_list[index].quest_id)
def sterilize(s):
answer = UI.pick_list_crew(s.crew)
if answer == -1:
return
s.crew[answer].sterile = True
s.happiness_penalty += 50
def euthanize(s):
answer = UI.pick_list_crew(s.crew)
if answer == -1:
return
s.crew[answer].alive = False
s.crew.remove(s.crew[answer])
s.happiness_penalty += 500
def end_turn(s):
for quest in quest_list:
quest.apply_work(s)
if quest.succeed():
quest.victory(s)
quest_list.remove(quest)
else:
quest.failure(s)
if random.random() > 0.7:
new_quest = Initial.get_random_quest()
new_quest.set_cost(s)
UI.acknowledge()
print new_quest.intro
quest_list.append(new_quest)
s.pass_turn()
UI.acknowledge()
def decision_loop(s):
main_loop = ["Inspect Crew", "Choose Research", "Assign Job", "Sterilize", "Euthanize", "End Turn"]
quest_status = ""
for quest in quest_list:
quest_status+="\n"+quest.description+", projected work: "+str(quest.count_work(s))+"/"+str(quest.cost)
answer = UI.list_options(main_loop, header=str(UI.get_stats(s)+quest_status))
if answer == 0:
inspect_crew(s)
elif answer == 1:
choose_research(s)
elif answer == 2:
assign_job(s)
elif answer == 3:
sterilize(s)
elif answer == 4:
euthanize(s)
elif answer == 5:
end_turn(s)
UI.acknowledge()
def win(s):
if s.distance <= 0:
print "You Win!"
sys.exit()
return False
def lose(s):
if s.fuel <= 0 or len(s.crew) == 0:
print "You Lose!"
sys.exit()
return False
if __name__ == "__main__":
main()