X-Git-Url: https://jxself.org/git/?p=super-star-trek.git;a=blobdiff_plain;f=sst.py;h=2c65025580ed3b123bca43bd909a44b97b977802;hp=09214f481c60c0f4704288efa7ccf9b08aeb2a5d;hb=41cef667f997360744d8b5a126a02dbbacac0881;hpb=4956fec7cba65dcd577d017a9fa4216e4c35d0e2 diff --git a/sst.py b/sst.py index 09214f4..2c65025 100755 --- a/sst.py +++ b/sst.py @@ -11,7 +11,7 @@ Stas Sergeev, and Eric S. Raymond. See the doc/HACKING file in the distribution for designers notes and advice on how to modify (and how not to modify!) this code. """ -import os, sys, math, curses, time, readline, cPickle, random, copy, gettext, getpass +import os, sys, math, curses, time, readline, pickle, random, copy, gettext, getpass version = "2.1" @@ -901,7 +901,7 @@ def doshield(shraise): if shraise: action = "SHUP" else: - key = scanner.next() + key = scanner.nexttok() if key == "IHALPHA": if scanner.sees("transfer"): action = "NRG" @@ -960,7 +960,7 @@ def doshield(shraise): game.ididit = True return elif action == "NRG": - while scanner.next() != "IHREAL": + while scanner.nexttok() != "IHREAL": scanner.chew() proutn(_("Energy to transfer to shields- ")) nrg = scanner.real @@ -1086,7 +1086,7 @@ def torpedo(origin, bearing, dispersion, number, nburst): # Loop to move a single torpedo setwnd(message_window) for step in range(1, QUADSIZE*2): - if not track.next(): + if not track.nexttok(): break w = track.sector() if not w.valid_sector(): @@ -1110,7 +1110,7 @@ def torpedo(origin, bearing, dispersion, number, nburst): # In the C/FORTRAN version, dispersion was 2.5 radians, which # is 143 degrees, which is almost exactly 4.8 clockface units displacement = course(track.bearing+randreal(-2.4, 2.4), distance=2**0.5) - displacement.next() + displacement.nexttok() bumpto = displacement.sector() if not bumpto.valid_sector(): return hit @@ -1152,7 +1152,7 @@ def torpedo(origin, bearing, dispersion, number, nburst): return None proutn(crmena(True, iquad, "sector", w)) displacement = course(track.bearing+randreal(-2.4, 2.4), distance=2**0.5) - displacement.next() + displacement.nexttok() bumpto = displacement.sector() if not bumpto.valid_sector(): prout(_(" damaged but not destroyed.")) @@ -1551,7 +1551,7 @@ def torps(): return # First, get torpedo count while True: - scanner.next() + scanner.nexttok() if scanner.token == "IHALPHA": huh() return @@ -1576,7 +1576,7 @@ def torps(): # Next, get targets target = [] for i in range(n): - key = scanner.next() + key = scanner.nexttok() if i == 0 and key == "IHEOL": break # no coordinate waiting, we will try prompting if i == 1 and key == "IHEOL": @@ -1763,7 +1763,7 @@ def phasers(): # Original code so convoluted, I re-did it all # (That was Tom Almy talking about the C code, I think -- ESR) while automode == "NOTSET": - key = scanner.next() + key = scanner.nexttok() if key == "IHALPHA": if scanner.sees("manual"): if len(game.enemies)==0: @@ -1773,7 +1773,7 @@ def phasers(): automode = "AUTOMATIC" else: automode = "MANUAL" - key = scanner.next() + key = scanner.nexttok() elif scanner.sees("automatic"): if (not itarg) and len(game.enemies) != 0: automode = "FORCEMAN" @@ -1781,7 +1781,7 @@ def phasers(): if len(game.enemies)==0: prout(_("Energy will be expended into space.")) automode = "AUTOMATIC" - key = scanner.next() + key = scanner.nexttok() elif scanner.sees("no"): no = True else: @@ -1811,7 +1811,7 @@ def phasers(): if automode == "AUTOMATIC": if key == "IHALPHA" and scanner.sees("no"): no = True - key = scanner.next() + key = scanner.nexttok() if key != "IHREAL" and len(game.enemies) != 0: prout(_("Phasers locked on target. Energy available: %.2f")%avail) irec = 0 @@ -1824,7 +1824,7 @@ def phasers(): proutn(_("%d units required. ") % irec) scanner.chew() proutn(_("Units to fire= ")) - key = scanner.next() + key = scanner.nexttok() if key != "IHREAL": return rpow = scanner.real @@ -1838,7 +1838,7 @@ def phasers(): # chicken out scanner.chew() return - key = scanner.next() + key = scanner.nexttok() if key == "IHALPHA" and scanner.sees("no"): no = True if ifast: @@ -1919,10 +1919,10 @@ def phasers(): proutn("??") proutn(") ") proutn(_("units to fire at %s- ") % crmena(False, ienm, "sector", aim)) - key = scanner.next() + key = scanner.nexttok() if key == "IHALPHA" and scanner.sees("no"): no = True - key = scanner.next() + key = scanner.nexttok() continue if key == "IHALPHA": huh() @@ -1942,7 +1942,7 @@ def phasers(): prout(_("Available energy exceeded -- try again.")) scanner.chew() return - key = scanner.next() # scan for next value + key = scanner.nexttok() # scan for next value k += 1 if rpow == 0.0: # zero energy -- abort @@ -2286,7 +2286,7 @@ def events(): supercommander() elif evcode == FDSPROB: # Move deep space probe schedule(FDSPROB, 0.01) - if not game.probe.next(): + if not game.probe.nexttok(): if not game.probe.quadrant().valid_quadrant() or \ game.state.galaxy[game.probe.quadrant().i][game.probe.quadrant().j].supernova: # Left galaxy or ran into supernova @@ -2417,7 +2417,7 @@ def wait(): "Wait on events." game.ididit = False while True: - key = scanner.next() + key = scanner.nexttok() if key != "IHEOL": break proutn(_("How long? ")) @@ -2717,7 +2717,7 @@ def selfdestruct(): skip(1) prout(_("SELF-DESTRUCT-SEQUENCE-WILL-BE-ABORTED")) skip(1) - scanner.next() + scanner.nexttok() if game.passwd != scanner.token: prouts(_("PASSWORD-REJECTED;")) skip(1) @@ -3277,7 +3277,7 @@ def cgetline(): elif line[0] != "#": break else: - line = raw_input() + "\n" + line = input() + "\n" if logfp: logfp.write(line) return line @@ -3606,13 +3606,13 @@ def imove(icourse=None, noattack=False): # Move out game.quad[game.sector.i][game.sector.j] = '.' for m in range(icourse.moves): - icourse.next() + icourse.nexttok() w = icourse.sector() if icourse.origin.quadrant() != icourse.location.quadrant(): newquadrant(noattack) break elif check_collision(w): - print "Collision detected" + print("Collision detected") break else: game.sector = w @@ -3693,7 +3693,7 @@ def getcourse(isprobe): navmode = "manual" key = "IHEOL" break - key = scanner.next() + key = scanner.nexttok() if key == "IHEOL": proutn(_("Manual or automatic- ")) iprompt = True @@ -3701,11 +3701,11 @@ def getcourse(isprobe): elif key == "IHALPHA": if scanner.sees("manual"): navmode = "manual" - key = scanner.next() + key = scanner.nexttok() break elif scanner.sees("automatic"): navmode = "automatic" - key = scanner.next() + key = scanner.nexttok() break else: huh() @@ -3727,21 +3727,21 @@ def getcourse(isprobe): proutn(_("Destination sector or quadrant§or- ")) scanner.chew() iprompt = True - key = scanner.next() + key = scanner.nexttok() if key != "IHREAL": huh() raise TrekError xi = int(round(scanner.real))-1 - key = scanner.next() + key = scanner.nexttok() if key != "IHREAL": huh() raise TrekError xj = int(round(scanner.real))-1 - key = scanner.next() + key = scanner.nexttok() if key == "IHREAL": # both quadrant and sector specified xk = int(round(scanner.real))-1 - key = scanner.next() + key = scanner.nexttok() if key != "IHREAL": huh() raise TrekError @@ -3780,13 +3780,13 @@ def getcourse(isprobe): proutn(_("X and Y displacements- ")) scanner.chew() iprompt = True - key = scanner.next() + key = scanner.nexttok() itemp = "verbose" if key != "IHREAL": huh() raise TrekError delta.j = scanner.real - key = scanner.next() + key = scanner.nexttok() if key != "IHREAL": huh() raise TrekError @@ -3829,7 +3829,7 @@ class course: self.step = 0 def arrived(self): return self.location.roundtogrid() == self.final - def next(self): + def nexttok(self): "Next step on course." self.step += 1 self.nextlocation = self.location + self.increment @@ -3973,7 +3973,7 @@ def warp(wcourse, involuntary): look = wcourse.moves while look > 0: look -= 1 - wcourse.next() + wcourse.nexttok() w = wcourse.sector() if not w.valid_sector(): break @@ -4003,7 +4003,7 @@ def warp(wcourse, involuntary): def setwarp(): "Change the warp factor." while True: - key=scanner.next() + key=scanner.nexttok() if key != "IHEOL": break scanner.chew() @@ -4189,7 +4189,7 @@ def probe(): else: prout(_("Uhura- \"The previous probe is still reporting data, Sir.\"")) return - key = scanner.next() + key = scanner.nexttok() if key == "IHEOL": if game.nprobes == 1: prout(_("1 probe left.")) @@ -4201,7 +4201,7 @@ def probe(): game.isarmed = False if key == "IHALPHA" and scanner.token == "armed": game.isarmed = True - key = scanner.next() + key = scanner.nexttok() elif key == "IHEOL": proutn(_("Arm NOVAMAX warhead? ")) game.isarmed = ja() @@ -5104,7 +5104,7 @@ def status(req=0): def request(): "Request specified status data, a historical relic from slow TTYs." requests = ("da","co","po","ls","wa","en","to","sh","kl","sy", "ti") - while scanner.next() == "IHEOL": + while scanner.nexttok() == "IHEOL": proutn(_("Information desired? ")) scanner.chew() if scanner.token in requests: @@ -5148,21 +5148,21 @@ def eta(): prout(_("COMPUTER DAMAGED, USE A POCKET CALCULATOR.")) skip(1) return - if scanner.next() != "IHREAL": + if scanner.nexttok() != "IHREAL": prompt = True scanner.chew() proutn(_("Destination quadrant and/or sector? ")) - if scanner.next()!="IHREAL": + if scanner.nexttok()!="IHREAL": huh() return w1.j = int(scanner.real-0.5) - if scanner.next() != "IHREAL": + if scanner.nexttok() != "IHREAL": huh() return w1.i = int(scanner.real-0.5) - if scanner.next() == "IHREAL": + if scanner.nexttok() == "IHREAL": w2.j = int(scanner.real-0.5) - if scanner.next() != "IHREAL": + if scanner.nexttok() != "IHREAL": huh() return w2.i = int(scanner.real-0.5) @@ -5186,7 +5186,7 @@ def eta(): while True: scanner.chew() proutn(_("Time or arrival date? ")) - if scanner.next()=="IHREAL": + if scanner.nexttok()=="IHREAL": ttime = scanner.real if ttime > game.state.date: ttime -= game.state.date # Actually a star date @@ -5200,7 +5200,7 @@ def eta(): break scanner.chew() proutn(_("Warp factor? ")) - if scanner.next()== "IHREAL": + if scanner.nexttok()== "IHREAL": wfl = True twarp = scanner.real if twarp<1.0 or twarp > 10.0: @@ -5218,7 +5218,7 @@ def eta(): if not wfl: return proutn(_("New warp factor to try? ")) - if scanner.next() == "IHREAL": + if scanner.nexttok() == "IHREAL": wfl = True twarp = scanner.real if twarp<1.0 or twarp > 10.0: @@ -5251,7 +5251,7 @@ def eta(): (scheduled(FCDBAS) 10.0: @@ -5277,10 +5277,10 @@ def freeze(boss): "Save game." if boss: scanner.push("emsave.trk") - key = scanner.next() + key = scanner.nexttok() if key == "IHEOL": proutn(_("File name: ")) - key = scanner.next() + key = scanner.nexttok() if key != "IHALPHA": huh() return @@ -5291,7 +5291,7 @@ def freeze(boss): except IOError: prout(_("Can't freeze game as file %s") % scanner.token) return - cPickle.dump(game, fp) + pickle.dump(game, fp) fp.close() scanner.chew() @@ -5299,10 +5299,10 @@ def thaw(): "Retrieve saved game." global game game.passwd = None - key = scanner.next() + key = scanner.nexttok() if key == "IHEOL": proutn(_("File name: ")) - key = scanner.next() + key = scanner.nexttok() if key != "IHALPHA": huh() return True @@ -5313,7 +5313,7 @@ def thaw(): except IOError: prout(_("Can't thaw game in %s") % scanner.token) return - game = cPickle.load(fp) + game = pickle.load(fp) fp.close() scanner.chew() return False @@ -5584,7 +5584,7 @@ def setup(): prout(_("%d stardates.") % int(game.intime)) proutn(_("%d starbases in ") % game.inbase) for i in range(game.inbase): - proutn(`game.state.baseq[i]`) + proutn(repr(game.state.baseq[i])) proutn(" ") skip(2) proutn(_("The Enterprise is currently in Quadrant %s") % game.quadrant) @@ -5611,9 +5611,9 @@ def choose(): scanner.chew() # if not scanner.inqueue: # Can start with command line options proutn(_("Would you like a regular, tournament, or saved game? ")) - scanner.next() + scanner.nexttok() if scanner.sees("tournament"): - while scanner.next() == "IHEOL": + while scanner.nexttok() == "IHEOL": proutn(_("Type in tournament number-")) if scanner.real == 0: scanner.chew() @@ -5639,7 +5639,7 @@ def choose(): proutn(_("What is \"%s\"? ") % scanner.token) scanner.chew() while game.length==0 or game.skill==SKILL_NONE: - if scanner.next() == "IHALPHA": + if scanner.nexttok() == "IHALPHA": if scanner.sees("short"): game.length = 1 elif scanner.sees("medium"): @@ -5667,10 +5667,10 @@ def choose(): elif game.skill == SKILL_NONE: proutn(_("Are you a Novice, Fair, Good, Expert, or Emeritus player? ")) # Choose game options -- added by ESR for SST2K - if scanner.next() != "IHALPHA": + if scanner.nexttok() != "IHALPHA": scanner.chew() proutn(_("Choose your game style (plain, almy, fancy or just press enter): ")) - scanner.next() + scanner.nexttok() if scanner.sees("plain"): # Approximates the UT FORTRAN version. game.options &=~ (OPTION_THOLIAN | OPTION_PLANETS | OPTION_THINGY | OPTION_PROBE | OPTION_RAMMING | OPTION_MVBADDY | OPTION_BLKHOLE | OPTION_BASE | OPTION_WORLDS) @@ -5854,7 +5854,7 @@ def setpassword(): while True: scanner.chew() proutn(_("Please type in a secret password- ")) - scanner.next() + scanner.nexttok() game.passwd = scanner.token if game.passwd != None: break @@ -5923,12 +5923,12 @@ def listCommands(): def helpme(): "Browse on-line help." - key = scanner.next() + key = scanner.nexttok() while True: if key == "IHEOL": setwnd(prompt_window) proutn(_("Help on what command? ")) - key = scanner.next() + key = scanner.nexttok() setwnd(message_window) if key == "IHEOL": return @@ -5986,7 +5986,7 @@ def makemoves(): setwnd(prompt_window) clrscr() proutn("COMMAND> ") - if scanner.next() == "IHEOL": + if scanner.nexttok() == "IHEOL": if game.options & OPTION_CURSES: makechart() continue @@ -6081,7 +6081,7 @@ def makemoves(): elif cmd == "EMEXIT": # Emergency exit clrscr() # Hide screen freeze(True) # forced save - raise SystemExit,1 # And quick exit + raise SystemExit(1) # And quick exit elif cmd == "PROBE": probe() # Launch probe if game.ididit: @@ -6160,7 +6160,7 @@ def crmena(stars, enemy, loctype, w): buf += _("Quadrant ") elif loctype == "sector": buf += _("Sector ") - return buf + `w` + return buf + repr(w) def crmshp(): "Emit our ship name." @@ -6187,7 +6187,7 @@ class sstscanner: self.token = None self.real = 0.0 self.inqueue = [] - def next(self): + def nexttok(self): # Get a token from the user self.real = 0.0 self.token = '' @@ -6238,12 +6238,12 @@ class sstscanner: return int(round(scanner.real)) def getcoord(self): s = Coord() - scanner.next() + scanner.nexttok() if scanner.type != "IHREAL": huh() return None s.i = scanner.int()-1 - scanner.next() + scanner.nexttok() if scanner.type != "IHREAL": huh() return None @@ -6256,7 +6256,7 @@ def ja(): "Yes-or-no confirmation." scanner.chew() while True: - scanner.next() + scanner.nexttok() if scanner.token == 'y': return True if scanner.token == 'n': @@ -6296,7 +6296,7 @@ def debugme(): for i in range(NDEVICES): proutn("Kill %s?" % device[i]) scanner.chew() - key = scanner.next() + key = scanner.nexttok() if key == "IHALPHA" and scanner.sees("y"): game.damage[i] = 10.0 proutn("Examine/change events? ") @@ -6327,7 +6327,7 @@ def debugme(): proutn("never") proutn("? ") scanner.chew() - key = scanner.next() + key = scanner.nexttok() if key == 'n': unschedule(i) scanner.chew() @@ -6336,7 +6336,7 @@ def debugme(): if i == FENSLV or i == FREPRO: scanner.chew() proutn("In quadrant- ") - key = scanner.next() + key = scanner.nexttok() # "IHEOL" says to leave coordinates as they are if key != "IHEOL": if key != "IHREAL": @@ -6344,7 +6344,7 @@ def debugme(): unschedule(i) continue w.i = int(round(scanner.real)) - key = scanner.next() + key = scanner.nexttok() if key != "IHREAL": prout("Event %d canceled, no y coordinate." % (i)) unschedule(i) @@ -6378,7 +6378,7 @@ if __name__ == '__main__': replayfp = open(val, "r") except IOError: sys.stderr.write("sst: can't open replay file %s\n" % val) - raise SystemExit, 1 + raise SystemExit(1) try: line = replayfp.readline().strip() (leader, __, seed) = line.split() @@ -6400,11 +6400,11 @@ if __name__ == '__main__': elif switch == '-x': game.idebug = True elif switch == '-V': - print "SST2K", version - raise SystemExit, 0 + print("SST2K", version) + raise SystemExit(0) else: sys.stderr.write("usage: sst [-t] [-x] [startcommand...].\n") - raise SystemExit, 1 + raise SystemExit(1) # where to save the input in case of bugs if "TMPDIR" in os.environ: tmpdir = os.environ['TMPDIR'] @@ -6423,7 +6423,8 @@ if __name__ == '__main__': (getpass.getuser(),socket.gethostname(),time.ctime())) random.seed(seed) scanner = sstscanner() - map(scanner.append, arguments) + for arg in arguments: + scanner.append(arg) try: iostart() while True: # Play a game @@ -6455,10 +6456,10 @@ if __name__ == '__main__': prout(_("May the Great Bird of the Galaxy roost upon your home planet.")) finally: ioend() - raise SystemExit, 0 + raise SystemExit(0) except KeyboardInterrupt: if logfp: logfp.close() - print "" + print("") # End.