return coord(self.i*other, self.j*other)
def __div__(self, other):
return coord(self.i/other, self.j/other)
+ def __mod__(self, other):
+ return coord(self.i % other, self.j % other)
def __rdiv__(self, other):
return coord(self.i/other, self.j/other)
def roundtogrid(self):
return coord(int(round(self.i)), int(round(self.j)))
- def trunctogrid(self):
- return coord(int(round(self.i)), int(round(self.j)))
def distance(self, other=None):
if not other: other = coord(0, 0)
return math.sqrt((self.i - other.i)**2 + (self.j - other.j)**2)
else:
s.j = self.j / abs(self.j)
return s
+ def quadrant(self):
+ return (self / QUADSIZE).roundtogrid()
+ def sector(self):
+ return self.roundtogrid() % QUADSIZE
def scatter(self):
s = coord()
s.i = self.i + randrange(-1, 2)
s.j = self.j + randrange(-1, 2)
return s
- def __hash__(self):
- return hash((x, y))
def __str__(self):
if self.i == None or self.j == None:
return "Nowhere"
if ifast:
skip(1)
if no == 0:
- if withprob(0.99):
+ if withprob(0.01):
prout(_("Sulu- \"Sir, the high-speed shield control has malfunctioned . . ."))
prouts(_(" CLICK CLICK POP . . ."))
prout(_(" No response, sir!"))
attack(torps_ok=False)
if game.alldone:
return
- # compute final position -- new quadrant and sector
- x = (QUADSIZE*game.quadrant.i)+game.sector.i
- y = (QUADSIZE*game.quadrant.j)+game.sector.j
- w.i = int(round(x+QUADSIZE*course.distance*bigger*deltax))
- w.j = int(round(y+QUADSIZE*course.distance*bigger*deltay))
# check for edge of galaxy
+ w = course.final
kinks = 0
while True:
kink = False
iquad = game.quad[w.i][w.j]
if iquad != IHDOT:
# object encountered in flight path
- stopegy = 50.0*course.dist/game.optime
+ stopegy = 50.0*course.distance/game.optime
course.distance = (game.sector - w).distance() / (QUADSIZE * 1.0)
if iquad in (IHT, IHK, IHC, IHS, IHR, IHQUEST):
game.sector = w
def __init__(self, bearing, distance, origin=None):
self.distance = distance
self.bearing = bearing
+ if origin is None:
+ self.origin = cartesian(game.quadrant, game.sector)
+ else:
+ self.origin = origin
# The bearing() code we inherited from FORTRAN is actually computing
# clockface directions!
if self.bearing < 0.0:
bigger = max(abs(self.increment.i), abs(self.increment.j))
self.increment /= bigger
self.moves = int(round(10*self.distance*bigger))
+ self.final = (self.location + self.moves*self.increment).roundtogrid()
def next(self, grain=1):
"Next step on course."
self.moves -=1
else:
return False
def quadrant(self):
- return (self.location / QUADSIZE).roundtogrid()
+ return self.location.quadrant()
def sector(self):
- return coord(int(round(self.location.i)) % QUADSIZE, int(round(self.location.j)) % QUADSIZE)
+ return self.location.sector()
def power(self, warp):
return self.distance*(warp**3)*(game.shldup+1)
def time(self, warp):