Pygrr - input (part 2)

 Now we've done the keyboard, let's move onto the mouse. The clicks are registered in the same method, and queried with these statements:

if pygrr.input.mouse_down("left"): # if the button is pressed that frame

if pygrr.input.mouse_up("left"): # if the button is released that frame

if pygrr.input.mouse("left") # if the button is held that frame

And for the mouse position, we can bind a function with tkinter to return the new position of the mouse. Which makes life incredibly easy... So, yeah! You can use pygrr.input.mouse_position(), mouse_x(), or mouse_y() to get the values... 

Let's make a small game with Pygrr, with our new-found mouse input!

import pygrr, random # add pygrr library and the random library to the project

def round_to_nearest_5(number): # function that rounds the given number to the nearest 5

    return round(number / 5) * 5

pygrr.create_window(width=500, height=400) # create the pygrr window

player = pygrr.Object() # create the player



spawn_time = 5 # time for the enemies to spawn in seconds

timer = 0 # this is the number that ticks down

enemies = [] # store all the enemies in this array

while True: # this is the game loop!


    timer -= pygrr.deltatime # tick timer down by the time since last frame


    if timer <= 0: # if delta is less than or equal to 0

        # create an enemy

        enemy = pygrr.Object(model=pygrr.create_model.triangle(8,15),fill_color="red")

        enemy.set_x(random.randint(-250, 250)) # give the enemy a random x coordinate

        enemy.set_y(random.randint(-200, 200)) # give the enemy a random y coordinate



        enemies.append(enemy) # add the enemy to the enemy array


        timer = spawn_time  # reset the timer

    for enemy in enemies: # run through all the enemies


        enemy.point_towards(player.get_x(), player.get_y()) # point enemy towards the player

        enemy.move_forward(50 * pygrr.deltatime) # move the enemy forwards 50 pixels a second


        # if the x coordinates of the mouse and the enemy are the same (rounded to nearest 5)

        if round_to_nearest_5(pygrr.input.mouse_x()) == round_to_nearest_5(enemy.get_x()):

            # if the y coordinates of the mouse and the enemy are the same (rounded to nearest 5) 

            if round_to_nearest_5(pygrr.input.mouse_y()) == round_to_nearest_5(enemy.get_y()):

                # thus, the mouse is over the enemy


                enemy.destroy() # remove the enemy from the canvas

                enemies.remove(enemy) # remove the enemy from the array

                spawn_time *= 0.9 # make the timer quicker by reducing the start time


    pygrr.next_frame() # rendering

Make sure you bear in mind that the hashtag (#) denotes a code-comment, so doesn't actually mean anything in the code - the point of it is to help people understand it! Here's the code without comments, see if you can still understand it:

import pygrr, random 

def round_to_nearest_5(number): 

    return round(number / 5) * 5

pygrr.create_window(width=500, height=400) 

player = pygrr.Object() 



spawn_time = 5 

timer = 0 

enemies = [] 

while True: 

    timer -= pygrr.deltatime 


    if timer <= 0: 

        enemy = pygrr.Object(model=pygrr.create_model.triangle(8,15),fill_color="red")

        enemy.set_x(random.randint(-250, 250)) 

        enemy.set_y(random.randint(-200, 200)) 



        timer = spawn_time  

    for enemy in enemies: 

        enemy.point_towards(player.get_x(), player.get_y()) 

        enemy.move_forward(50 * pygrr.deltatime) 

        if round_to_nearest_5(pygrr.input.mouse_x()) == round_to_nearest_5(enemy.get_x()):

            if round_to_nearest_5(pygrr.input.mouse_y()) == round_to_nearest_5(enemy.get_y()):



                spawn_time *= 0.9 



Okay, I'll stop being cruel now, here's a video!

I promise there was meaning to me swamping you with code... You might have seen how finicky it was to code the "mouse over", and that when the enemies hit the player, nothing happened... 

You guessed it, collision is coming next to a Pygrr near you!

Isaac, over and out...

Popular posts from this blog

Messing around with procedural art - Turtle graphics

The fossils of Morocco | Mosasaurus beaugei

Blog post #0 - Hello, world!