Forum Archive

[share] Grid-based game for Pythonista

chriswilson

I have been working on a simple game to try to learn the Scene module. Feel free to try it. I would welcome feedback of any sort. I am a beginner and so my code will not be particularly tidy!

It consists of a few files (high score saving, configuration etc) and can be downloaded from GitHub here.

omz

I love the visual style and animations. It looks quite polished!

To be honest though, I don't really understand what I'm supposed to do in the game. What do the colors and numbers mean? What's my goal? Maybe this is a variation of some popular game that I'm just unaware of?

chriswilson

Thanks @omz
Yeah I was thinking I need to provide instructions. The object is to clear a white path across the grid by pressing squares. Doing this toggles the 8 surrounding squares and takes the pressed square out of action (this can be reset using the second 'power-up' below the title).

The other two 'power-ups' toggle all the squares, or allow you to toggle only a single square and not those around it.

Score is awarded for maximising the number of squares in the path, and points are deducted for remaining white squares and squares that you pressed. It's possible to lose points in a given round. The timer gets quicker with each level.

Unfortunately I imagine it will only work on iPhone 6/6S size screens, though I hope to change this.

omz

Ah! I think I understand it now (though I still fail a lot).

Unfortunately I imagine it will only work on iPhone 6/6S size screens, though I hope to change this.

Have you written this on an iPhone?

I've played it on the iPad, and it scaled up quite well.

chriswilson

Yes I wrote it on an iPhone. I did try to make the geometry relative to screen sizes, but don't have an iPad to check what it actually looks like! :)

omz

Your scaling works well, here's how it looks on an iPad:

iPad screenshot

omz

Hmm, screenshot doesn't show up here for some reason, maybe a problem with Dropbox...

chriswilson

That's good to see, thanks.

On iPhone it's like this:

ywangd

This quite a challenging and fun game. I noticed that sometimes the game starts with a maze already connected. Is this intended and I am still supposed to maximize the number of white squares?

chriswilson

@ywangd
Thanks for your comments.

Yes the grid setup is random and sometimes a path is already open. I could use a variant of the win-checking code to check for this and reshuffle the grid, but I have not done this yet.

As you say, it is still beneficial to maximise the size of the path anyway. You get a bonus if no white squares are left in the grid (bonus = rows + columns) and if your score is more than the grid size (rows * columns) you get one more of all three power-ups (whereas getting the star only gives you one of them).

If you don't use the power-ups and they reach maximum (9), further stars provide a bonus equal to the level number!

chriswilson

Thanks to @ccc for many useful edits. I've just learned a lot! :)

omz

It would be nice if I could see my final score when the game ends.

chriswilson

@omz I have just committed a few changes on GitHub, including particle effects (hopefully tastefully minimal!) and the score persists at the end of a game until a new game is started.

omz

Thanks! I'm starting to get the hang of this. :)

I noticed that the import for random.uniform was missing (see my pull request).

omz

@chriswilson Another minor issue: In the move_counters method, I think it should be self.squares in the list comprehensions (it's currently self.square which is undefined).

chriswilson

Hi @omz
I'm glad you're getting the hang of the game. Thanks for the pull request - I've merged it. The squares thing is now fixed as well - it must have changed during my edits earlier. Seems to working fine now.

Thanks again!

omz

@chriswilson Oh, one other thing: Are you on Twitter? I sometimes tweet about cool projects that are made with Pythonista, and I'd like to give proper credit (I'll just link to your GitHub otherwise). There is a chriswilson, but that doesn't seem to be you.

chriswilson

@omz Unfortunately I'm not on Twitter (yet). Feel free to link to my GitHub repo though. Thanks!

chriswilson

Oh and I should say thanks to @Cethric and @JonB who helped with some queries in this post last month.

omz

@chriswilson Thanks, I've posted a little video (with custom color scheme).

chriswilson

@omz Thanks! I like the colours!

omz

@chriswilson I just noticed a little bug: When you start the game while the device is in landscape mode, the layout isn't calculated correctly, because you're using get_screen_size, and the width/height are swapped in this situation. Could be fixed like this, for example:

screen_w, screen_h = min(get_screen_size()), max(get_screen_size())
chriswilson

@omz Thanks. That fix works a treat! I'll commit it to GitHub shortly.

Webmaster4o

@omz @chriswilson A shorter solution is just to write

screen_w, screen_h = sorted(get_screen_size())
chriswilson

I've noticed that the timer does not always reset when closing the settings screen and I cannot figure out why! The cancel() and save_settings() functions both call the new_game() method, and a new grid is made, but sometimes the timer is part-way through its cycle. Any ideas?