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