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 = [
("Jak nazywa się najstarsza faza neolitu?","NEOLIT PRECERAMICZNY A"),
("Na jakim obszarze rozwijał się neolit preceramiczny A?","ŻYZNY PÓŁKSIĘŻYC"),
("Jak nazywała się kultura poprzedzająca neolit preceramiczny A?","NATUFIJSKA"),
("Jaki kształt miały domy w neolicie preceramicznym A?","OKRĄG"),
("Z czego budowano ściany domów w tym okresie?","CEGŁY"),
("Jakie zboża uprawiano na początku?","JĘCZMIEŃ"),
("Dlaczego uprawa była ograniczona?","BRAK NAWADNIANIA"),
("Jak nazywano magazyny na żywność?","SPICHLERZE"),
("Gdzie początkowo budowano spichlerze?","NA ZEWNĄTRZ"),
("Jak nazywała się osada nad Eufratem?","MUJERBAT"),

("Jak nazywa się kolejny etap neolitu?","NEOLIT PRECERAMICZNY B"),
("Jaki kształt miały domy w tym okresie?","PROSTOKĄT"),
("Co zaczęto masowo hodować?","ZWIERZĘTA"),
("Z czego robiono tynk podłóg?","WAPIEŃ"),
("Co doprowadziło do odkrycia ceramiki?","TYNEK"),
("Jakie niezwykłe znaleziska związane były z pochówkami?","CZASZKI"),
("Jakie wydarzenie zakończyło kulturę Neolit preceramiczny B?","8.2 KA"),
("Jak nazywała się osada blisko Damaszku?","TELL ASWAD"),
("Jak daleko od Damaszku leżało Tell Aswad?","50 KM"),
("Co pokazuje Tell Aswad?","ORGANIZACJĘ"),

("Jak nazywa się kolejny okres Mezopotamii?","UBAJD"),
("Gdzie rozwijała się kultura Ubajd?","MEZOPOTAMIA"),
("Jakie budynki pojawiły się po raz pierwszy?","ŚWIĄTYNIE"),
("Co było kluczowe dla rolnictwa w tym okresie?","NAWADNIANIE"),
("Jak nazywa się narzędzie wprowadzone w okresie Ubajd?","PŁUG"),
("Jakie zawody się pojawiły w okresie Ubajd?","GARNCARZE"),
("Jakie zjawisko społeczne się pojawiło w okresie Ubajd?","KLASY"),
("Jak nazywało się jedno z najstarszych miast?","ERIDU"),
("Jakiego boga czczono w Eridu?","ENKI"),
("Dlaczego Eridu upadło?","ZASOLENIE"),

("Jak nazywa się kolejny ważny okres po okresie Ubajd?","URUK"),
("Co wynaleziono w okresie Uruk?","KOŁO"),
("Jakie państwa zaczęły powstawać w okresie Uruk?","MIASTA"),
("Jak nazywał się legendarny król Uruk?","GILGAMESZ"),
("Ile mieszkańców miało Uruk?","50000"),
("Jaką boginię czczono w Uruk?","INANNA"),
("Jak duży był kompleks świątynny w Uruk?","4000"),
("Co rozwijało się wraz z władzą?","IKONOGRAFIA"),
("Kto powierzył budowę Uruk?","ENMERKAR"),
("Jakie struktury polityczne dominowały w okresie Uruk?","MIASTO"),

("Jak nazywa się kolejny okres w historii Mezopotamii po Uruk?","DŻEMDET NASR"),
("Z czego słynęła ta kultura DŻEMDET NASR?","CERAMIKA"),
("Jakie zwierzęta pojawiały się na ceramice?","PTAKI"),
("Jakie pismo się rozwinęło we wczesnym okresie Mezopotamii?","KLINOWE"),
("Jaki charakter miały teksty klinowe?","ADMINISTRACYJNY"),
("Jakie miasto dało nazwę okresowi?","DŻEMDET NASR"),
("Jakie inne miasta wymieniono?","URUK"),
("Co zarządzało gospodarką?","ADMINISTRACJA"),
("Czy istniał handel międzynarodowy?","NIE"),
("Jakie były kontakty?","LOKALNE"),

("Jak nazywa się kolejny okres?","WCZESNODYNASTYCZNY"),
("Jakie języki występowały w Mezopotamii?","SUMERYJSKI"),
("Jakie ludy zamieszkiwały północ Mezopotamii?","SEMICI"),
("Co rozwijało rolnictwo?","NAWADNIANIE"),
("Jakie społeczeństwo powstało w okresie wczesnodynastycznym w Mezopotamii?","MIEJSKIE"),
("Jakie państwa powstawały w okresie wczesnodynastycznym w Mezopotamii?","KRÓLESTWA"),
("Jakie miasto było potężne w okresie wczesnodynastycznym w Mezopotamii?","UR"),
("Co wskazuje na bogactwo Ur?","GROBY"),
("Z kim handlowano w Ur?","INDUS"),
("Jaką rolę pełniło Ur?","SOJUSZ"),

("Jak nazywało się pierwsze imperium Sargona?","AKADYJSKIE"),
("Kto był założycielem Imperium Akadyjskiego ?","SARGON"),
("Jakim językiem posługiwano się w imperium Sargona?","AKADYJSKI"),
("Jak długo trwało imperium Akadyjskie?","200 LAT"),
("Co doprowadziło do  upadku imperium Akadyjskiego?","GUTEJOWIE"),
("Jakie wydarzenie klimatyczne  osłabiło Imperium Akadyjskie?","4.2 KA"),
("Jak nazywało się główne miasto Sargona?","AKAD"),
("Gdzie mogło się znajdować Akad?","TYGRYS"),
("Co oznacza nazwa Akad?","NIEZNANE"),
("Jakie języki współistniały z akadyjskim?","SUMERYJSKI"),

("Jak nazywa się kolejna dynastia po Imperium Akadyjskim?","III UR"),
("Kto założył III dynastię Ur?","UR-NAMMU"),
("Jakie miasto pokonał Ur-Nammu?","LAGASZ"),
("Jaki kodeks powstał za III dynastii Ur?","UR-NAMMU"),
("Gdzie znalezionokopie kodeksu Ur Nammu?","NIPPUR"),
("Kiedy III dynastia Ur upadła?","2004 p. n. e."),
("Kto zniszczył Ur?","ELAM"),
("Kto przejął władzę w Ur?","AMORYCI"),
("Jakim językiem mówili Amoryci?","SEMICKI"),
("Jakie miasto było centrum religijnym w III dynastii Ur?","NIPPUR"),

("Jak nazywa się kolejne państwo po III dynastii Ur?","STAROBABILOŃSKIE"),
("Kto był  najważniejszym królem Starobabilońskim?","HAMMURABI"),
("Jaki kodeks stworzył król starobabiloński?","HAMMURABIEGO"),
("W jakim języku był kodeks Hammurabiego?","AKADYJSKI"),
("Gdzie był umieszczony kodeks Hammurabiego?","STELA"),
("Kto zdobył Babilon za czasów państwa Starobabilońskiego?","HETYCI"),
("Kto przejął władzę po Hetytach?","KASYCI"),
("Jak długo panowali Kasyci?","400 LAT"),
("Jak nazywała się  stolica Kasytów?","DUR-KURIGALZU"),
("Co budowali Kasyci?","ZIGGURAT"),

("Jak nazywało się państwo asyryjskie?","NOWOASYRYJSKIE"),
("Kto był ważnym królem Nowoasyryjskim?","SARGON II"),
("Jak nazywała się  stolica państwa Nowoasyryjskiego?","DUR-SZARRUKIN"),
("Dlaczego ją opuszczono?","ŚMIERĆ"),
("Kto przeniósł stolicę do Niniwy?","SENNACHERYB"),
("Jak duża była Niniwa?","150000"),
("Kto stworzył bibliotekę w Niniwie?","ASZURBANIPAL"),
("Ile tabliczek zawierała biblioteka w Niniwie?","30000"),
("Jakie dzieło tam znaleziono?","GILGAMESZ"),
("Gdzie była biblioteka Aszurbanipala?","NINIWA"),

("Jak nazywa się ostatnie państwo Nabopolasara?","NOWOBABILOŃSKIE"),
("Kto  założył państwo Nowobabilońskie?","NABOPOLASSAR"),
("Kto był  synem Nabopolasara?","NABUCHODONOZOR"),
("Jakie miasto zniszczył Nabuchodonozor?","JEROZOLIMA"),
("Jak nazywa się deportacja Żydów?","NIEWOLA BABILOŃSKA"),
("Jakie budowle powstały w Babilonie?","OGRODY"),
("Jak nazywała się słynna brama?","ISZTAR"),
("Jak nazywał się ziggurat?","E-TEMENANKI"),
("Kiedy zmarł Nabuchodonozor?","562 p. n. e."),
("Jakie miasto było największe w Mezopotamii?","BABILON")    
        ]

        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()
