#!/usr/bin/python ## ## Simple web game by William D. Colburn ## http://infohost.nmt.edu/~schlake/ ## 505 480 9406 ## schlake@nmt.edu ## import cgi import cgitb import os import sys import random def out( msg ): print msg, '

' ## ## The classic wumpus map: a squashed dodecahedron ## exits = dict() exits[1] = [ 2, 3, 15 ] exits[2] = [ 1, 5, 18 ] exits[3] = [ 1, 4, 6 ] exits[4] = [ 3, 5, 7 ] exits[5] = [ 2, 4, 8 ] exits[6] = [ 3, 9, 11 ] exits[7] = [ 4, 9, 10 ] exits[8] = [ 5, 10, 14 ] exits[9] = [ 6, 7, 12 ] exits[10] = [ 7, 8, 13 ] exits[11] = [ 6, 15, 16 ] exits[12] = [ 9, 13, 16 ] exits[13] = [ 10, 12, 17 ] exits[14] = [ 8, 17, 18 ] exits[15] = [ 1, 11, 20 ] exits[16] = [ 11, 12, 19 ] exits[17] = [ 13, 14, 19 ] exits[18] = [ 2, 14, 20 ] exits[19] = [ 16, 17, 20 ] exits[20] = [ 15, 18, 19 ] rooms = dict() rooms[1] = "The Bedroom" rooms[2] = "The Kitchen" rooms[3] = "The Bathroom" rooms[4] = "The Closet" rooms[5] = "The Dining Room" rooms[6] = "The Hallway" rooms[7] = "The Laundry Room" rooms[8] = "The TV Room" rooms[9] = "The Pantry" rooms[10] = "The Foyer" rooms[11] = "The Living Room" rooms[12] = "The Garage" rooms[13] = "The Front Porch" rooms[14] = "The Back Porch" rooms[15] = "The Guest Bedroom" rooms[16] = "The Family Room" rooms[17] = "The Basement" rooms[18] = "The Workshop" rooms[19] = "Attic" rooms[20] = "Computer Room" class state: player = None tags = None def tag( self, i ): self.tags = self.tags[0:i] + '1' + self.tags[i+1:] def winner( self ): if self.tags == 'X11111111111111111111X': return True else: return False def tagged( self, i ): if self.tags[i] == '1': return True else: return False def __init__( self, turn=None, player=None, tags=None): if turn == None: raise Exception self.turn = turn if player: self.player = player else: self.player = random.randrange( 1, 21 ) # Python is stupid if tags: self.tags = tags else: self.tags = "X00000000000000000000X" def getField( field ): if form.has_key( field ): try: return int(form[field].value) except: return form[field].value return None def emitLoseForm(): print """

""" def emitWinForm(): print """
""" def emitForm( s ): print """
""" % ( s.turn, s.player, s.tags, rooms[exits[s.player][0]], rooms[exits[s.player][1]], rooms[exits[s.player][2]] ) ######################################################################## cgitb.enable() print 'Content-Type: text/html\n' # not an out() form = cgi.FieldStorage() s = None r = getField( 'player' ) if r: s = state( turn=getField( 'turn' ), player=getField( 'player' ), tags=getField( 'tags' ) ) if getField( 'masturbate' ): if s.tagged( s.player ): out( 'You have already masturbated in %s! You lose!' % rooms[s.player] ) emitLoseForm() sys.exit(0) s.tag( s.player ) out( 'You masturbate in %s.' % rooms[s.player] ) if s.winner(): out( 'You masturbated in every room! You win!' ) out( 'Your time was %d turns.' % s.turn ) emitWinForm() sys.exit(0) if getField( 'move0' ): s.player = exits[s.player][0] if getField( 'move1' ): s.player = exits[s.player][1] if getField( 'move2' ): s.player = exits[s.player][2] s.turn = s.turn + 1 else: s = state( turn = 1 ) out( 'You are in %s.' % (rooms[s.player]) ) emitForm( s )