What's the best way to write this base class?

Terry Reedy tjreedy at udel.edu
Mon Jun 20 13:58:57 EDT 2011


On 6/20/2011 3:12 AM, Benjamin Kaplan wrote:
> On Sun, Jun 19, 2011 at 9:04 PM, John Salerno<johnjsal at gmail.com>  wrote:
>> On Jun 19, 8:52 pm, Chris Kaynor<ckay... at 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
int = 70

> [Warrior]
> base_health=70
int = 30

[Gandolf]
base_health = 60
int = 100

My point here being that with a data approach, non-programmers can also 
define named, unique NPCs with custom stats as well as generic classes

> 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.


-- 
Terry Jan Reedy




More information about the Python-list mailing list