# --- GRA: Zgadnij liczbę do 1000 ---
# Wersja w czystym Pythonie z biblioteką Pygame
# Autor: [Twoje imię], dla grupy 10–15 lat
# Czas trwania lekcji: ok. 45 minut

import pygame       # Biblioteka do tworzenia prostych gier
import random       # Umożliwia losowanie liczb
import sys          # Używana do zamykania programu

# --- INICJALIZACJA PYGAME ---
pygame.init()  # Uruchamiamy wszystkie potrzebne moduły biblioteki Pygame

# --- USTAWIENIA OKNA GRY ---
WIDTH, HEIGHT = 800, 500                    # Szerokość i wysokość okna gry
screen = pygame.display.set_mode((WIDTH, HEIGHT))  # Tworzymy okno o danym rozmiarze
pygame.display.set_caption("🎯 Zgadnij Liczbę do 1000")  # Tytuł okna gry

# --- CZCIONKI I KOLORY ---
font_big = pygame.font.SysFont("arial", 48)   # Duża czcionka
font_small = pygame.font.SysFont("arial", 32) # Mała czcionka

WHITE = (255, 255, 255)
GREEN = (0, 255, 0)
RED = (255, 0, 0)
BLUE = (30, 30, 50)
ORANGE = (255, 165, 0)
GRAY = (200, 200, 200)

# --- ZMIENNE GRY ---
wylosowana = random.randint(1, 1000)   # Losujemy liczbę od 1 do 1000
wiadomosc = "Zgadnij liczbę od 1 do 1000!"   # Tekst wyświetlany na ekranie
koniec = False                     # Czy gra się skończyła
punkty = 0                         # Liczba punktów
proba = ""                         # Liczba wpisywana przez gracza

# --- FUNKCJA DO RYSOWANIA TEKSTU ---
def draw_text(text, x, y, color=WHITE, font=font_small, center=False):
    """Pomocnicza funkcja do wyświetlania tekstu na ekranie."""
    surface = font.render(text, True, color)
    rect = surface.get_rect()
    if center:
        rect.center = (x, y)
    else:
        rect.topleft = (x, y)
    screen.blit(surface, rect)

# --- FUNKCJA RESTARTU GRY ---
def restart():
    """Resetuje wszystkie zmienne i zaczyna nową grę."""
    global wylosowana, wiadomosc, koniec, punkty, proba
    wylosowana = random.randint(1, 1000)
    wiadomosc = "Zgadnij liczbę od 1 do 1000!"
    koniec = False
    proba = ""
    punkty = 0

# --- GŁÓWNA PĘTLA GRY ---
clock = pygame.time.Clock()  # Obiekt, który kontroluje prędkość gry
running = True               # Czy gra działa (czy nie kliknięto X)

while running:
    screen.fill(BLUE)  # Kolorujemy tło na ciemnoniebieski

    # --- OBSŁUGA ZDARZEŃ (klawisze, zamykanie okna itd.) ---
    for event in pygame.event.get():
        if event.type == pygame.QUIT:  # Kliknięto krzyżyk w oknie
            running = False

        # Obsługa klawiatury
        if event.type == pygame.KEYDOWN:
            # ENTER → sprawdzamy wpisaną liczbę
            if event.key == pygame.K_RETURN and not koniec and proba:
                liczba = int(proba)
                if liczba == wylosowana:
                    wiadomosc = f"🎉 Brawo! Trafiłeś! To była {wylosowana}!"
                    koniec = True
                    punkty += 100
                elif liczba < wylosowana:
                    wiadomosc = "Za mało! Spróbuj większej liczby!"
                    punkty -= 1
                else:
                    wiadomosc = "Za dużo! Spróbuj mniejszej liczby!"
                    punkty -= 1
                proba = ""  # Czyścimy wpis po każdej próbie

            # BACKSPACE → usuwa ostatnią cyfrę z wpisanej liczby
            elif event.key == pygame.K_BACKSPACE:
                proba = proba[:-1]

            # ENTER przy końcu gry → restart
            elif koniec and event.key == pygame.K_RETURN:
                restart()

            # Wpisywanie cyfr (0–9)
            elif event.unicode.isdigit() and not koniec:
                if len(proba) < 4:   # Limit 4 znaków, żeby nie wpisać np. 10000
                    proba += event.unicode

    # --- RYSOWANIE ELEMENTÓW NA EKRANIE ---
    draw_text("Zgadnij liczbę do 1000!", WIDTH // 2, 50, ORANGE, font_big, center=True)
    draw_text(f"Twoje punkty: {punkty}", 20, 20, GREEN)

    # Prostokąt pokazujący wpis gracza
    pygame.draw.rect(screen, GRAY, (WIDTH//2 - 100, HEIGHT//2 - 30, 200, 60))
    draw_text(proba, WIDTH//2, HEIGHT//2, BLUE, font_big, center=True)

    # Wiadomość (czy dobrze, za mało, za dużo)
    draw_text(wiadomosc, WIDTH//2, HEIGHT//2 + 100, WHITE, font_small, center=True)

    # Komunikat o końcu gry
    if koniec:
        draw_text("Naciśnij ENTER, aby zagrać ponownie.", WIDTH//2, HEIGHT - 50, RED, font_small, center=True)

    # --- AKTUALIZACJA EKRANU ---
    pygame.display.flip()
    clock.tick(30)  # 30 klatek na sekundę (płynność gry)

# --- ZAKOŃCZENIE GRY ---
pygame.quit()
sys.exit()
