Programming Forums
User Name Password Register
 

RSS Feed
FORUM INDEX | TODAY'S POSTS | UNANSWERED THREADS | ADVANCED SEARCH

Reply
 
Thread Tools Display Modes
Old May 5th, 2005, 6:09 PM   #1
Sane
Programming Guru
 
Sane's Avatar
 
Join Date: Apr 2005
Posts: 1,819
Rep Power: 5 Sane will become famous soon enough
SOLVED: List not Callable

Any idea why it can't call the list into the class?

battle__screen.py
from turns import*

class battle_object (object):
    def __init__(self, stats):
        self.name = stats[0]
        self.level = stats[1]
        if len(stats) == 15:
            self.curHP = stats[3]
            self.maxHP = stats[2]
            self.curMP = stats[5]
            self.maxMP = stats[4]
            self.strength = stats[6]
            self.defense = stats[7]
            self.agility = stats[8]
            self.luck = stats[9]
            self.accuracy = stats[10]
            self.experience = stats[11]
            self.weapon = stats[12]
            self.armor = stats[13]
            self.magic = stats[14]
        elif len(stats) == 10:
            self.curHP = stats[2]
            self.maxHP = stats[2]
            self.curMP = stats[3]
            self.maxHP = stats[3]
            self.strength = stats[4]
            self.defense = stats[5]
            self.agility = stats[6]
            self.luck = stats[7]
            self.accuracy = stats[8]
            self.magic = stats[9]
            self.experience = '';self.weapon = '';self.armor = ''
    def attack(self, target):
            target.curHP -= self.strength
            #^^^insert formula here^^^#

class party (object):
    def __init__(self, MEMBERS, TYPE):
        self.members = MEMBERS
        self.type = TYPE
        if len(self.members) > 0: self.member1 = "T"
        if len(self.members) > 1: self.member2 = "T"
        if len(self.members) > 2: self.member3 = "T"
        if len(self.members) > 3: self.member4 = "T"
        if len(self.members) > 4: self.member5 = "T"
        if len(self.members) > 5: self.member6 = "T"
        self.status = "T"
    def Status(self):
        if self.type == "E":
            if len(self.members) > 0:
                if self.member1 == "T":
                    if enemy4.curHP < 1:
                        self.member1 = "F"
            if len(self.members) > 1:
                if self.member2 == "T":
                    if enemy5.curHP < 1:
                        self.member2 = "F"
            if len(self.members) > 2:
                if self.member3 == "T":
                    if enemy6.curHP < 1:
                        self.member3 = "F"
            if len(self.members) > 3:
                if self.member4 == "T":
                    if enemy7.curHP < 1:
                        self.member4 = "F"
            if len(self.members) > 4:
                if self.member5 == "T":
                    if enemy8.curHP < 1:
                        self.member5 = "F"
            if len(self.members) > 5:
                if self.member6 == "T":
                    if enemy9.curHP < 1:
                        self.member6 = "F"
        if self.type == "P":
            if len(self.members) > 0:
                if self.member1 == "T":
                    if character0.curHP < 1:
                        self.member1 = "F"
            if len(self.members) > 1:
                if self.member2 == "T":
                    if character1.curHP < 1:
                        self.member2 = "F"
            if len(self.members) > 2:
                if self.member3 == "T":
                    if character2.curHP < 1:
                        self.member3 = "F"
            if len(self.members) > 3:
                if self.member4 == "T":
                    if character3.curHP < 1:
                        self.member4 = "F"
        temp = 0
        for a in range(1, len(self.members)+1):
            if a == 1:
                if self.member1 == "T": temp += 1
            if a == 2:
                if self.member2 == "T": temp += 1
            if a == 3:
                if self.member3 == "T": temp += 1
            if a == 4:
                if self.member4 == "T": temp += 1
            if a == 5:
                if self.member5 == "T": temp += 1
            if a == 6:
                if self.member6 == "T": temp += 1
            if a == 7:
                if self.member7 == "T": temp += 1
            if a == 8:
                if self.member8 == "T": temp += 1
            if a == 9:
                if self.member9 == "T": temp += 1
        if temp == len(self.members):
            self.status = "F"
            
                        
def battle (party, enemy, area):

    """Figure and Declare Amount of Players on Screen"""
    p = [];p2 = [];e = [];e2 = []
    if len(party) > 0: character0 = battle_object(party[0]);p.append([0, character0.agility]);p2.append(1)
    if len(party) > 1: character1 = battle_object(party[1]);p.append([1, character1.agility]);p2.append(2)
    if len(party) > 2: character2 = battle_object(party[2]);p.append([2, character2.agility]);p2.append(3)
    if len(party) > 3: character3 = battle_object(party[3]);p.append([3, character3.agility]);p2.append(4)    
    if len(enemy) > 0: enemy4 = battle_object(enemy[0]);e.append([4, enemy4.agility]);e2.append(1)
    if len(enemy) > 1: enemy5 = battle_object(enemy[1]);e.append([5, enemy5.agility]);e2.append(2)
    if len(enemy) > 2: enemy6 = battle_object(enemy[2]);e.append([6, enemy6.agility]);e2.append(3)
    if len(enemy) > 3: enemy7 = battle_object(enemy[3]);e.append([7, enemy7.agility]);e2.append(4)
    if len(enemy) > 4: enemy8 = battle_object(enemy[4]);e.append([8, enemy8.agility]);e2.append(5)
    if len(enemy) > 5: enemy9 = battle_object(enemy[5]);e.append([9, enemy9.agility]);e2.append(6)

    """Declare Individual Party and Status"""
    CharacterParty = party(p2, "P")
    EnemyParty = party(e2, "E")

    """Choose the Order of Turns, Based on Agility"""
    turns = return_turns(p, e, 5)

    """Main Loop"""
    battle_return = "0"
    while battle_return == "0":

        if turns[0] == 0: print"Character0"     
        elif turns[0] == 1: print"Character1"     
        elif turns[0] == 2: print"Character2"     
        elif turns[0] == 3: print"Character3"     
        elif turns[0] > 3:
            target = random.choice(p2)
            if turns[0] == 4:
                enemy4.attack(target) ###randomize the action eventually
            #if turns[0] == 5: etc...
                      
        """Check Status"""
        CharacterParty.Status()
        EnemyParty.Status()
        if CharacterParty.status == "F":
            battle_return = 'You Died'
        if EnemyParty.status == "F":
            battle_return = 'You Won'

        """If A Short of Turns is Found, Add More. Otherwise, Advance one Turn"""
        if len(turns) == 15: turns__ = return_turns(p, e, 5) ; turns.append(turns__)
        else: turns = turns[1:]


   
##########################################
name="Turk"
lvl = 5
maxhp = 30
curhp = 30
maxmp = 5
curmp = 5
stn = 12
defn = 8
agi = 7
luck = 9
accuracy = 7
exp = figure_exp(lvl)
weapon = "Rusty Sword"
armor = "Rusty Armor"
magic = ["ice"]
Turk = [name, lvl, maxhp, curhp, maxmp, curmp, stn, defn, agi, luck, accuracy, exp, weapon, armor, magic]
party = [Turk]
area = "area_2"

#def average_enemy_stats([name, e_lvl, e_hp, e_mp, e_stn, e_defn, e_agi, e_luck, e_acc, magic]):
#    enemy = [name, e_lvl, e_hp, e_mp, e_stn, e_defn, e_agi, e_luck, e_acc, magic]
#    return enemy

e_lvl = (random.randrange(1,3))
enemy = [ ["Goblin",
                             (random.randrange(1,3)),
                             (((e_lvl + 5) * 2) + random.randrange(0, 3))+1,
                             (0)+1,
                             ((e_lvl) * 2)+1,
                             ((e_lvl) * 2) + random.randrange(-2, 2)+1,
                             ((e_lvl) * 2) + random.randrange(-2, 4)+1,
                             ((e_lvl) * 2) + random.randrange(-2, 1)+1,
                             ((e_lvl) +30) / 10 + random.randrange(0, e_lvl)+1,
                             ["fire"] ] ]
battle(party, enemy, area)
##########################################

turns.py
import random

def figure_exp(lvl):
    experience = 0
    for a in range(1, lvl+1):experience += (a/2*500 + a*10)
    b = str(experience)
    return b

def return_turns(party, enemy, ratio):

    """Declare an array of values carrying the character
    number and speed, for all characters"""
    SpeedSet = []    
    Set = []    
    for a in range(len(party)):
        Set.append(10*party[a][1]+party[a][0])
        b= Set[a]
        SpeedSet.append(b)
    Set = []           
    for a in range(len(enemy)):
        Set.append(10*enemy[a][1]+enemy[a][0])
        b= Set[a]
        SpeedSet.append(b)

    """Sort from greatest to least to more easily manage"""
    SpeedSet.sort()
    SpeedSet.reverse()

    """Assign a ratio value based on the difference from
    the maximum speed, including the ratio value inputted
    in the main function argument"""
    NewSet = []
    for a in range(len(SpeedSet)):
        NewSet.append( int((( float( int( str(max(SpeedSet)) [:len(str(max(SpeedSet)))-1] ) - int( str(SpeedSet[a]) [:len(str(SpeedSet[a]))-1] )) / (int(max(SpeedSet))/ratio)+1) *100)+1 ))

    """Eliminate odd ratio values"""
    for a in range(len(NewSet)):
        if NewSet[a]%2 == 0:
            NewSet[a]+=1
            
    """Assign turns based on the divisibility of one's ratio"""
    Turns = []
    for b in range(10000):
        for a in range(len(NewSet)):
            if (b+1)%NewSet[a] == 0: Turns.append(int(str(SpeedSet[a])[len(str(SpeedSet[a]))-1]))

    """End function"""
    return Turns 


    #################################################################
    player1 = 0
    player2 = 0
    enemy1 = 0
    enemy2 = 0
    
    for a in range(len(Turns)):
        if Turns[a] == "1": player1 += 1
        if Turns[a] == "2": player2 += 1
        if Turns[a] == "3": enemy1 += 1
        if Turns[a] == "4": enemy2 += 1
    print "Player 1: Gets %d Turns, With %s Speed."%(player1, str(party[0][1]))
    print "Player 2: Gets %d Turns, With %s Speed."%(player2, str(party[1][1]))
    print "Enemy 1: Gets %d Turns, With %s Speed."%(enemy1, str(enemy[0][1]))
    print "Enemy 2: Gets %d Turns, With %s Speed."%(enemy2, str(enemy[1][1]))
    
    print Turns
    #################################################################

Last edited by Sane; May 6th, 2005 at 4:16 PM.
Sane is offline   Reply With Quote
Old May 6th, 2005, 4:16 PM   #2
Sane
Programming Guru
 
Sane's Avatar
 
Join Date: Apr 2005
Posts: 1,819
Rep Power: 5 Sane will become famous soon enough
Solved: Party was already a variable, so I confused the program. Oops. o_o
Sane is offline   Reply With Quote
Old May 7th, 2005, 7:47 AM   #3
hydroxide
Programmer
 
Join Date: Apr 2005
Posts: 73
Rep Power: 4 hydroxide is on a distinguished road
Quote:
Originally Posted by Sane
from turns import*

class battle_object (object):
    def __init__(self, stats):
        self.name = stats[0]
        self.level = stats[1]
Just a note re parameters - You can use * when passing a list (and ** when passing a dict for keywords) to receive elements of that list individually:
def mytest(HP, MP, DEX, CHR):
    print "health is", HP
    print "mana is", MP
    print "dex is", DEX
    print "chr is", CHR

x = (121, 14)
y = {"CHR": 14, "DEX": 12}
mytest(*x, **y)

--OH.
hydroxide is offline   Reply With Quote
Reply

Bookmarks

« Previous Thread in Forum | Next Thread in Forum »

Currently Active Users Viewing This Thread: 1 (0 members and 1 guests)
 
Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump




DaniWeb IT Discussion Community
All times are GMT -5. The time now is 7:40 PM.

Powered by vBulletin® Version 3.7.0, Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Copyright ©2007 DaniWeb® LLC