# Version 1.0 Oct 31, 2003 import dragons from random import randint class Game(dragons.Game): def __init__(self, boardsize): dragons.Game.__init__(self, boardsize) # initialize parent class self.pwobjects = {} # empty dictionary, will hold power objects self.pwpositions = {} # holds power object positions def addobject(self, pwobject): """ Add a new power object to the board. When a player lands on it, the player aquires the object's powers """ while True: newpos = (randint(0,self.boardsize[0]), randint(0,self.boardsize[1])) if newpos not in self.pwpositions: pwobject.position = newpos self.pwobjects[pwobject.name] = pwobject self.pwpositions[pwobject.position] = pwobject break def removeobject(self, pwobject): """ Remove a power object from the board. """ del self.pwobjects[pwobject.name] del self.pwpositions[pwobject.position] def showobjects(self): """ List all power objects, and their positions to the screen """ for pwobj in self.pwobjects.values(): print "Power object %s is at %s" % (pwobj.name , pwobj.position) def checkpower(self): """ See if any players are on top of Power objects, and pick up if so """ for player in self.players.values(): # lookup position, return object, or 0 if player.position in self.pwpositions: pwobj = self.pwpositions[player.position] print "Player %s is on the %s!" % (player.name, pwobj.name) print "Player %s picks up the %s!" % (player.name, pwobj.name) player.pwobjects.append(pwobj) del self.pwobjects[pwobj.name] del self.pwpositions[pwobj.position] def __repr__(self): return 'A game of %s players on a board of %s' % (len(self.players), self.boardsize) class Powerobj: """ Class defining power objects in the game """ def __init__(self, name): self.name = name self.boardsize = None def __repr__(self): return "Power object: %s" % self.name class Player(dragons.Player): def __init__(self, name): dragons.Player.__init__(self, name) self.pwobjects = [] # list of my power objects def powers(self): if len(self.pwobjects)==0: print "%s has no power objects" % self.name else: print "%s has the following power objects:" % self.name for pwobj in self.pwobjects: print pwobj.name def test(): mygame = Game((10,10)) p1 = Player('Gandalf') p2 = Player('Frodo') mygame.addplayer(p1) mygame.addplayer(p2) o1 = Powerobj('Wand') o2 = Powerobj('Elven Sword') mygame.addobject(o1) mygame.addobject(o2) mygame mygame.showboard() mygame.showplayers() mygame.showobjects() p1.move('N') p2.move('N') mygame.showboard() mygame.showplayers() p1.move('E') p2.move('W') mygame.showboard() mygame.showplayers() p1.powers() p2.powers()