160 lines
4.0 KiB
Python

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()