FAQ: Python in Pokitto


#21

Here are the gaming API functions listed: [Wiki]uPyGame & umachine library reference (for Micro Python in Pokitto)

You can only draw a filled rectangle.


#22

Thanks. I had checked that list but somehow missed the fill function…


#23

My solution is to use 2 images, 1 horizontal and 1 vertical line then just draw however many you need to the screen


#24

Images? There’s no ‘draw line’ function? Or is it a speed thing?

Hrm, I wonder if image rendering is faster or slower than bresenham’s line algorithm…


#25

I know, I couldn’t find anything other than drawing images or filling rects, so I did what anyone else would do. I used images of short lines and drew as many as I needed to create a rect.


#26

As already two people were requesting drawing primitives, I am curious what you are doing with the primitives? I almost never use them in games.


#27

I wanted to draw some lines and mistakenly thought I could use the filled rectangle function.
I always assumed that just drawing lines would be “better” in terms of “performance” than having to store and draw a whole bitmap of which most pixels are transparent. I currently don’t really need the lines though.


#28

Particles, particles everywhere.
And lasers light beams.
Also debug hit box, 3d flat shaded triangles, landscapes.
If you are not a pixel artist primitives help a lot.


#29

Yes laser light beams!


#30

I usually use primitives for drawing UI elements.
Boxes to draw text on come in very handy.
(Fill a rect in a background colour, draw an outline of a foreground colour,
put text in the resulting empty space.)

Also shape drawing is dynamically scalable, bitmaps aren’t (unless you repeat part of the image).

And shapes are good placeholders for when you can’t be bothered to do art.


#31

I second this, although with a rectangle primitive I could manage.

Drawpixel would be most important for me


#32

@Hanski is it possible to not get always the same random numbers?


#33

Now that’s interesting, a random number generator not generating random numbers. Maybe you need a function to reset it?


#34

Yeah I need a way to set the seed based on the time or something


#35

Just use a splash screen to seed your random numbers:


def splashScreen():
    while True:
        random.getrandbits(30)
        eventtype = upygame.event.poll()
        if eventtype != upygame.NOEVENT and eventtype.type == upygame.KEYUP:
            return
        screen.blit( splash.bmp, 0, 0 )       
        upygame.display.flip()

This calls random.getrandbits every frame, until the player presses a button. Since the amount of time until that happens isn’t constant, you get a different sequence of random numbers from then on.


#36

Deviously clever. I love it.


#37

This also has the advantage to open a predictable way to control the RNG, which is really interesting for speedrunning :slight_smile:


#38

Exactly how I do it in Noggin. A very good method.


#39

@spinal the goal in Noggin is to flip all tiles right? Also is it possible to make so that the game knows when there’s no moves possible and display a game over? My guess is that it would be a bit complicated but I had to ask. I am enjoying the game a lot either way.


[GAME]Noggin!
#40

That’s the goal alright. As for detecting no further moves, I had though about that, but I really can’t think of a way to do it. I would imagine some sort of flood-fill or path-finding routine might be involved, but I’m not sure how possible it could be.


[GAME]Noggin!