@@ -15,213 +15,3 @@ def __init__(self):
1515 def get_glyph (self ):
1616 pass
1717
18- class ShipStarbase (AbsShip ):
19-
20- def __init__ (self ):
21- super ().__init__ ()
22-
23- def get_glyph (self ):
24- return Glyphs .STARBASE
25-
26- @staticmethod
27- def dock_enterprise (ship ):
28- ship .energy = 3000
29- ship .photon_torpedoes = 10
30- ship .navigation_damage = 0
31- ship .short_range_scan_damage = 0
32- ship .long_range_scan_damage = 0
33- ship .shield_control_damage = 0
34- ship .computer_damage = 0
35- ship .photon_damage = 0
36- ship .phaser_damage = 0
37- ship .shield_level = 0
38- ship .docked = True
39-
40- @staticmethod
41- def launch_enterprise (ship ):
42- ship .docked = False
43-
44-
45- class ShipEnterprise (AbsShip ):
46-
47- def __init__ (self ):
48- super ().__init__ ()
49- self .energy = 0
50- self .docked = False
51- self .condition = "GREEN"
52- self .navigation_damage = 0
53- self .short_range_scan_damage = 0
54- self .long_range_scan_damage = 0
55- self .shield_control_damage = 0
56- self .computer_damage = 0
57- self .photon_damage = 0
58- self .phaser_damage = 0
59- self .photon_torpedoes = 0
60- ShipStarbase .dock_enterprise (self )
61- ShipStarbase .launch_enterprise (self )
62-
63- def get_glyph (self ):
64- return Glyphs .ENTERPRISE
65-
66- def damage (self , game , item ):
67- '''
68- Damage the Enterprise.
69- '''
70- if game .is_testing :
71- return
72- if random .randint (0 , 6 ) > 0 :
73- return
74- damage = 1 + random .randint (0 , 4 )
75- if item < 0 :
76- item = random .randint (0 , 6 )
77- if item == 0 :
78- self .navigation_damage = damage
79- game .display (Quips .jibe_damage ('Warp Engines' ))
80- elif item == 1 :
81- self .short_range_scan_damage = damage
82- game .display (Quips .jibe_damage ('Short Range Scanners' ))
83- elif item == 2 :
84- self .long_range_scan_damage = damage
85- game .display (Quips .jibe_damage ('Long Range Scanners' ))
86- elif item == 3 :
87- self .shield_control_damage = damage
88- game .display (Quips .jibe_damage ('Shield Controls' ))
89- elif item == 4 :
90- self .computer_damage = damage
91- game .display (Quips .jibe_damage ('Main Computer' ))
92- elif item == 5 :
93- self .photon_damage = damage
94- game .display (Quips .jibe_damage ('Photon Torpedo Controls' ))
95- elif item == 6 :
96- self .phaser_damage = damage
97- game .display (Quips .jibe_damage ('Phasers' ))
98- game .display ()
99-
100- def repair (self , game ):
101- '''
102- Repair damage to the Enterprise.
103- '''
104- if self .navigation_damage > 0 :
105- self .navigation_damage -= 1
106- if self .navigation_damage == 0 :
107- game .display ("Warp engines have been repaired." )
108- game .display ()
109- return True
110- if self .short_range_scan_damage > 0 :
111- self .short_range_scan_damage -= 1
112- if self .short_range_scan_damage == 0 :
113- game .display ("Short range scanner has been repaired." )
114- self .display ()
115- return True
116- if self .long_range_scan_damage > 0 :
117- self .long_range_scan_damage -= 1
118- if self .long_range_scan_damage == 0 :
119- game .display ("Long range scanner has been repaired." )
120- game .display ()
121- return True
122- if self .shield_control_damage > 0 :
123- self .shield_control_damage -= 1
124- if self .shield_control_damage == 0 :
125- game .display ("Shield controls have been repaired." )
126- game .display ()
127- return True
128- if self .computer_damage > 0 :
129- self .computer_damage -= 1
130- if self .computer_damage == 0 :
131- game .display ("The main computer has been repaired." )
132- game .display ()
133- return True
134- if self .photon_damage > 0 :
135- self .photon_damage -= 1
136- if self .photon_damage == 0 :
137- game .display ("Photon torpedo controls have been repaired." )
138- game .display ()
139- return True
140- if self .phaser_damage > 0 :
141- self .phaser_damage -= 1
142- if self .phaser_damage == 0 :
143- game .display ("Phasers have been repaired." )
144- game .display ()
145- return True
146- return False
147-
148- def short_range_scan (self , game ):
149- if self .short_range_scan_damage > 0 :
150- game .display (Quips .jibe_damage ('Short Ranged Scanners' ))
151- game .display ()
152- else :
153- quad = game .game_map .quad ()
154- Quadrant .display_area (game , quad )
155- game .display ()
156-
157- def long_range_scan (self , game ):
158- if self .long_range_scan_damage > 0 :
159- game .display (Quips .jibe_damage ('Long Ranged Scanners' ))
160- game .display ()
161- return
162- sb = ""
163- pw_sector = game .game_map .sector
164- if pw_sector < 5 :
165- pw_sector = 6
166- elif pw_sector > 59 :
167- pw_sector = 59
168- dots = None
169- for peek in range (pw_sector - 5 , pw_sector + 6 ):
170- quad = game .game_map .scan_quad (peek )
171- lines = \
172- (f"| Sector: { quad .number :>02} " ,
173- f"Enemies: { quad .klingons :>02} " ,
174- f"Bases: { quad .starbases :>02} " ,
175- f"Stars: { quad .stars :>03} |" )
176- str_ = ' | ' .join (lines )
177- dots = '-' * len (str_ ) + "\n "
178- sb += dots
179- sb += str_
180- game .display (sb )
181- sb = ""
182- game .display (dots )
183- game .display ()
184-
185-
186- class ShipKlingon (AbsShip ):
187-
188- def __init__ (self ):
189- super ().__init__ ()
190- self .xpos = 0
191- self .ypos = 0
192- self .shield_level = 0
193-
194- def get_glyph (self ):
195- return Glyphs .KLINGON
196-
197- def from_map (self , xpos , ypos ):
198- self .xpos = xpos
199- self .ypos = ypos
200- self .shield_level = 300 + random .randint (0 , 199 )
201-
202- @staticmethod
203- def attack (game ):
204- from Calculators import Calc
205- kships = game .game_map .get_area_klingons ()
206- if len (kships ) > 0 :
207- for ship in kships :
208- if game .enterprise .docked :
209- game .display ("Enterprise hit by ship at sector [{0},{1}]. No damage due to starbase shields." .format (
210- ship .xpos + 1 , ship .ypos + 1
211- ))
212- else :
213- dist = Calc .distance (
214- game .game_map .xpos , game .game_map .ypos , ship .xpos , ship .ypos )
215- delivered_energy = 300 * \
216- random .uniform (0.0 , 1.0 ) * (1.0 - dist / 11.3 )
217- game .enterprise .shield_level -= int (delivered_energy )
218- if game .enterprise .shield_level < 0 :
219- game .enterprise .shield_level = 0
220- game .destroyed = True
221- game .display ("Enterprise hit by ship at sector [{0},{1}]. Shields dropped to {2}." .format (
222- ship .xpos + 1 , ship .ypos + 1 , game .enterprise .shield_level
223- ))
224- if game .enterprise .shield_level == 0 :
225- return True
226- return True
227- return False
0 commit comments