You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

107 lines
3.8 KiB

import pygame
import sys
import random
# Inicializace knihovny Pygame (nutné zavolat na začátku každého Pygame programu)
pygame.init()
# --- Nastavení okna ---
SIRKA = 800
VYSKA = 600
okno = pygame.display.set_mode((SIRKA, VYSKA))
pygame.display.set_caption("Chytání jablek")
# --- Barvy (R, G, B) ---
CERNA = (0, 0, 0)
ZELENA = (0, 255, 0) # Barva hráče (košíku)
CERVENA = (255, 0, 0) # Barva jablka
BILA = (255, 255, 255) # Barva textu
# Hodiny pro udržení stabilní rychlosti hry (FPS)
hodiny = pygame.time.Clock()
font = pygame.font.SysFont("Arial", 36)
# --- Proměnné Hráče (Košíku) ---
hrac_sirka = 100
hrac_vyska = 20
# Začínáme uprostřed obrazovky dole
hrac_x = SIRKA // 2 - hrac_sirka // 2
hrac_y = VYSKA - 40
rychlost_hrace = 8
# --- Proměnné Jablka ---
jablko_velikost = 30
# Jablko začne na náhodné X pozici, ale nahoře mimo obrazovku (Y = záporné)
jablko_x = random.randint(0, SIRKA - jablko_velikost)
jablko_y = -jablko_velikost
rychlost_jablka = 5
skore = 0
zivoty = 3
bezime = True
# --- Hlavní herní smyčka ---
while bezime:
# 1. Zpracování událostí (kliknutí na křížek pro zavření okna)
for udalost in pygame.event.get():
if udalost.type == pygame.QUIT:
bezime = False
# Pokud ještě máme životy, hrajeme
if zivoty > 0:
# 2. Logika pohybu hráče (čtení aktuálně stisknutých kláves)
klavesy = pygame.key.get_pressed()
if klavesy[pygame.K_LEFT] and hrac_x > 0:
hrac_x -= rychlost_hrace
# Omezení, aby hráč nevyjel zprava ven
if klavesy[pygame.K_RIGHT] and hrac_x < SIRKA - hrac_sirka:
hrac_x += rychlost_hrace
# 3. Logika padání jablka (měníme pouze osu Y)
jablko_y += rychlost_jablka
# --- KOLIZE (Zjištění, zda hráč chytil jablko) ---
# Vytvoříme si virtuální obdélníky (Rect) pro zjednodušení detekce
hrac_rect = pygame.Rect(hrac_x, hrac_y, hrac_sirka, hrac_vyska)
jablko_rect = pygame.Rect(jablko_x, jablko_y, jablko_velikost, jablko_velikost)
# Metoda colliderect zjistí, zda se dva obdélníky právě teď překrývají
if hrac_rect.colliderect(jablko_rect):
skore += 1
rychlost_jablka += 0.2 # Hra se postupně stává těžší (jablka padají rychleji)
# Vygenerování nového jablka nahoře
jablko_y = -jablko_velikost
jablko_x = random.randint(0, SIRKA - jablko_velikost)
# Co když jablko spadne na zem a my ho nechytíme?
elif jablko_y > VYSKA:
zivoty -= 1
# Vygenerování nového jablka nahoře pro další pokus
jablko_y = -jablko_velikost
jablko_x = random.randint(0, SIRKA - jablko_velikost)
# 4. Vykreslování na obrazovku
okno.fill(CERNA) # Vymazání předchozího snímku z obrazovky
if zivoty > 0:
# Vykreslení hráče
pygame.draw.rect(okno, ZELENA, (hrac_x, hrac_y, hrac_sirka, hrac_vyska))
# Vykreslení jablka
pygame.draw.rect(okno, CERVENA, (jablko_x, jablko_y, jablko_velikost, jablko_velikost))
# Vykreslení textů (Skóre a Životy)
text_skore = font.render(f"Skóre: {skore}", True, BILA)
text_zivoty = font.render(f"Životy: {zivoty}", True, BILA)
okno.blit(text_skore, (10, 10)) # blit znamená "překresli tento text na okno"
okno.blit(text_zivoty, (SIRKA - 150, 10))
else:
# Pokud došly životy, zobrazíme červený nápis Konec Hry uprostřed
text_konec = font.render(f"KONEC HRY! Tvé skóre: {skore}", True, CERVENA)
okno.blit(text_konec, (SIRKA//2 - 180, VYSKA//2))
pygame.display.flip() # Propíšeme vše na monitor pro hráče
hodiny.tick(60) # Udržujeme rychlost na stabilních 60 snímcích za sekundu (FPS)
pygame.quit()
sys.exit()