# 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()
    
        
