On Sun, Jun 19, 2011 at 9:04 PM, John Salerno <johnj...@gmail.com> wrote: > On Jun 19, 8:52 pm, Chris Kaynor <ckay...@zindagigames.com> wrote: > >> Having a character class (along with possibly player character, non-player >> character, etc), make sense; however you probably want to make stuff like >> health, resources, damage, and any other attributes not be handles by any >> classes or inheritance in order to allow you to make such data-driven (ie, >> read from a file). Doing so makes the game much more extendable: using >> classes, you are likely limited to 5 or 'combinations and a few developers >> (plus, any designers need to know programming). >> >> A basic way to determine between using subclasses over a data driven >> approach is: is there significantly different back-end behavior or merely >> attribute differences. > > Can you give a basic example of how this data-driven approach would > work? You don't have to provide any code, just a description would be > helpful. Such as, do I create a data file per character, and then have > each character instance read/write to that file? Is it good to have so > many files open at once, or would they only need to be read, closed, > then opened again at the end to write? > --
I'm pretty sure he means that if the only difference between classes is configuration (i.e. you aren't actually going to change code between character classes, just base stats, growth rates, and a list of available skills or something of that nature), then you should store the configurations in a config file rather than making a new class. So rather than having class WizardCharacter(Character) : base_health = 50 ... class WarriorCharacter(Character) : base_health=70 ... You make a config file --- characterclasses.ini --- [Wizard] base_health=50 [Warrior] base_health=70 Then, when you make a new character, rather than doing a WizardCharacter() or a WarriorCharacter(), you do a Character(job='Wizard') and then look up the various defaults in your config file. Doing it this way makes it trivial to add a new class. If you want to use an old-fashioned INI file, you can use the ConfigParser class to read them. If you want to nest attributes (for instance, a list of sub-items), you'll probably want to go with XML and ElementTree. I guess you can also use JSON (which uses a syntax similar to Python's dictionaries) but I've never really tried to make one of those by hand before so I'm not sure how well it will work out. -- http://mail.python.org/mailman/listinfo/python-list