X-Git-Url: https://jxself.org/git/?p=super-star-trek.git;a=blobdiff_plain;f=src%2Fsst.py;h=3c1050275e4bbb85444bf6c5f515a760fc77d193;hp=3c40cabcea1d7137a8344bd64f96ecacfd83c259;hb=79954e3b773fc8c34d62bc48e1bfdd3bf55d054e;hpb=e67cf36a789c4ab1cd905a9a08e91d219395f538 diff --git a/src/sst.py b/src/sst.py index 3c40cab..3c10502 100644 --- a/src/sst.py +++ b/src/sst.py @@ -227,10 +227,6 @@ IHMATER0 = '-', IHMATER1 = 'o', IHMATER2 = '0' -IHEOL = '\n' -IHREAL = 0.0 -IHALPHA = " " - class coord: def __init__(self, x=None, y=None): self.i = x @@ -759,10 +755,7 @@ def movebaddy(enemy): else: motion = game.skill # calculate preferred number of steps - if motion < 0: - nsteps = -motion - else: - nsteps = motion + nsteps = abs(int(motion)) if motion > 0 and nsteps > mdist: nsteps = mdist; # don't overshoot if nsteps > QUADSIZE: @@ -777,16 +770,7 @@ def movebaddy(enemy): m.i = 0 if 2.0 * abs(m.j) < abs(game.sector.i-enemy.kloc.i): m.j = 0 - if m.i != 0: - if m.i*motion < 0: - m.i = -1 - else: - m.i = 1 - if m.j != 0: - if m.j*motion < 0: - m.j = -1 - else: - m.j = 1 + m = (motion * m).sgn() next = enemy.kloc # main move loop for ll in range(nsteps): @@ -795,13 +779,13 @@ def movebaddy(enemy): # Check if preferred position available look = next + m if m.i < 0: - krawlx = 1 + krawli = 1 else: - krawlx = -1 + krawli = -1 if m.j < 0: - krawly = 1 + krawlj = 1 else: - krawly = -1 + krawlj = -1 success = False attempts = 0; # Settle mysterious hang problem while attempts < 20 and not success: @@ -809,29 +793,29 @@ def movebaddy(enemy): if look.i < 0 or look.i >= QUADSIZE: if motion < 0 and tryexit(enemy, look, irun): return - if krawlx == m.i or m.j == 0: + if krawli == m.i or m.j == 0: break - look.i = next.i + krawlx - krawlx = -krawlx + look.i = next.i + krawli + krawli = -krawli elif look.j < 0 or look.j >= QUADSIZE: if motion < 0 and tryexit(enemy, look, irun): return - if krawly == m.j or m.i == 0: + if krawlj == m.j or m.i == 0: break - look.j = next.j + krawly - krawly = -krawly + look.j = next.j + krawlj + krawlj = -krawlj elif (game.options & OPTION_RAMMING) and game.quad[look.i][look.j] != IHDOT: # See if enemy should ram ship if game.quad[look.i][look.j] == game.ship and \ (enemy.type == IHC or enemy.type == IHS): collision(rammed=True, enemy=enemy) return - if krawlx != m.i and m.j != 0: - look.i = next.i + krawlx - krawlx = -krawlx - elif krawly != m.j and m.i != 0: - look.j = next.j + krawly - krawly = -krawly + if krawli != m.i and m.j != 0: + look.i = next.i + krawli + krawli = -krawli + elif krawlj != m.j and m.i != 0: + look.j = next.j + krawlj + krawlj = -krawlj else: break; # we have failed else: @@ -1096,7 +1080,7 @@ def doshield(shraise): action = "SHUP" else: key = scanner.next() - if key == IHALPHA: + if key == "IHALPHA": if scanner.sees("transfer"): action = "NRG" else: @@ -1155,7 +1139,7 @@ def doshield(shraise): game.ididit = True return elif action == "NRG": - while scanner.next() != IHREAL: + while scanner.next() != "IHREAL": scanner.chew() proutn(_("Energy to transfer to shields- ")) scanner.chew() @@ -1289,6 +1273,10 @@ def collision(rammed, enemy): def torpedo(origin, course, dispersion, number, nburst): "Let a photon torpedo fly" + if not damaged(DSRSENS) or game.condition=="docked": + setwnd(srscan_window) + else: + setwnd(message_window) shoved = False ac = course + 0.25*dispersion angle = (15.0-ac)*0.5235988 @@ -1296,17 +1284,12 @@ def torpedo(origin, course, dispersion, number, nburst): delta = coord(-math.sin(angle), math.cos(angle)) bigger = max(abs(delta.i), abs(delta.j)) delta /= bigger - x = origin.i; y = origin.j w = coord(0, 0); jw = coord(0, 0) - if not damaged(DSRSENS) or game.condition=="docked": - setwnd(srscan_window) - else: - setwnd(message_window) + ungridded = copy.copy(origin) # Loop to move a single torpedo - for step in range(1, 15+1): - x += delta.i - y += delta.j - w = coord(x, y).snaptogrid() + for step in range(1, QUADSIZE*2): + ungridded += delta + w = ungridded.snaptogrid() if not VALID_SECTOR(w.i, w.j): break iquad=game.quad[w.i][w.j] @@ -1345,13 +1328,12 @@ def torpedo(origin, course, dispersion, number, nburst): game.sector = jw proutn(crmshp()) shoved = True - elif iquad in (IHC, IHS): # Hit a commander + elif iquad in (IHC, IHS, IHR, IHK): # Hit a regular enemy + # find the enemy if withprob(0.05): prout(crmena(True, iquad, "sector", w) + _(" uses anti-photon device;")) prout(_(" torpedo neutralized.")) return None - elif iquad in (IHR, IHK): # Hit a regular enemy - # find the enemy for enemy in game.enemies: if w == enemy.kloc: break @@ -1591,7 +1573,7 @@ def attack(torps_ok): hit = enemy.kpower*math.pow(dustfac,enemy.kavgd) enemy.kpower *= 0.75 else: # Enemy uses photon torpedo - #course2 = (enemy.kloc-game.sector).bearing() + # We should be able to make the bearing() method work here course = 1.90985*math.atan2(game.sector.j-enemy.kloc.j, enemy.kloc.i-game.sector.i) hit = 0 proutn(_("***TORPEDO INCOMING")) @@ -1760,15 +1742,15 @@ def photon(): # First, get torpedo count while True: scanner.next() - if scanner.token == IHALPHA: + if scanner.token == "IHALPHA": huh() return - elif scanner.token == IHEOL or not scanner.waiting(): + elif scanner.token == "IHEOL" or not scanner.waiting(): prout(_("%d torpedoes left.") % game.torps) scanner.chew() proutn(_("Number of torpedoes to fire- ")) continue # Go back around to get a number - else: # key == IHREAL + else: # key == "IHREAL" n = scanner.int() if n <= 0: # abort command scanner.chew() @@ -1785,24 +1767,24 @@ def photon(): target = [] for i in range(n): key = scanner.next() - if i==0 and key == IHEOL: + if i==0 and key == "IHEOL": break; # no coordinate waiting, we will try prompting - if i==1 and key == IHEOL: + if i==1 and key == "IHEOL": # direct all torpedoes at one target while i < n: - target.append(targets[0]) + target.append(target[0]) course.append(course[0]) i += 1 break - scanner.push(key) + scanner.push(scanner.token) target.append(scanner.getcoord()) if target[-1] == None: return - course.append(targetcheck(target[1])) - if course[i] == None: + course.append(targetcheck(target[-1])) + if course[-1] == None: return scanner.chew() - if i == 0: + if len(target) == 0: # prompt for each one for i in range(n): proutn(_("Target sector for torpedo number %d- ") % (i+1)) @@ -1966,12 +1948,12 @@ def phasers(): # (That was Tom Almy talking about the C code, I think -- ESR) while automode=="NOTSET": key=scanner.next() - if key == IHALPHA: + if key == "IHALPHA": if scanner.sees("manual"): if len(game.enemies)==0: prout(_("There is no enemy present to select.")) scanner.chew() - key = IHEOL + key = "IHEOL" automode="AUTOMATIC" else: automode = "MANUAL" @@ -1989,7 +1971,7 @@ def phasers(): else: huh() return - elif key == IHREAL: + elif key == "IHREAL": if len(game.enemies)==0: prout(_("Energy will be expended into space.")) automode = "AUTOMATIC" @@ -1998,7 +1980,7 @@ def phasers(): else: automode = "AUTOMATIC" else: - # IHEOL + # "IHEOL" if len(game.enemies)==0: prout(_("Energy will be expended into space.")) automode = "AUTOMATIC" @@ -2011,10 +1993,10 @@ def phasers(): if ifast: avail -= 200.0 if automode == "AUTOMATIC": - if key == IHALPHA and scanner.sees("no"): + if key == "IHALPHA" and scanner.sees("no"): no = True key = scanner.next() - if key != IHREAL and len(game.enemies) != 0: + if key != "IHREAL" and len(game.enemies) != 0: prout(_("Phasers locked on target. Energy available: %.2f")%avail) irec=0 while True: @@ -2027,13 +2009,13 @@ def phasers(): scanner.chew() proutn(_("Units to fire= ")) key = scanner.next() - if key!=IHREAL: + if key!="IHREAL": return rpow = scanner.real if rpow > avail: proutn(_("Energy available= %.2f") % avail) skip(1) - key = IHEOL + key = "IHEOL" if not rpow > avail: break if rpow<=0: @@ -2041,7 +2023,7 @@ def phasers(): scanner.chew() return key=scanner.next() - if key == IHALPHA and scanner.sees("no"): + if key == "IHALPHA" and scanner.sees("no"): no = True if ifast: game.energy -= 200; # Go and do it! @@ -2080,7 +2062,7 @@ def phasers(): prout(_("%d expended on empty space.") % int(extra)) elif automode == "FORCEMAN": scanner.chew() - key = IHEOL + key = "IHEOL" if damaged(DCOMPTR): prout(_("Battle computer damaged, manual fire only.")) else: @@ -2105,11 +2087,11 @@ def phasers(): not game.sector.distance(aim)<2**0.5 and ienm in (IHC, IHS): prout(cramen(ienm) + _(" can't be located without short range scan.")) scanner.chew() - key = IHEOL + key = "IHEOL" hits[k] = 0; # prevent overflow -- thanks to Alexei Voitenko k += 1 continue - if key == IHEOL: + if key == "IHEOL": scanner.chew() if itarg and k > kz: irec=(abs(game.enemies[k].kpower)/(PHASEFAC*math.pow(0.9,game.enemies[k].kdist))) * randreal(1.01, 1.06) + 1.0 @@ -2122,14 +2104,14 @@ def phasers(): proutn(") ") proutn(_("units to fire at %s- ") % crmena(False, ienm, "sector", aim)) key = scanner.next() - if key == IHALPHA and scanner.sees("no"): + if key == "IHALPHA" and scanner.sees("no"): no = True key = scanner.next() continue - if key == IHALPHA: + if key == "IHALPHA": huh() return - if key == IHEOL: + if key == "IHEOL": if k==1: # Let me say I'm baffled by this msgflag = True continue @@ -2150,7 +2132,7 @@ def phasers(): # zero energy -- abort scanner.chew() return - if key == IHALPHA and scanner.sees("no"): + if key == "IHALPHA" and scanner.sees("no"): no = True game.energy -= rpow scanner.chew() @@ -2382,7 +2364,7 @@ def events(): game.optime -= xtime if evcode == FSNOVA: # Supernova announce() - supernova(False) + supernova(None) schedule(FSNOVA, expran(0.5*game.intime)) if game.state.galaxy[game.quadrant.i][game.quadrant.j].supernova: return @@ -2429,12 +2411,14 @@ def events(): for ibq in game.state.baseq: for cmdr in game.state.kcmdr: if ibq == cmdr and ibq != game.quadrant and ibq != game.state.kscmdr: - raise "foundit" - except "foundit": - # no match found -- try later - schedule(FBATTAK, expran(0.3*game.intime)) - unschedule(FCDBAS) - continue + raise ibq + else: + # no match found -- try later + schedule(FBATTAK, expran(0.3*game.intime)) + unschedule(FCDBAS) + continue + except coord: + pass # commander + starbase combination found -- launch attack game.battle = ibq schedule(FCDBAS, randreal(1.0, 4.0)) @@ -2518,7 +2502,7 @@ def events(): game.proben -= 1 # One less to travel if game.proben == 0 and game.isarmed and pdest.stars: # lets blow the sucker! - supernova(True, game.probec) + supernova(game.probec) unschedule(FDSPROB) if game.state.galaxy[game.quadrant.i][game.quadrant.j].supernova: return @@ -2623,11 +2607,11 @@ def wait(): game.ididit = False while True: key = scanner.next() - if key != IHEOL: + if key != "IHEOL": break proutn(_("How long? ")) scanner.chew() - if key != IHREAL: + if key != "IHREAL": huh() return origTime = delay = scanner.real @@ -2682,7 +2666,7 @@ def nova(nov): newc = coord(); neighbor = coord(); bump = coord(0, 0) if withprob(0.05): # Wow! We've supernova'ed - supernova(False, nov) + supernova(game.quadrant) return # handle initial nova game.quad[nov.i][nov.j] = IHDOT @@ -2709,7 +2693,7 @@ def nova(nov): elif iquad == IHSTAR: # Affect another star if withprob(0.05): # This star supernovas - supernova(False) + supernova(game.quadrant) return else: hits.append(neighbor) @@ -2804,17 +2788,15 @@ def nova(nov): game.optime = 10.0*game.dist/16.0 return -def supernova(induced, w=None): +def supernova(w): "Star goes supernova." num = 0; npdead = 0 - nq = coord() if w != None: - nq = w + nq = copy.copy(w) else: + # Scheduled supernova -- select star at random. stars = 0 - # Scheduled supernova -- select star - # logic changed here so that we won't favor quadrants in top - # left of universe + nq = coord() for nq.i in range(GALSIZE): for nq.j in range(GALSIZE): stars += game.state.galaxy[nq.i][nq.j].stars @@ -2860,7 +2842,7 @@ def supernova(induced, w=None): skip(1) stars() game.alldone = True - # destroy any Klingons in supernovaed quadrant + # destroy any Klingons in supernovaed quadrant kldead = game.state.galaxy[nq.i][nq.j].klingons game.state.galaxy[nq.i][nq.j].klingons = 0 if nq == game.state.kscmdr: @@ -2888,7 +2870,7 @@ def supernova(induced, w=None): # Destroy any base in supernovaed quadrant game.state.baseq = filter(lambda x: x != nq, game.state.baseq) # If starship caused supernova, tally up destruction - if induced: + if w != None: game.state.starkl += game.state.galaxy[nq.i][nq.j].stars game.state.basekl += game.state.galaxy[nq.i][nq.j].starbase game.state.nplankl += npdead @@ -2898,7 +2880,7 @@ def supernova(induced, w=None): # If supernova destroys last Klingons give special message if (game.state.remkl + len(game.state.kcmdr) + game.state.nscrem)==0 and not nq == game.quadrant: skip(2) - if not induced: + if w == None: prout(_("Lucky you!")) proutn(_("A supernova in %s has just destroyed the last Klingons.") % nq) finish(FWON) @@ -3886,7 +3868,7 @@ def getcourse(isprobe, akey): prout(_("Computer damaged; manual movement only")) scanner.chew() navmode = "manual" - key = IHEOL + key = "IHEOL" break if isprobe and akey != -1: # For probe launch, use pre-scanned value first time @@ -3894,11 +3876,11 @@ def getcourse(isprobe, akey): akey = -1 else: key = scanner.next() - if key == IHEOL: + if key == "IHEOL": proutn(_("Manual or automatic- ")) iprompt = True scanner.chew() - elif key == IHALPHA: + elif key == "IHALPHA": if scanner.sees("manual"): navmode = "manual" key = scanner.next() @@ -3919,7 +3901,7 @@ def getcourse(isprobe, akey): navmode = "manual" break if navmode == "automatic": - while key == IHEOL: + while key == "IHEOL": if isprobe: proutn(_("Target quadrant or quadrant§or- ")) else: @@ -3927,28 +3909,28 @@ def getcourse(isprobe, akey): scanner.chew() iprompt = True key = scanner.next() - if key != IHREAL: + if key != "IHREAL": huh() return False xi = int(round(scanner.real))-1 key = scanner.next() - if key != IHREAL: + if key != "IHREAL": huh() return False xj = int(round(scanner.real))-1 key = scanner.next() - if key == IHREAL: + if key == "IHREAL": # both quadrant and sector specified xk = int(round(scanner.real))-1 key = scanner.next() - if key != IHREAL: + if key != "IHREAL": huh() return False xl = int(round(scanner.real))-1 dquad.i = xi dquad.j = xj - dsect.j = xk - dsect.i = xl + dsect.i = xk + dsect.j = xl else: # only one pair of numbers was specified if isprobe: @@ -3958,10 +3940,10 @@ def getcourse(isprobe, akey): dsect.j = dsect.i = 4 # preserves 1-origin behavior else: # only sector specified - dsect.j = xi - dsect.i = xj + dsect.i = xi + dsect.j = xj itemp = "normal" - if not VALID_QUADRANT(dquad.j,dquad.i) or not VALID_SECTOR(dsect.i,dsect.j): + if not VALID_QUADRANT(dquad.i,dquad.j) or not VALID_SECTOR(dsect.i,dsect.j): huh() return False skip(1) @@ -3973,21 +3955,21 @@ def getcourse(isprobe, akey): prout(_("Ensign Chekov- \"Course laid in, Captain.\"")) # the actual deltas get computed here delta = coord() - delta.i = dquad.j-game.quadrant.j + 0.1*(dsect.i-game.sector.j) - delta.j = game.quadrant.i-dquad.i + 0.1*(game.sector.i-dsect.j) + delta.i = dquad.j-game.quadrant.j + 0.1*(dsect.j-game.sector.j) + delta.j = game.quadrant.i-dquad.i + 0.1*(game.sector.i-dsect.i) else: # manual - while key == IHEOL: + while key == "IHEOL": proutn(_("X and Y displacements- ")) scanner.chew() iprompt = True key = scanner.next() itemp = "verbose" - if key != IHREAL: + if key != "IHREAL": huh() return False delta.j = scanner.real key = scanner.next() - if key != IHREAL: + if key != "IHREAL": huh() return False delta.i = scanner.real @@ -4095,7 +4077,7 @@ def warp(timewarp): return # Make sure enough time is left for the trip - game.optime = 10.0*game.dist/game.wfacsq + game.optime = 10.0*game.dist/game.warpfac**2 if game.optime >= 0.8*game.state.remtime: skip(1) prout(_("First Officer Spock- \"Captain, I compute that such")) @@ -4155,7 +4137,7 @@ def warp(timewarp): game.energy -= game.dist*game.warpfac*game.warpfac*game.warpfac*(game.shldup+1) if game.energy <= 0: finish(FNRG) - game.optime = 10.0*game.dist/game.wfacsq + game.optime = 10.0*game.dist/game.warpfac**2 if twarp: timwrp() if blooey: @@ -4171,12 +4153,12 @@ def setwarp(): "Change the warp factor." while True: key=scanner.next() - if key != IHEOL: + if key != "IHEOL": break scanner.chew() proutn(_("Warp factor- ")) scanner.chew() - if key != IHREAL: + if key != "IHREAL": huh() return if game.damage[DWARPEN] > 10.0: @@ -4194,7 +4176,6 @@ def setwarp(): return oldfac = game.warpfac game.warpfac = scanner.real - game.wfacsq=game.warpfac*game.warpfac if game.warpfac <= oldfac or game.warpfac <= 6.0: prout(_("Helmsman Sulu- \"Warp factor %d, Captain.\"") % int(game.warpfac)) @@ -4262,14 +4243,13 @@ def atover(igrab): finish(FSNOVAED) return game.warpfac = randreal(6.0, 8.0) - game.wfacsq = game.warpfac * game.warpfac prout(_("Warp factor set to %d") % int(game.warpfac)) power = 0.75*game.energy game.dist = power/(game.warpfac*game.warpfac*game.warpfac*(game.shldup+1)) distreq = randreal(math.sqrt(2)) if distreq < game.dist: game.dist = distreq - game.optime = 10.0*game.dist/game.wfacsq + game.optime = 10.0*game.dist/game.warpfac**2 game.direc = randreal(12) # How dumb! game.justin = False game.inorbit = False @@ -4364,7 +4344,7 @@ def probe(): prout(_("Uhura- \"The previous probe is still reporting data, Sir.\"")) return key = scanner.next() - if key == IHEOL: + if key == "IHEOL": # slow mode, so let Kirk know how many probes there are left if game.nprobes == 1: prout(_("1 probe left.")) @@ -4374,10 +4354,10 @@ def probe(): if ja() == False: return game.isarmed = False - if key == IHALPHA and scanner.token == "armed": + if key == "IHALPHA" and scanner.token == "armed": game.isarmed = True key = scanner.next() - elif key == IHEOL: + elif key == "IHEOL": proutn(_("Arm NOVAMAX warhead? ")) game.isarmed = ja() if not getcourse(isprobe=True, akey=key): @@ -4606,7 +4586,6 @@ def abandon(): game.lsupres=game.inlsr=3.0 game.shldup=False game.warpfac=5.0 - game.wfacsq=25.0 return # Code from planets.c begins here. @@ -5329,7 +5308,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.next() == "IHEOL": proutn(_("Information desired? ")) scanner.chew() if scanner.token in requests: @@ -5373,21 +5352,21 @@ def eta(): prout(_("COMPUTER DAMAGED, USE A POCKET CALCULATOR.")) skip(1) return - if scanner.next() != IHREAL: + if scanner.next() != "IHREAL": prompt = True scanner.chew() proutn(_("Destination quadrant and/or sector? ")) - if scanner.next()!=IHREAL: + if scanner.next()!="IHREAL": huh() return w1.j = int(scanner.real-0.5) - if scanner.next() != IHREAL: + if scanner.next() != "IHREAL": huh() return w1.i = int(scanner.real-0.5) - if scanner.next() == IHREAL: + if scanner.next() == "IHREAL": w2.j = int(scanner.real-0.5) - if scanner.next() != IHREAL: + if scanner.next() != "IHREAL": huh() return w2.i = int(scanner.real-0.5) @@ -5411,7 +5390,7 @@ def eta(): while True: scanner.chew() proutn(_("Time or arrival date? ")) - if scanner.next()==IHREAL: + if scanner.next()=="IHREAL": ttime = scanner.real if ttime > game.state.date: ttime -= game.state.date # Actually a star date @@ -5425,7 +5404,7 @@ def eta(): break scanner.chew() proutn(_("Warp factor? ")) - if scanner.next()== IHREAL: + if scanner.next()== "IHREAL": wfl = True twarp = scanner.real if twarp<1.0 or twarp > 10.0: @@ -5443,7 +5422,7 @@ def eta(): if not wfl: return proutn(_("New warp factor to try? ")) - if scanner.next() == IHREAL: + if scanner.next() == "IHREAL": wfl = True twarp = scanner.real if twarp<1.0 or twarp > 10.0: @@ -5476,7 +5455,7 @@ def eta(): (scheduled(FCDBAS) 10.0: @@ -5504,10 +5483,10 @@ def freeze(boss): scanner.token = "emsave.trk" else: key = scanner.next() - if key == IHEOL: + if key == "IHEOL": proutn(_("File name: ")) key = scanner.next() - if key != IHALPHA: + if key != "IHALPHA": huh() return scanner.chew() @@ -5525,10 +5504,10 @@ def thaw(): "Retrieve saved game." game.passwd[0] = '\0' key = scanner.next() - if key == IHEOL: + if key == "IHEOL": proutn(_("File name: ")) key = scanner.next() - if key != IHALPHA: + if key != "IHALPHA": huh() return True scanner.chew() @@ -5621,13 +5600,11 @@ def setup(): if choose(): return # frozen game # Prepare the Enterprise - game.alldone = game.gamewon = False + game.alldone = game.gamewon = game.shldchg = game.shldup = False game.ship = IHE game.state.crew = FULLCREW game.energy = game.inenrg = 5000.0 game.shield = game.inshld = 2500.0 - game.shldchg = False - game.shldup = False game.inlsr = 4.0 game.lsupres = 4.0 game.quadrant = randplace(GALSIZE) @@ -5635,7 +5612,6 @@ def setup(): game.torps = game.intorps = 10 game.nprobes = randrange(2, 5) game.warpfac = 5.0 - game.wfacsq = game.warpfac * game.warpfac for i in range(NDEVICES): game.damage[i] = 0.0 # Set up assorted game parameters @@ -5826,7 +5802,7 @@ def choose(): if len(scanner.token)==0: # Try again continue if scanner.sees("tournament"): - while scanner.next() == IHEOL: + while scanner.next() == "IHEOL": proutn(_("Type in tournament number-")) if scanner.real == 0: scanner.chew() @@ -5852,7 +5828,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.next() == "IHALPHA": if scanner.sees("short"): game.length = 1 elif scanner.sees("medium"): @@ -5880,7 +5856,7 @@ 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.next() != "IHALPHA": scanner.chew() proutn(_("Choose your game style (or just press enter): ")) scanner.next() @@ -6129,18 +6105,18 @@ def helpme(): "Browse on-line help." key = scanner.next() while True: - if key == IHEOL: + if key == "IHEOL": setwnd(prompt_window) proutn(_("Help on what command? ")) key = scanner.next() setwnd(message_window) - if key == IHEOL: + if key == "IHEOL": return if scanner.token in commands or scanner.token == "ABBREV": break skip(1) listCommands() - key = IHEOL + key = "IHEOL" scanner.chew() skip(1) cmd = scanner.token.upper() @@ -6195,7 +6171,7 @@ def makemoves(): setwnd(prompt_window) clrscr() proutn("COMMAND> ") - if scanner.next() == IHEOL: + if scanner.next() == "IHEOL": if game.options & OPTION_CURSES: makechart() continue @@ -6406,30 +6382,30 @@ class sstscanner: clrscr() if line == '': return None - # Skip leading white space - line = line.lstrip() if not line: continue else: - self.inqueue = line.lstrip().split() + [IHEOL] + self.inqueue = line.lstrip().split() + ["IHEOL"] # From here on in it's all looking at the queue self.token = self.inqueue.pop(0) - if self.token == IHEOL: - self.type = IHEOL - return IHEOL + if self.token == "IHEOL": + self.type = "IHEOL" + return "IHEOL" try: self.real = float(self.token) - self.type = IHREAL - return IHREAL + self.type = "IHREAL" + return "IHREAL" except ValueError: pass # Treat as alpha self.token = self.token.lower() - self.type = IHALPHA + self.type = "IHALPHA" self.real = None - return IHALPHA - def push(self, tok): + return "IHALPHA" + def append(self, tok): self.inqueue.append(tok) + def push(self, tok): + self.inqueue.insert(0, tok) def waiting(self): return self.inqueue def chew(self): @@ -6437,8 +6413,8 @@ class sstscanner: self.inqueue = [] self.real = self.token = None def chew2(self): - # return IHEOL next time - self.inqueue = [IHEOL] + # return "IHEOL" next time + self.inqueue = ["IHEOL"] self.real = self.token = None def sees(self, s): # compares s to item and returns true if it matches to the length of s @@ -6449,27 +6425,29 @@ class sstscanner: def getcoord(self): s = coord() scanner.next() - if scanner.type != IHREAL: + if scanner.type != "IHREAL": huh() return None s.i = scanner.int()-1 scanner.next() - if scanner.type != IHREAL: + if scanner.type != "IHREAL": huh() return None s.j = scanner.int()-1 return s + def __repr__(str): + return "" % (scanner.token, scanner.type, scanner.inqueue) def ja(): "Yes-or-no confirmation." scanner.chew() while True: scanner.next() - scanner.chew() if scanner.token == 'y': return True if scanner.token == 'n': return False + scanner.chew() proutn(_("Please answer with \"y\" or \"n\": ")) def huh(): @@ -6505,7 +6483,7 @@ def debugme(): proutn("Kill %s?" % device[i]) scanner.chew() key = scanner.next() - if key == IHALPHA and scanner.sees("y"): + if key == "IHALPHA" and scanner.sees("y"): game.damage[i] = 10.0 proutn("Examine/change events? ") if ja() == True: @@ -6539,21 +6517,21 @@ def debugme(): if key == 'n': unschedule(i) scanner.chew() - elif key == IHREAL: + elif key == "IHREAL": ev = schedule(i, scanner.real) if i == FENSLV or i == FREPRO: scanner.chew() proutn("In quadrant- ") key = scanner.next() - # IHEOL says to leave coordinates as they are - if key != IHEOL: - if key != IHREAL: + # "IHEOL" says to leave coordinates as they are + if key != "IHEOL": + if key != "IHREAL": prout("Event %d canceled, no x coordinate." % (i)) unschedule(i) continue w.i = int(round(scanner.real)) key = scanner.next() - if key != IHREAL: + if key != "IHREAL": prout("Event %d canceled, no y coordinate." % (i)) unschedule(i) continue @@ -6574,11 +6552,10 @@ if __name__ == '__main__': game = gamestate() idebug = 0 game.options = OPTION_ALL &~ (OPTION_IOMODES | OPTION_PLAIN | OPTION_ALMY) - # Disable curses mode until the game logic is working. - # if os.getenv("TERM"): - # game.options |= OPTION_CURSES | OPTION_SHOWME - # else: - game.options |= OPTION_TTY + if os.getenv("TERM"): + game.options |= OPTION_CURSES + else: + game.options |= OPTION_TTY seed = int(time.time()) (options, arguments) = getopt.getopt(sys.argv[1:], "r:s:tx") for (switch, val) in options: @@ -6620,7 +6597,7 @@ if __name__ == '__main__': logfp.write("# options %s\n" % " ".join(arguments)) random.seed(seed) scanner = sstscanner() - map(scanner.push, arguments) + map(scanner.append, arguments) try: iostart() while True: # Play a game @@ -6651,5 +6628,5 @@ if __name__ == '__main__': ioend() raise SystemExit, 0 except KeyboardInterrupt: - print"" + print "" pass