ASPN ActiveState Programmer Network
ActiveState
/ Home / Perl / PHP / Python / Tcl / XSLT /
/ Safari / My ASPN /
Cookbooks | Documentation | Mailing Lists | Modules | News Feeds | Products | User Groups


Recent Messages
List Archives
About the List
List Leaders
Subscription Options

View Subscriptions
Help

View by Topic
ActiveState
.NET Framework
Open Source
Perl
PHP
Python
Tcl
Web Services
XML & XSLT

View by Category
Database
General
SOAP
System Administration
Tools
User Interfaces
Web Programming
XML Programming


MyASPN >> Mail Archive >> pygame-users
pygame-users
Re: [pygame] Ridiculously simple way to seperate game-object code
by Kamilche other posts by this author
May 21 2006 12:29AM messages near this date
Re: [pygame] Ridiculously simple way to seperate game-object code | Re: [pygame] Ridiculously simple way to seperate game-object code
It's possible to do it without using custom code for each class.
Take a look at this data driven snippet:

class Person(object):
     name = 'Person'
     health = 50
     hunger = 10
     def __setattr__(self, key, val):
         if key == 'health':
             if val < 1:
                 print "%s is dead!" % self.name
             else:
                 print "%s has %d %s remaining" % (self.name, val, key)
         elif key == 'hunger':
             if val >  100:
                 print "%s has starved to death!" % self.name
             else:
                 print "%s is %d%% hungry" % (self.name, val)
         object.__setattr__(self, key, val)

class GameObject(object):
     name = 'GameObject'
     adj = 'affects'
     stat = 'health'
     empty = 'The %s is empty!'
     value = -1
     amt = 1
     fmtline = "@NAME @ADJ @TARGET for @VALUE"
     def Use(self, target):
         if self.amt < 1:
             print self.empty % self.name
         else:
             val = getattr(target, self.stat, 0) + self.value
             s = self.fmtline
             s = s.replace('@NAME', self.name)
             s = s.replace('@TARGET', target.name)
             s = s.replace('@ADJ', self.adj)
             s = s.replace('@STAT', self.stat)
             s = s.replace('@VALUE', str(self.value))
             print s
             setattr(target, self.stat, val)
             self.amt -= 1

class MachineGun(GameObject):
     name = 'Machine gun'
     adj = 'shoots'
     value = -10
     amt = 100

class Bomb(GameObject):
     name = 'Bomb'
     adj = 'blasts'
     empty = 'The %s has already been detonated!'
     value = -100
     amt = 1

class HealthPotion(GameObject):
     name = 'Health Potion'
     adj = 'heals'
     value = 10
     amt = 1

class Poison(GameObject):
     name = 'Belladonna'
     adj = 'poisons'
     value = -1
     amt = 1

class Food(GameObject):
     name = 'Banana'
     fmtline = '@TARGET eats the @NAME '
     stat = 'hunger'
     empty = "The %s has already been eaten!"
     value = -1
     amt = 1

def main():

     person = Person()
     machinegun = MachineGun()
     for i in range(5):
         machinegun.Use(person)

     person = Person()
     bomb = Bomb()
     bomb.Use(person)
     bomb.Use(person)

     person = Person()
     machinegun = MachineGun()
     for i in range(4):
         machinegun.Use(person)

     potion = HealthPotion()
     potion.Use(person)

     poison = Poison()
     poison.Use(person)

     banana = Food()
     banana.Use(person)
     banana.Use(person)

main()

''' Sample output follows:

Machine gun shoots Person for -10
Person has 40 health remaining
Machine gun shoots Person for -10
Person has 30 health remaining
Machine gun shoots Person for -10
Person has 20 health remaining
Machine gun shoots Person for -10
Person has 10 health remaining
Machine gun shoots Person for -10
Person is dead!
Bomb blasts Person for -100
Person is dead!
The Bomb has already been detonated!
Machine gun shoots Person for -10
Person has 40 health remaining
Machine gun shoots Person for -10
Person has 30 health remaining
Machine gun shoots Person for -10
Person has 20 health remaining
Machine gun shoots Person for -10
Person has 10 health remaining
Health Potion heals Person for 10
Person has 20 health remaining
Belladonna poisons Person for -1
Person has 19 health remaining
Person eats the Banana
Person is 9% hungry
The Banana has already been eaten!
'''
Thread:
James Hofmann
Sami Hangaslammi
James Hofmann
Kamilche
Adeola Bannis
Kris Schnee
Lenard Lindstrom

Privacy Policy | Email Opt-out | Feedback | Syndication
© ActiveState Software Inc. All rights reserved