Skip to content

BaboyaChoch/Shot-Clock

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

37 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Shot Clock

A simple game based on catching fallings objects implemented in Python 3 utilzing Pygame

Objective & Rules

The objective of Shot Clock is to make as many shots as possible in the alloted 60 seconds countdown.

  • A Shot in Shot Clock is defined as a falling object, the balls, making contact with the hoop.

  • A shot is registed as a point, +1 to the player's score.

The hoop is fixed on the x axis, can only move from left to right.

  • Left right movement is controlled by keyboard inputs

    • A controls movement to the left

    • D controls movement to the right

The player has no control over the falling objects

Falling Objects(Balls) Logic

for i in range(4):

    if game_balls[i].is_off_screen():
        new_ball(i)
        
    game_balls[i].draw_ball(win)
    game_balls[i].update_position()
    

The logic behind the falling objects is the result of a few simple steps (Note: WIDTHxHEIGHT is the window size):

  1. At the start, spawn (n) number of balls, from a list of balls, at the top of the screen, y = 0.

    • Random x position values are generated.
  2. Each ball is spawned with its own speed, and its Y position is updated to make the ball 'fall', python ball.y += speed

  3. The ball continues to fall unless it:

    • (a) Makes contact with the hoop and is a shot (+1 to score).

    • (b) Goes off screen, ````python ball.y > HEIGHT. ```

  4. After the ball is registered as a made shot or goes off screen it is not cleared from the display, but is respawned at the top of the screen as a 'new' ball.

What this means is that the falling balls effect is created by the continuous looping of the same (n) number of balls.

For this project n = 4 for a screen of size 600x400, so the list of game balls has a length of 4.

  • n < 4 doesnt fill up the screen enough

  • n > 4 clutters the screen and results in a more overlapping.

Thus, n, the number of balls, is dependant on screen size

Scoring Logic & Hitboxes

for i in range(4):

    if game_balls[i].is_off_screen():
        new_ball(i)
        
    game_balls[i].draw_ball(win)
    game_balls[i].update_position()
        
    if (hitbox_y) < game_balls[i].y < (hitbox_y + 20) and (hitbox_x) < game_balls[i].x < (hoop_x + 120):
        SCORE += 1
        new_ball(i)

Scoring is determined by the collision of the balls with a defined hitbox of the hoop. This is calculated within the loop that updates the ball position because every time a ball is moved it may have touched the hitbox, a shot may have been made.

There are two hitboxes in Shot Clock.

  • The whole sprite is the hitbbox for each ball.

  • The hoop has a 120x20 reactangle, starting at the rim and going down, that is defined as its hitbox. Unlike the ball the whole hoop does not have a hitbox surrounding it. (see below image)

hoop hitbox

Demo

demo

Click for full demo

About

How many shots can you make? Created with PyGame

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages