import pygame
import random
import time

running = False
gameover = False


def initScreen():
    global black, red, white, screen, width, height
    width = 640
    height = 400
    size = (width, height)

    screen = pygame.display.set_mode(size)

    white = (255, 255, 255)
    black = (0,0,0)
    red = (255,0,0)

    pygame.display.set_caption("PONG!")



def initImage():
    global image, image_rect
    image = pygame.image.load("seehofer.png")
    image_rect = image.get_rect()
    image_rect.centerx = width/2
    image_rect.centery = height/2
    global size_image
    size_image = image.get_rect().size


def initImageMovement():
    random.seed(a=None, version=2)
    rand_x = random.randint(1, 4)
    random.seed(a=None, version=2)
    rand_y = random.randint(1, 4)
    global move_vector
    move_vector = [ rand_x, rand_y ]

class Rectangle(pygame.Rect):
    def __init__(self, rect_width, rect_height):
        self.width = rect_width
        self.height = rect_height
        self.centerx = width/2
        self.centery = height - (rect_height/2)
        self.speed_x = 0


def initRedRectangle():
    global red_rect
    red_rect = Rectangle(100, 12)


def doMovement():
    time.sleep(0.01)
    image_rect.centerx += move_vector[0]
    image_rect.centery += move_vector[1]

    if size_image[0]/2 <= image_rect.centerx <= width-(size_image[0]/2) and size_image[1]/2 <= image_rect.centery <= height-(size_image[1]/2):

        pass
    else:
        if image_rect.centerx >= width-size_image[0]/2 or image_rect.centerx <= size_image[0]/2:
            # CASE 1: image bounces on the right/left wall
            move_vector[0] = -(move_vector[0])
        elif image_rect.centery <= size_image[1]/2:
            # CASE 2: image bounces on the upper wall
            move_vector[1] = -(move_vector[1])
        elif image_rect.centery >= height-size_image[1]/2:
            # CASE 3: image is about to pass the lower border of screen
            if image_rect.colliderect(red_rect):
                # CASE 3.1: image touches the red balk
                move_vector[1] = -(move_vector[1])
            if not image_rect.colliderect(red_rect):
                # CASE 3.2: image does not touch the red balk
                showGameOver()
                global gameover
                gameover = True

        else:
            # CASE 4: image bounces in one of the upper corners (right or left)
            move_vector[0] = -(move_vector[0])
            move_vector[1] = -(move_vector[1])

def moveRedBalk():
    if (red_rect.width/2) <= red_rect.centerx <= width-(red_rect.width/2):
        red_rect.centerx += red_rect.speed_x * 3
    elif red_rect.centerx <= (red_rect.width/2) or red_rect.centerx >= width-(red_rect.width/2):
        red_rect.speed_x = -(red_rect.speed_x)
        red_rect.centerx += red_rect.speed_x * 3

def showGameOver():
    global text, gameover_rect
    font = pygame.font.Font(None, 38)
    text = font.render("Game Over!", 1, white)
    gameover_rect = text.get_rect()

    gameover_rect.centerx = width/2
    gameover_rect.centery = height/2



def input():
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            return
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_ESCAPE:
                return False
            if event.key == pygame.K_RIGHT:
                red_rect.speed_x = 1
            if event.key == pygame.K_LEFT:
                red_rect.speed_x = -1
        if event.type == pygame.KEYUP:
            red_rect.speed_x = 0
    return True



def update():
    doMovement()
    moveRedBalk()



def draw():
    screen.fill(black)
    if gameover:
        screen.blit(text, gameover_rect)
    else:
        screen.blit(image, image_rect)
    pygame.draw.rect(screen, red, red_rect)
    pygame.display.flip()



#------------- MAIN PROGRAMM ----------------

pygame.init()
initScreen()
initImage()
initImageMovement()
initRedRectangle()
running = True


#---------------- GAME LOOP ------------------

while running:
    running = input()
    update()
    draw()




