Skip to content

Commit 8077847

Browse files
committed
Added a distance-based cost for sublight navigation.
1 parent 6e00d5b commit 8077847

File tree

5 files changed

+68
-17
lines changed

5 files changed

+68
-17
lines changed

Calculators.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,18 @@ def sublight_navigation(game):
4545
game.display()
4646
return
4747

48+
49+
dist = Calc.distance(game.game_map.xpos, game.game_map.ypos,
50+
dest_sys.xpos, dest_sys.ypos)
51+
energy_required = int(dist)
52+
if energy_required >= game.enterprise.energy:
53+
game.display("Insufficient energy move to that location.")
54+
game.display()
55+
return
56+
4857
game.display()
4958
game.display("Sub-light engines engaged.")
59+
game.enterprise.energy -= energy_required
5060
game.display()
5161
game.move_to(dest_sys)
5262

@@ -81,6 +91,9 @@ def warp_navigation(game):
8191

8292
game.display()
8393

94+
if dest_sys.warp < 1:
95+
dest_sys.warp = 1
96+
8497
dist = dest_sys.warp * 8
8598
energy_required = int(dist)
8699
if energy_required >= game.enterprise.energy:

Controls.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ def computer(game):
3939
@staticmethod
4040
def phasers(game):
4141
if game.enterprise.phaser_damage > 0:
42-
game.display(Quips.jibe_damage("phasers"))
42+
game.display(Quips.jibe_damage("phaser"))
4343
game.display()
4444
return
4545
kships = game.game_map.get_area_klingons()

MapGame.py

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ def __init__(self):
2222
self.game_stars = -1
2323
self.game_klingons = -1
2424
self.game_starbases = -1
25-
self.last_nav = None
25+
self.last_nav = Dest()
2626

2727
def place(self, takers):
2828
'''
@@ -251,29 +251,34 @@ def _go_to(self, dest):
251251
'''
252252
Either a WARP ~or~ a SUBSPACE destination is ok.
253253
Place the main player (Enterprise, for now) into the Area.
254-
Returns the final, effective, player location.
254+
Returns the final, effective, arrival Dest().
255255
'''
256256
if not dest:
257257
return
258-
if self.last_nav:
258+
if not self.last_nav.is_null():
259259
self.enterprise_out()
260260
pos = None
261261
if isinstance(dest, WarpDest):
262262
if dest.sector > 0:
263263
self.sector = dest.sector
264264
dest.sector = self.sector
265265
pos = self.enterprise_in() # SAFE WARP-IN!
266+
self.last_nav.sector = dest.sector
267+
self.last_nav.warp = dest.warp
266268
else:
267269
if dest.xpos != -1:
268270
self.xpos = dest.xpos
269271
self.ypos = dest.ypos
270272
dest.xpos = self.xpos
271273
dest.ypos = self.ypos
272274
pos = self.enterprise_in(dest) # CAPIN' KNOWS BEST?
273-
self.xpos = dest.xpos = pos[0]
274-
self.ypos = dest.ypos = pos[1]
275-
self.last_nav = dest
276-
return dest
275+
dest.xpos = pos[0]
276+
dest.ypos = pos[1]
277+
self.xpos = pos[0]
278+
self.ypos = pos[1]
279+
self.last_nav.xpos = pos[0]
280+
self.last_nav.ypos = pos[1]
281+
return self.last_nav.clone()
277282

278283
def randomize(self, bases=None, stars=None, aliens=None)->None:
279284
'''

Points.py

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,3 +73,36 @@ def parse(dest, sep=','):
7373
pass
7474
return None
7575

76+
77+
class Dest(WarpDest, SubDest):
78+
79+
def __init__(self):
80+
WarpDest.__init__(self)
81+
SubDest.__init__(self)
82+
83+
def is_null(self):
84+
return self.xpos == 0 and \
85+
self.sector == -1
86+
87+
def clone(self):
88+
result = Dest()
89+
result.xpos = self.xpos
90+
result.ypos = self.ypos
91+
result.sector = self.sector
92+
result.warp = self.warp
93+
return result
94+
95+
96+
if __name__ == '__main__':
97+
test = Dest()
98+
assert(test.is_null() == True)
99+
test.xpos = test.ypos = 123
100+
test.sector = 22
101+
test.warp = 22
102+
assert(test.is_null() == False)
103+
clone = test.clone()
104+
assert(clone.sector == test.sector)
105+
assert(clone.warp == test.warp)
106+
assert(clone.xpos == test.xpos)
107+
assert(clone.ypos == test.ypos)
108+

ShipEnterprise.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -38,25 +38,25 @@ def damage(self, game, item):
3838
item = random.randint(0, 6)
3939
if item == 0:
4040
self.navigation_damage = damage
41-
game.display(Quips.jibe_damage('Warp Engines'))
41+
game.display(Quips.jibe_damage('warp engine'))
4242
elif item == 1:
4343
self.short_range_scan_damage = damage
44-
game.display(Quips.jibe_damage('Short Range Scanner'))
44+
game.display(Quips.jibe_damage('short range scanner'))
4545
elif item == 2:
4646
self.long_range_scan_damage = damage
47-
game.display(Quips.jibe_damage('Long Range Scanner'))
47+
game.display(Quips.jibe_damage('long range scanner'))
4848
elif item == 3:
4949
self.shield_control_damage = damage
50-
game.display(Quips.jibe_damage('Shield Controls'))
50+
game.display(Quips.jibe_damage('shield control'))
5151
elif item == 4:
5252
self.computer_damage = damage
53-
game.display(Quips.jibe_damage('Main Computer'))
53+
game.display(Quips.jibe_damage('main computer'))
5454
elif item == 5:
5555
self.photon_damage = damage
56-
game.display(Quips.jibe_damage('Photon Torpedo Controls'))
56+
game.display(Quips.jibe_damage('torpedo controller'))
5757
elif item == 6:
5858
self.phaser_damage = damage
59-
game.display(Quips.jibe_damage('Phasers'))
59+
game.display(Quips.jibe_damage('phaser'))
6060
game.display()
6161

6262
def repair(self, game):
@@ -109,7 +109,7 @@ def repair(self, game):
109109

110110
def short_range_scan(self, game):
111111
if self.short_range_scan_damage > 0:
112-
game.display(Quips.jibe_damage('Short Ranged Scanner'))
112+
game.display(Quips.jibe_damage('short ranged scanner'))
113113
game.display()
114114
else:
115115
quad = game.game_map.get_pw_sector()
@@ -120,7 +120,7 @@ def short_range_scan(self, game):
120120

121121
def long_range_scan(self, game):
122122
if self.long_range_scan_damage > 0:
123-
game.display(Quips.jibe_damage('Long Ranged Scanner'))
123+
game.display(Quips.jibe_damage('long ranged scanner'))
124124
game.display()
125125
return
126126

0 commit comments

Comments
 (0)