‐‐‐‐‐‐‐ Original Message ‐‐‐‐‐‐‐
On Saturday, May 25, 2019 8:55 PM, mspaintmaes...@gmail.com 
<mspaintmaes...@gmail.com> wrote:

> For just a score variable, it's probably not a big deal to have an = 0 in 
> there twice as duplicate code, but games are complicated and so I'm sure 
> you've got lots of other fields as well, and that's where the duplication 
> becomes problematic, especially if it's just there to appease the linter. I'm 
> assuming the Game object is sort of an application context that survives the 
> entire duration of the program's runtime, and that aside from score, you have 
> a variety of other fields as well that need to be reset. For things like 
> this, I would split game into a 2-tiered object, where each object has the 
> desired lifespan. Something like this...
>
> class ApplicationContext:
>   def __init__(self):
>     self.session = GameSession()
>
>   def reset(self):
>     self.session = GameSession()
>
> class GameSession:
>   def __init__(self):
>     self.score = 0
>     self.player_location = (0, 0)
>     self.zombies = self.build_zombie_list()
>     self.im_just_making_up_examples = etc
>

This looks like a possible solution, but I would advise against it. I've gone 
there a couple times I guess, and I ended up throwing away code that looked 
like this every time. Your `Game` can perfectly well deal with state itself. If 
you start writing state-holder objects, you'll create more work for yourself 
down the line. You'll think about it and then you're likely going to 
transparently proxy `GameSession` into `Game` using `__getattr__()`, and maybe 
even `__setattr__()` methods. Why, then, pretend you were dealing with 
attributes of your `Game` instance when you could and should just do that?

I think the best solution would be setting `self.score = None` in `__init__` 
and having it set to a proper value by .reset(). But I do admit that I'd 
probably type the line only to shut up a linter and not for any real purpose.

cheers!
mar77i


Sent with ProtonMail Secure Email.

Reply via email to