/
Crewmate.py
113 lines (96 loc) · 3.37 KB
/
Crewmate.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
112
113
import csv
import random
from Gene import Gene
from Enum import Enum
Sex = Enum(['Male', 'Female'])
class Crewmate(object):
id_counter = 0
def __init__(self):
self.crew_id = Crewmate.id_counter
Crewmate.id_counter += 1
# Setting default values
self.alive = True
self.adult = False
self.name = "Unnamed"
self.set_parents()
self.sex = None
self.sterile = False
self.job = "None"
# self.training = False
self.empathy = 0
self.intelligence = 0
self.creativity = 0
self.age = 0
self.genome = [] #pairs of genes
self.traits = []
self.breeding = False
def __cmp__(self, other):
return cmp(self.get_id(), other.get_id())
def __hash__(self):
return hash(self.get_id())
def get_id(self):
return self.crew_id
def set_parents(self, dad=None, mom=None):
# Hack to let them breed
if dad is None:
dad = type('X', (object,), dict(name="Lost to the ages", crew_id=-1000*random.random()))
if mom is None:
mom = type('X', (object,), dict(name="Lost to the ages", crew_id=-1000*random.random()))
self.dad = dad
self.mom = mom
def set_sex(self, sex=None):
if sex is None:
sex = random.choice(Sex)
self.sex = sex
def set_name(self, last=None, first=None):
name_file = "names.txt"
if last is None or first is None:
with open(name_file, 'r') as f:
reader = csv.reader(f)
last_names = reader.next()
boys_names = reader.next()
girls_names = reader.next()
if last is None:
last = random.choice(last_names)
if first is None:
if self.sex is None:
print "Tried to name while sex isn't set!"
return
elif self.sex == Sex.Male:
first = random.choice(boys_names)
elif self.sex == Sex.Female:
first = random.choice(girls_names)
self.name = first+" "+last
def grow_one_year(self):
self.age += 1
if self.age == 15:
self.become_adult()
if self.sex == Sex.Female and self.age == 45:
self.sterile = True
if self.sex == Sex.Male and self.age == 65:
self.sterile = True
# self.training = False
def become_adult(self):
print self.name + " crew id:" + str(self.crew_id) + " has become an adult"
self.adult = True
for gene in self.genome:
Gene.get_dominant(gene).adult_effects(self)
def get_gamete(self):
gamete = []
for gene in self.genome:
gamete.append(random.choice(gene))
return gamete
def inherit(self):
gamete1 = self.dad.get_gamete()
gamete2 = self.mom.get_gamete()
self.genome = zip(gamete1, gamete2)
def be_born(self, dad=None, mom=None):
self.set_parents(dad, mom)
last_name = mom.name.split(' ')[1]
self.set_sex()
self.set_name(last_name)
self.inherit()
for gene in self.genome:
Gene.get_dominant(gene).birth_effects(self)
def breedable(self):
return self.adult and not self.sterile and not self.breeding