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