Arkanoid 1.2

I added some code to speed up the ball when the player bar is moving at the moment of the collision, with the function speed_up():

def speed_up():
    global vel_bal
    x, y = pygame.mouse.get_pos()
    if startx == x:
        vel_bal = 1
        print("Normal speed")
    else:
        vel_bal = 2
        print("Speed up")

We also added the bricks, but, at the moment they are just images and no collision is detected.

They are built with this sprite class:

class Sprite:
    "Draw Player 2"

    def __init__(self, x, y):
        self.x = x
        self.y = y
        self.update()

    def update(self):
        pygame.draw.rect(screen, GREEN, (self.x, self.y, 50, 10))

And then all the bricks are create with this function:

def create_bricks():
    blist = """
10111111
11111011
    """
    bricks = []
    h = 20
    w = 0
    for brick in blist[1:-1]:
        if brick == "1":
            bricks.append(Sprite(20 + w * 60, h))
            if w > 7:
                w = 0
                h += 20
        w += 1
    return bricks

bricks = create_bricks()

So the bricks list contains all the sprites, that are displayed in the while loop with the update function of every sprite:

    for brick in bricks:
        brick.update()

The whole code

# pong!
import pygame
from random import choice, randrange

BLACK = (0, 0, 0)
RED = (255, 0, 0)
GREEN = (0, 255, 0)

# Coordinates p1, p2 and ball
x1 = 490
y1 = 490
x2 = 0
y2 = 250
xb = 500
yb = 300

dbo = 'left'
dbv = 'down'

scorep1 = 0
scorep2 = 0

vel_bal = 2

clock = pygame.time.Clock()
screen = pygame.display.set_mode((500, 500))
pygame.display.set_caption("Game")

pygame.init()




def sprite1(x, y):
    "Draw Player 1"
    pygame.draw.rect(screen, RED, (x, y, 50, 10))


class Sprite:
    "Draw Player 2"

    def __init__(self, x, y):
        self.x = x
        self.y = y
        self.update()

    def update(self):
        pygame.draw.rect(screen, GREEN, (self.x, self.y, 50, 10))


def move_ball(x, y):
    "The ball moves"
    global xb, yb, dbo, dbv
    if dbo == "left":
        xb -= vel_bal
        if xb < 10:
            dbo = "right"
    if dbv == 'down':
        yb += vel_bal
    if dbv == 'up':
        yb -= vel_bal
        if yb < 10:
            dbv = 'down'
    if dbo == "right":
        xb += vel_bal
        if xb > 480:
            dbo = "left"
    pygame.draw.ellipse(screen, GREEN, (xb, yb, 10, 10))


def collision():
    global startx
    global x1, y1
    global x2, y2
    global xb, yb
    global x, y
    global dbo, dbv, vel_bal
    global scorep1, scorep2
    if dbo == "left":
        if yb > 480:
            if (xb >= x and xb < x + 50):
                print("Collision detected")
                dbv = "up"
                print(dbv)
                print(yb)
                speed_up()
            else:
                pygame.draw.ellipse(screen, BLACK, (xb, yb, 20, 20))
                pygame.display.update()
                xb, yb = 500, 300


def move1():
    global y2
    if y2 <= 450:
        if keys[pygame.K_z]:
            y2 += 20
    if y2 > 0:
        if keys[pygame.K_a]:
            y2 -= 20


def move2():
    global y1
    if y1 <= 450:
        if keys[pygame.K_m]:
            y1 += 20
    if y1 > 0:
        if keys[pygame.K_k]:
            y1 -= 20

def exit(event):
    global loop

    if event.type == pygame.QUIT:
        loop = 0
    if event.type == pygame.KEYUP:
        if event.key == pygame.K_ESCAPE:
            loop = 0
    return loop


def speed_up():
    global vel_bal
    x, y = pygame.mouse.get_pos()
    if startx == x:
        vel_bal = 1
        print("Normal speed")
    else:
        vel_bal = 2
        print("Speed up")


pygame.mouse.set_visible(False)
loop = 1

# This is to increase ball speed
startx = 0

def create_bricks():
    blist = """
10111111
11111011
    """
    bricks = []
    h = 20
    w = 0
    for brick in blist[1:-1]:
        if brick == "1":
            bricks.append(Sprite(20 + w * 60, h))
            if w > 7:
                w = 0
                h += 20
        w += 1
    return bricks

bricks = create_bricks()

while loop:
    keys = pygame.key.get_pressed()
    for event in pygame.event.get():
        loop = exit(event)
    move1()
    move2()
    move_ball(xb, yb)
    x, y = pygame.mouse.get_pos()
    sprite1(x, y1)
    collision()
    startx = x
    for brick in bricks:
        brick.update()
    pygame.display.update()
    screen.fill((0, 0, 0))
    clock.tick(120)



pygame.quit()

How it looks like

Published by pythonprogramming

Started with basic on the spectrum, loved javascript in the 90ies and python in the 2000, now I am back with python, still making some javascript stuff when needed.