Example #1
0
    def __init__(self, core, name='Empty', isPlayer=False, isRuler=False, isGovernor=False, master=None):
        self.core = core
        
        self.name = name
        self.__name__ = name
        
        self.isPlayer = isPlayer
        self.stats = Attributes()
        ranstats = lambda: choice([1, 2, 2, 3, 3, 3, 4, 4, 5])

        self.stats.Will.value = ranstats()
        self.stats.Stamina.value = ranstats()
        self.stats.Personality.value = ranstats()
        self.stats.Leadership.value = ranstats()
        
        self.strength  = self.stats.Stamina()
        
        if isPlayer == False:
            self.army = Army(self, choice([100, 200, 300]))
        else:
            self.army = Army(self, 300)
    
        self.master = master
    
        self.core.generals.append(self)
        if isRuler or isPlayer:
            self.isRuler = True
            self.core.rulers.append(self)
        else:
            self.isRuler = False
        if isRuler and not isPlayer:
            self.AI = GenericAI(self.core, self)
Example #2
0
class general(object):
    
    __name__ = 'Generic General'
    
    def __init__(self, core, name='Empty', isPlayer=False, isRuler=False, isGovernor=False, master=None):
        self.core = core
        
        self.name = name
        self.__name__ = name
        
        self.isPlayer = isPlayer
        self.stats = Attributes()
        ranstats = lambda: choice([1, 2, 2, 3, 3, 3, 4, 4, 5])

        self.stats.Will.value = ranstats()
        self.stats.Stamina.value = ranstats()
        self.stats.Personality.value = ranstats()
        self.stats.Leadership.value = ranstats()
        
        self.strength  = self.stats.Stamina()
        
        if isPlayer == False:
            self.army = Army(self, choice([100, 200, 300]))
        else:
            self.army = Army(self, 300)
    
        self.master = master
    
        self.core.generals.append(self)
        if isRuler or isPlayer:
            self.isRuler = True
            self.core.rulers.append(self)
        else:
            self.isRuler = False
        if isRuler and not isPlayer:
            self.AI = GenericAI(self.core, self)
            
    def promote(self, place):
        if self.checkLoyalty(place.owner) == False:
            print 'The general must be loyal to the territory\'s owner.'
            return False
        elif self not in place.generals:
            print 'The general must be in the territory that he is suppose to lead'
            return False
        else:
            place.governor = self
            return True
    
    def checkLoyalty(self, target):
        if self == target:
            return True
        if self.master != None:
            x = self
            while x.master != target and x.master != None:
                print '{0}\'s master is {1}'.format(x.name, x.master.name)
                x = x.master
            if x is target or x.master is target:
                return True
            else:
                return False
        else:
            return False
    
    def Attack(self, target):
        if self.army == None:
            return

        elif isinstance(target, Land):
            targetStrength = target.population
            atk = (self.stats.Leadership() + self.army.experience)*self.army.strength*self.army.men
            dfn = (target.loyalty * target.defence)/targetStrength
            if target.population > atk-dfn:
                target.population -= atk-dfn
                Term.fprint('[cb{0}[cc attacks [cb{1}[cc, bringing their population down from [cr{2}[cc to [cr{3}[cc'.format(self.name, target.name, str(targetStrength), str(target.population)))
                #print 'atk:(' + str(atk) + ')\n'
            else:
                print self.name + ' has conquered ' + target.name + ' with an attack of ' + str(atk)
                oldLocation = self.location
                target.owner = self
                target.governor = self
                target.generals.append(self)
                oldLocation.generals.remove(self)
                if self.isPlayer or self.location.governor == self:
                    if oldLocation.generals.__len__() == 0:
                        oldLocation.governor = None
                    else:
                        for x in range(oldLocation.generals.__len__()):
                            if oldLocation.generals[x].checkLoyalty(self):
                                
                                assigngov = AssignGovernor(self)
                                assigngov.eval(oldLocation)
                                del assigngov
                                self.location = target
                                return
                        oldLocation.governor = oldLocation.generals[0]
                
        elif isinstance(target, general):
            atk = (self.stats.Leadership() + self.army.experience)*self.army.strength*self.army.men
            dfn = target.Defend(self, atk)
        
            print 'atk:(' + str(atk) + ') dfn:(' + str(dfn[0]) + ') total damage:(' + str(dfn[1]) + ')\n' 
                
    def Defend(self, target, atk):
        if isinstance(target, general):
            defence = (self.stats.Leadership() + self.army.experience)
            defence *= self.army.experience
            defence *= self.army.men
            defence *= 2
            
            damage = atk - defence
            
            if damage <= 0:
                print 'failure, ' + self.name + '\'s defence was too high, ' + target.name + ' could not damage them\n'
            else:
                print target.name + ' has attacked ' + self.name + ' with a damage of ' + str(damage) + ', bringing them down from ' + str(self.army.men) + ' men to ' + str(self.army.men-damage)  + '\n\n'
                
                return [defence, damage]
            
    def NextTurn(self):
        if self.isRuler and not self.isPlayer:
            self.AI.run()
        self.strength += self.stats.Stamina()/2 #I don't want them to gain strength too fast.
Example #3
0
class General(object):
    
    def __init__(self, core, name='Empty', isPlayer=False, isRuler=False, isGovernor=False, master=None, color=None, id=None):
        self.core = core
        
        self.id = id        
        self.name = name
        
        self.isPlayer = isPlayer
        self.stats = Attributes()
        ranstats = lambda: choice([1, 2, 2, 3, 3, 3, 4, 4, 5])

        self.stats.Will.value = ranstats()
        self.stats.Stamina.value = ranstats()
        self.stats.Personality.value = ranstats()
        self.stats.Leadership.value = ranstats()
        
        self.strength  = self.stats.Stamina()
        
        if isPlayer == False:
            self.army = Army(self, choice([100, 200, 300]))
        else:
            self.army = Army(self, 300)
    
        self.master = master
    
        self.core.generals.append(self)
        if isRuler or isPlayer:
            self.isRuler = True
            self.core.rulers.append(self)
        else:
            self.isRuler = False
        if isRuler and not isPlayer:
            self.AI = GenericAI(self.core, self)
            
        if color is None:
            color = (randint(100, 255), randint(100, 255), randint(100, 255), 255)
        self.color = color
            
    def checkLoyalty(self, target):
        if self == target:
            return True
        if self.master != None:
            x = self
            while x.master != target and x.master != None:
                x = x.master
            if x is target or x.master is target:
                return True
            else:
                return False
        else:
            return False

    def Attack(self, target):
        if self.army == None:
            return

        elif isinstance(target, Land):
            targetStrength = target.population
            atk = (self.stats.Leadership() + self.army.experience)*self.army.strength*self.army.men
            dfn = (target.loyalty * target.defence)/targetStrength
            if target.population > atk-dfn:
                target.population -= atk-dfn
            else:
                oldLocation = self.location
                target.owner = self
                target.governor = self
                target.generals.append(self)
                oldLocation.generals.remove(self)
                if self.isPlayer or self.location.governor == self:
                    if oldLocation.generals.__len__() == 0:
                        oldLocation.governor = None
                    else:
                        for x in range(oldLocation.generals.__len__()):
                            if oldLocation.generals[x].checkLoyalty(self):
                                
                                assigngov = AssignGovernor(self)
                                assigngov.eval(oldLocation)
                                del assigngov
                                self.location = target
                                return
                        oldLocation.governor = oldLocation.generals[0]
                
        elif isinstance(target, general):
            atk = (self.stats.Leadership() + self.army.experience)*self.army.strength*self.army.men
            dfn = target.Defend(self, atk)

    def Defend(self, target, atk):
        if isinstance(target, general):
            defence = (self.stats.Leadership() + self.army.experience)
            defence *= self.army.experience
            defence *= self.army.men
            defence *= 2
            
            damage = atk - defence
                
            return [defence, damage]
            
    def NextTurn(self):
        if self.isRuler and not self.isPlayer:
            self.AI.run()
        self.strength += self.stats.Stamina()/2 #I don't want them to gain strength too fast.