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 Adeola Bannis other posts by this author
May 24 2006 6:03PM messages near this date
Re: [pygame] Ridiculously simple way to seperate game-object code | Re: [pygame] Ridiculously simple way to seperate game-object code
Holy Grail, Batman!

For some reason I am reminded of NetHack. Am I wrong, or could this
have great use in a text adventure game? Or even a graphical game, but
one should start small.

And Hofmann... you wouldn't happen to play the trumpet, would you?

On 5/21/06, Kamilche <klachemin@[...].net>  wrote:
>  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