import tkinter as tk
import random
from tkinter import simpledialog, messagebox

TILE_SIZE = 30
WIDTH = 20
HEIGHT = 20

class Game:
    def __init__(self, root):
        self.root = root
        self.canvas = tk.Canvas(root, width=WIDTH*TILE_SIZE, height=HEIGHT*TILE_SIZE)
        self.canvas.pack()

        self.reset_game()

        root.bind("<Key>", self.key_press)
        self.draw()

    def reset_game(self):
        self.level = 1
        self.ok = 0
        self.gold = 0
        self.hp = 1000
        self.armor = 100
        self.has_key = False

        self.new_level()

    def new_level(self):
        self.hp = 1000
        self.has_key = False  # reset klucza na każdym poziomie

        self.player_x = random.randint(1, 8)
        self.player_y = random.randint(3, 12)

        self.exit_x = random.randint(11, 18)
        self.exit_y = random.randint(3, 12)

        self.grid = {}

        for _ in range(8):
            self.grid[(random.randint(1,18), random.randint(3,18))] = "enemy"

        for _ in range(5):
            self.grid[(random.randint(1,18), random.randint(3,18))] = "treasure"

        self.grid[(random.randint(1,18), random.randint(3,18))] = "key"

    def draw(self):
        self.canvas.delete("all")

        self.canvas.create_text(
            200, 10,
            text=f"L:{self.level} OK:{self.ok} HP:{self.hp} ARM:{self.armor}"
        )

        for (x,y), val in self.grid.items():
            px = x*TILE_SIZE
            py = y*TILE_SIZE

            if val == "enemy":
                self.canvas.create_oval(px+2, py+2, px+TILE_SIZE-2, py+TILE_SIZE-2, fill="green")
                self.canvas.create_oval(px+8, py+8, px+12, py+12, fill="black")
                self.canvas.create_oval(px+18, py+8, px+22, py+12, fill="black")
                self.canvas.create_arc(px+8, py+10, px+22, py+22,
                                       start=200, extent=140,
                                       style=tk.ARC, width=2)

            elif val == "treasure":
                self.canvas.create_oval(px+5, py+5, px+25, py+25, fill="gold")

            elif val == "key":
                self.canvas.create_line(px+5, py+15, px+25, py+15, width=3)
                self.canvas.create_oval(px+3, py+10, px+10, py+20, outline="black")

        # drzwi
        px = self.exit_x*TILE_SIZE
        py = self.exit_y*TILE_SIZE
        self.canvas.create_rectangle(px, py, px+TILE_SIZE, py+TILE_SIZE, fill="brown")
        self.canvas.create_oval(px+20, py+12, px+25, py+17, fill="yellow")

        # gracz
        px = self.player_x*TILE_SIZE
        py = self.player_y*TILE_SIZE
        self.canvas.create_oval(px+10, py, px+20, py+10, fill="green")
        self.canvas.create_line(px+15, py+10, px+15, py+22, width=2)
        self.canvas.create_line(px+15, py+14, px+5, py+18, width=2)
        self.canvas.create_line(px+15, py+14, px+25, py+18, width=2)
        self.canvas.create_line(px+15, py+22, px+8, py+30, width=2)
        self.canvas.create_line(px+15, py+22, px+22, py+30, width=2)

    def key_press(self, event):
        dx, dy = 0, 0
        if event.keysym == "Up":
            dy = -1
        elif event.keysym == "Down":
            dy = 1
        elif event.keysym == "Left":
            dx = -1
        elif event.keysym == "Right":
            dx = 1
        else:
            return

        self.move(dx, dy)

    def move(self, dx, dy):
        self.animate_move(dx, dy, 3)

    def animate_move(self, dx, dy, steps):
        if steps <= 0:
            return

        self.hp -= 5

        nx = self.player_x + dx
        ny = self.player_y + dy

        if nx < 0 or nx >= WIDTH or ny < 0 or ny >= HEIGHT:
            self.armor -= 5
            self.draw()
            return

        # BLOKADA DRZWI PRZED WEJŚCIEM
        if (nx, ny) == (self.exit_x, self.exit_y):
            if self.has_key:
                self.player_x, self.player_y = nx, ny
                messagebox.showinfo("Poziom", "Poziom ukończony!")
                self.level += 1
                self.has_key = False
                self.new_level()
                self.draw()
                return
            else:
                messagebox.showinfo("Zamknięte", "Potrzebujesz klucza!")
                self.draw()
                return

        # normalny ruch
        self.player_x, self.player_y = nx, ny

        # zatrzymanie na obiektach
        if (nx, ny) in self.grid:
            tile = self.grid.pop((nx, ny))

            if tile == "enemy":
                self.draw()
                self.root.after(100, self.quiz)
                return

            elif tile == "treasure":
                self.gold += 20
                messagebox.showinfo("Skarb", "+20 gold")
                return

            elif tile == "key":
                self.has_key = True
                messagebox.showinfo("Klucz", "Masz klucz!")
                return

        if self.hp <= 0:
            messagebox.showinfo("Game Over", "Rycerz padł!")
            self.reset_game()
            self.draw()
            return

        if self.armor <= 0:
            messagebox.showinfo("Game Over", "Pancerz zniszczony!")
            self.reset_game()
            self.draw()
            return

        self.draw()
        self.root.after(120, lambda: self.animate_move(dx, dy, steps-1))

    def quiz(self):
        questions = [
("Gdzie Jezus przemienił wodę w wino?","KANA"),
("Na jakiej górze Mojżesz otrzymał Prawo?","SYNAJ"),
("Jak miał na imię brat Mojżesza?","AARON"),
("Jak nazywała się żona Abrahama?","SARA"),
("Które miasto zburzono trąbami?","JERYCHO"),
("Kto zbudował arkę?","NOE"),
("Jak miał na imię syn Dawida, który został królem?","SALOMON"),
("Jak miał na imię olbrzym pokonany przez Dawida?","GOLIAT"),
("Jak nazywał się ogród Jezusa przed pojmaniem?","GETSEMANI"),
("Kto zdradził Jezusa?","JUDASZ"),

("Jak nazywała się matka Samuela?","ANNA"),
("Kto został połknięty przez wielką rybę?","JONASZ"),
("Jak miał na imię pierwszy człowiek?","ADAM"),
("Jak miała na imię pierwsza kobieta?","EWA"),
("Jak nazywał się brat Abla?","KAIN"),
("Kto prowadził Izraelitów do Ziemi Obiecanej po Mojżeszu?","JOZUE"),
("Jak nazywała się góra przemienienia?","TABOR"),
("Kto był najmądrzejszym królem Izraela?","SALOMON"),
("Jak nazywał się prorok ognia?","ELIASZ"),
("Jak miał na imię następca Eliasza?","ELIZEUSZ"),

("Jak nazywał się król Egiptu w czasach Mojżesza?","FARAON"),
("Jak nazywała się rzeka w Edenie?","PISZON"),
("Jak miał na imię ojciec Jana Chrzciciela?","ZACHARIASZ"),
("Jak nazywała się matka Jana Chrzciciela?","ELŻBIETA"),
("Jak miał na imię rzymski namiestnik skazujący Jezusa?","PIŁAT"),
("Jak nazywało się jezioro działalności Jezusa?","GALILEJSKIE"),
("Kto zaparł się Jezusa trzy razy?","PIOTR"),
("Jak miał na imię uczeń, który nie uwierzył?","TOMASZ"),
("Jak miał na imię celnik powołany przez Jezusa?","MATEUSZ"),
("Jak nazywał się bogaty człowiek i biedak z przypowieści?","ŁAZARZ"),

("Jak nazywało się miasto narodzin Jezusa?","BETLEJEM"),
("Jak nazywała się matka Jezusa?","MARIA"),
("Jak miał na imię opiekun Jezusa?","JÓZEF"),
("Jak nazywała się góra kuszenia?","PUSTYNIA"),
("Jak nazywała się góra błogosławieństw?","GÓRA"),
("Jak nazywał się brat Mojżesza?","AARON"),
("Jak miał na imię prorok w jaskini?","ELIASZ"),
("Jak nazywał się król, który zbudował świątynię?","SALOMON"),
("Jak nazywał się uczeń umiłowany?","JAN"),
("Jak miał na imię pierwszy męczennik?","SZCZEPAN"),

("Jak nazywała się księga psalmów?","PSALMY"),
("Jak nazywał się ogród Adama?","EDEN"),
("Jak miał na imię syn Abrahama?","IZAAK"),
("Jak miał na imię syn Izaaka?","JAKUB"),
("Jak miał na imię brat Jakuba?","EZAW"),
("Jak nazywał się syn Jakuba sprzedany do Egiptu?","JÓZEF"),
("Jak nazywała się żona Jakuba?","RACHELA"),
("Jak nazywała się druga żona Jakuba?","LEA"),
("Jak nazywał się król Babilonu?","NABUCHODONOZOR"),
("Jak nazywał się prorok w jaskini lwów?","DANIEL"),

("Jak nazywała się królowa, która uratowała Żydów?","ESTERA"),
("Jak miał na imię prorok wielkiej ryby?","JONASZ"),
("Jak nazywał się uczeń zdradzony pocałunkiem?","JEZUS"),
("Jak nazywał się rzymski setnik pod krzyżem?","SETNIK"),
("Jak nazywała się góra Arki Noego?","ARARAT"),
("Jak miał na imię pierwszy król Izraela?","SAUL"),
("Jak nazywał się prorok ognia z nieba?","ELIASZ"),
("Jak miał na imię brat Mojżesza?","AARON"),
("Jak nazywał się uczeń rybak?","PIOTR"),
("Jak nazywał się uczeń lekarz?","ŁUKASZ"),

("Jak nazywała się księga początku?","RODZAJU"),
("Jak nazywała się ostatnia księga Biblii?","APOKALIPSA"),
("Jak miał na imię apostoł narodów?","PAWEŁ"),
("Jak nazywał się prześladowca chrześcijan?","SAUL"),
("Jak miał na imię uczeń, który zdradził?","JUDASZ"),
("Jak nazywał się ogród zmartwychwstania?","OGRÓD"),
("Jak nazywała się góra prawa?","SYNAJ"),
("Jak nazywało się morze rozstąpione?","CZERWONE"),
("Jak nazywał się brat Mojżesza?","AARON"),
("Jak nazywał się pierwszy człowiek?","ADAM"),

("Jak nazywała się pierwsza kobieta?","EWA"),
("Jak miał na imię syn Noego?","SEM"),
("Jak miał na imię drugi syn Noego?","CHAM"),
("Jak miał na imię trzeci syn Noego?","JAFET"),
("Jak nazywała się wieża pychy?","BABEL"),
("Jak nazywała się ziemia obiecana?","KANAAN"),
("Jak nazywał się król Sodomy?","BERA"),
("Jak nazywało się miasto grzechu?","SODOMA"),
("Jak nazywało się drugie miasto grzechu?","GOMORA"),
("Jak nazywał się prorok płaczu?","JEREMIASZ"),

("Jak nazywał się prorok wizji?","EZECHIEL"),
("Jak nazywał się prorok mesjański?","IZAJASZ"),
("Jak nazywała się księga mądrości?","PRZYSŁÓW"),
("Jak nazywała się księga miłości?","PIEŚŃ NAD PIEŚNIAMI"),
("Jak nazywał się uczeń celnik?","MATEUSZ"),
("Jak nazywał się uczeń rybak?","ANDRZEJ"),
("Jak nazywał się brat Piotra?","ANDRZEJ"),
("Jak nazywał się brat Jakuba?","JAN"),
("Jak nazywał się ojciec Dawida?","JESSE"),
("Jak nazywała się matka Samsona?","MANOACH"),
("Kto jest zapisany w Biblii jako najstarszy człowiek, jaki kiedykolwiek żył?","METUSELAH"),
("Na której górze spoczęła arka Noego?","ARARAT"),
("Jak miał na imię ojciec Abrahama?","TERA"),
("Kto śnił o drabinie sięgającej nieba z aniołami?","JAKUB"),
("Czego użył Jakub, aby zapewnić, że trzoda Labana będzie rodzić cętkowane potomstwo?","GAŁĘZIE"),
("Jakim imieniem znany jest teść Mojżesza?","WSZYSTKIE"),
("Jakie kamienie na efodzie arcykapłana nosiły imiona plemion Izraela?","ONYKS"),
("Kto wzniecił bunt przeciw Mojżeszowi i został pochłonięty przez ziemię?","KORA"),
("Jak miała na imię kobieta w Jerychu, która ukryła dwóch zwiadowców?","RACHAB"),
("Ilu ludzi Gedeon zabrał do bitwy po zmniejszeniu armii?","TRZYSTU"),

("Kto zabił kananejskiego dowódcę Siserę palikiem od namiotu?","JAEL"),
("Który arcykapłan był mentorem młodego Samuela?","ELI"),
("Kto był synem Saula i najbliższym przyjacielem Dawida?","JONATAN"),
("Który prorok napomniał króla Dawida za grzech z Batszebą?","NATAN"),
("Która zagraniczna królowa przyszła, aby wystawić na próbę mądrość Salomona?","SABA"),

("Który prorok był karmiony przez kruki podczas suszy?","ELIASZ"),
("Który prorok został wzięty do nieba w wichrze i ognistym rydwanie?","ELIASZ"),
("Który sługa Elizeusza został dotknięty trądem z powodu chciwości?","GECHAZI"),
("Który król Judy znalazł księgę Prawa i rozpoczął wielką reformę?","JOZJASZ"),
("Który prorok widział wizję Pana wysokiego i wyniesionego w świątyni?","IZAJA"),

("Który prorok miał wizję koła w kole?","EZECHIEL"),
("Jakie były hebrajskie imiona Szadracha, Meszacha i Abednego?","ANANIASZ"),
("Który prorok został nakazany poślubić prostytutkę?","OZEASZ"),
("Jak nazywała się dolina, w której Ezechiel widział wizję suchych kości?","NIEZNANA"),
("Jakie jest ostatnie słowo Starego Testamentu w większości tłumaczeń angielskich?","PRZEKLEŃSTWO")
        ]

        q, correct = random.choice(questions)

        all_answers = list(set([c for _, c in questions]))
        wrong = [a for a in all_answers if a != correct]
        options = random.sample(wrong, 2) + [correct]
        random.shuffle(options)

        answer = simpledialog.askstring(
            "Pytanie",
            f"Odpowiedz: {q}\n\nOpcje:\n" + "\n".join(options)
        )

        if answer and answer.upper() == correct:
            self.ok += 1

            if self.ok >= 20:
                if messagebox.askyesno("Wygrana", "Wygrałeś grę!\nZacząć od nowa?"):
                    self.reset_game()
                return

            messagebox.showinfo("OK", "Dobrze!")
        else:
            self.armor -= 20
            self.hp -= 5
            messagebox.showinfo("Błąd", f"Źle! Poprawna: {correct}")


root = tk.Tk()
root.title("Rycerz - Atari remake")
game = Game(root)
root.mainloop()
