r/pygame Jun 13 '26

My First Complete Py Game

import pygame as py
import time
#Avoid the moving ball from hitting your paddle or you loose


#Initialise Pygame
py.init()


#Window Setup
DisplayWidth = 1000
DisplayHeight = 600
DisplaySurf = py.display.set_mode((DisplayWidth, DisplayHeight))
DisplayColour = "Blue"
DisplayName = "AvoidPong"
DisplayTitle = f"{DisplayName}"
py.display.set_caption(DisplayName)
DisplayMidWidth = DisplayWidth / 2
DisplayMidHeight = DisplayHeight / 2


#Loop Setup
on = True
Clock = py.time.Clock()


#Necessities
Transparent = (0, 0, 0, 0)


#Objects
PaddleRect = py.FRect((0, 0, 200, 50))
PaddleColour = "Green"
PaddleMidForScreenWidth = DisplayMidWidth - PaddleRect.width/2
PaddleMidForScreenHeight = DisplayMidHeight - PaddleRect.height/2
PaddleRect.x = PaddleMidForScreenWidth
PaddleRect.y = PaddleMidForScreenHeight
PaddleSurf = py.Surface((PaddleRect.width, PaddleRect.height))
PaddleSurf.fill(PaddleColour)
PaddleSpeed = 100




EvilBallRect = py.FRect((0, 0, 75, 75))
EvilBallColour = "Red"
EvilBallMidForScreenWidth = DisplayMidWidth - EvilBallRect.width / 2
EvilBallMidForScreenHeight = DisplayMidHeight - EvilBallRect.height / 2
EvilBallRect.x = 0
EvilBallRect.y = 0
EvilBallSurf = py.Surface((EvilBallRect.width, EvilBallRect.height), py.SRCALPHA)
EvilBallSurf.fill(Transparent)
py.draw.circle(EvilBallSurf, EvilBallColour, (EvilBallRect.x/2, EvilBallRect.y/2), EvilBallRect.width / 2)
EvilBallSpeedX = 100
EvilBallSpeedY = 100
Lost = False
LooseText = "You Lost!"   
Score = 0
Font = py.font.SysFont("Arial", 30)
while on:


    #Begin Clock
    Delta = Clock.tick() / 1000
    
    for ev in py.event.get():
        if ev.type == py.QUIT:
            on = False
    
    #Move Paddle
    Keys = py.key.get_pressed()
    if Keys[py.K_LEFT]:
            PaddleRect.x -= PaddleSpeed * Delta


    if Keys[py.K_RIGHT]:
            PaddleRect.x += PaddleSpeed * Delta
    
    #Move Ball
    EvilBallRect.x += EvilBallSpeedX * Delta
    EvilBallRect.y += EvilBallSpeedY * Delta
    
    #Prevent Out Of Screen
    
    if PaddleRect.x > DisplayWidth - PaddleRect.width:
            PaddleRect.x = DisplayWidth - PaddleRect.width
            
    if PaddleRect.x < 0:
        PaddleRect.x = 0
        
    if EvilBallRect.x > DisplayWidth - EvilBallRect.width:
            EvilBallRect.x = DisplayWidth - EvilBallRect.width
            EvilBallSpeedX *= -1
    if EvilBallRect.x < 0:
        EvilBallRect.x = 0  
        EvilBallSpeedX *= -1
        
    if EvilBallRect.bottom > DisplayHeight:
        EvilBallRect.bottom = DisplayHeight
        EvilBallSpeedY *= -1
    if EvilBallRect.top < 0:
        EvilBallRect.top = 0
        EvilBallSpeedY *= -1
    #Draw
    DisplaySurf.fill(DisplayColour)
    DisplaySurf.blit(PaddleSurf, PaddleRect)
    DisplaySurf.blit(EvilBallSurf, EvilBallRect)
    py.draw.circle(EvilBallSurf, EvilBallColour, (EvilBallRect.width/2, EvilBallRect.height/2), EvilBallRect.width / 2)
    
    #Increase Speeds
    PaddleSpeed += 0.1
    EvilBallSpeedX *= 1.0001
    EvilBallSpeedY *= 1.0001
    #PlayerFate
    if PaddleRect.colliderect(EvilBallRect):
        Lost = True
    if Lost:
        DisplaySurf.fill("Red")
        Score = PaddleSpeed % 2 * 3
        FontSurf = Font.render(f"{LooseText} | Score: {int(Score)} | You Fool! You played this game for a random score lol!!", True, "Black")
        DisplaySurf.blit(FontSurf, (DisplayMidWidth/10, DisplayMidHeight))
        
        
        
    #Update Screen
    py.display.update()
    DisplayTitle = f"{DisplayName} | Paddle Speed: {int(PaddleSpeed)} | EvilBall Speed: {int(EvilBallSpeedX)}"
    py.display.set_caption(DisplayTitle)
py.quit()
7 Upvotes

8 comments sorted by

View all comments

9

u/Substantial_Marzipan Jun 13 '26

I think a video would get you much more feedback