Çizgi Savaşı

Python
import tkinter as tk
from tkinter import messagebox
import random

# ============================================================
# BOTLU GARTIC PHONE TARZI MINI OYUN
# Gereksinim: Python 3.x
# Ekstra kütüphane gerekmez.
# ============================================================

BOT_NAMES = ["PixelBot", "DoodleBot", "SketchBot"]
PROMPTS = [
    "Uzayda pizza yiyen bir kedi",
    "Uçan bir köpek",
    "Denizde yüzen bir robot",
    "Ay'da futbol oynayan bir astronot",
    "Dans eden bir penguen",
    "Çikolata yağmuru",
    "Bisiklete binen bir dinozor",
    "Sihirli bir orman",
]

class GarticMini:
    def __init__(self, root):
        self.root = root
        self.root.title("Gartic Phone - Bot Edition")
        self.root.geometry("1000x700")
        self.root.minsize(850, 600)

        self.players = ["Sen"] + BOT_NAMES
        self.round_no = 0
        self.max_rounds = 3
        self.score = {p: 0 for p in self.players}

        self.current_prompt = ""
        self.phase = "start"
        self.lines = []
        self.start_x = None
        self.start_y = None

        self.build_ui()
        self.show_start()

    def build_ui(self):
        self.header = tk.Frame(self.root, bg="#202124", height=65)
        self.header.pack(fill="x")

        self.title = tk.Label(
            self.header,
            text="🎨 GARTIC PHONE • BOT EDITION",
            fg="white",
            bg="#202124",
            font=("Arial", 22, "bold")
        )
        self.title.pack(side="left", padx=20, pady=15)

        self.round_label = tk.Label(
            self.header, text="", fg="white", bg="#202124",
            font=("Arial", 13, "bold")
        )
        self.round_label.pack(side="right", padx=20)

        self.main = tk.Frame(self.root, bg="#f4f4f4")
        self.main.pack(fill="both", expand=True)

    def clear_main(self):
        for widget in self.main.winfo_children():
            widget.destroy()

    def show_start(self):
        self.clear_main()

        box = tk.Frame(self.main, bg="#f4f4f4")
        box.pack(expand=True)

        tk.Label(
            box, text="🎨 Gartic Phone Mini",
            font=("Arial", 32, "bold"), bg="#f4f4f4"
        ).pack(pady=20)

        tk.Label(
            box,
            text="Sen ve 3 bot sırayla cümleler ve çizimler oluşturuyorsunuz.",
            font=("Arial", 15), bg="#f4f4f4"
        ).pack(pady=10)

        tk.Label(
            box,
            text="3 tur oynanır. En yüksek puanı toplamaya çalış!",
            font=("Arial", 14), bg="#f4f4f4"
        ).pack(pady=5)

        tk.Button(
            box, text="OYUNA BAŞLA ▶",
            command=self.start_game,
            font=("Arial", 16, "bold"),
            padx=35, pady=15
        ).pack(pady=30)

    def start_game(self):
        self.round_no = 0
        self.score = {p: 0 for p in self.players}
        self.next_round()

    def next_round(self):
        if self.round_no >= self.max_rounds:
            self.show_results()
            return

        self.round_no += 1
        self.current_prompt = random.choice(PROMPTS)
        self.show_prompt()

    def update_round(self):
        self.round_label.config(
            text=f"Tur {self.round_no}/{self.max_rounds}"
        )

    def show_prompt(self):
        self.clear_main()
        self.update_round()

        frame = tk.Frame(self.main, bg="#f4f4f4")
        frame.pack(expand=True)

        tk.Label(
            frame, text="✍️ CÜMLE AŞAMASI",
            font=("Arial", 24, "bold"), bg="#f4f4f4"
        ).pack(pady=20)

        tk.Label(
            frame,
            text="Çizilecek bir şey yaz:",
            font=("Arial", 15), bg="#f4f4f4"
        ).pack(pady=5)

        self.entry = tk.Entry(
            frame, width=55, font=("Arial", 16)
        )
        self.entry.pack(pady=15)
        self.entry.focus()

        tk.Label(
            frame,
            text="Örnek: Uzayda pizza yiyen bir kedi",
            font=("Arial", 11), fg="#666", bg="#f4f4f4"
        ).pack()

        tk.Button(
            frame, text="DEVAM ET →",
            command=self.submit_prompt,
            font=("Arial", 14, "bold"),
            padx=25, pady=10
        ).pack(pady=25)

    def submit_prompt(self):
        text = self.entry.get().strip()

        if not text:
            messagebox.showwarning("Eksik", "Bir cümle yazmalısın!")
            return

        self.current_prompt = text
        self.show_drawing()

    def show_drawing(self):
        self.clear_main()
        self.update_round()

        top = tk.Frame(self.main, bg="#f4f4f4")
        top.pack(fill="x", pady=8)

        tk.Label(
            top,
            text=f"🎨 Çiz: {self.current_prompt}",
            font=("Arial", 16, "bold"), bg="#f4f4f4"
        ).pack()

        self.canvas = tk.Canvas(
            self.main, bg="white",
            highlightthickness=2,
            highlightbackground="#cccccc"
        )
        self.canvas.pack(
            fill="both", expand=True,
            padx=25, pady=10
        )

        self.canvas.bind("<Button-1>", self.start_draw)
        self.canvas.bind("<B1-Motion>", self.draw)

        bottom = tk.Frame(self.main, bg="#f4f4f4")
        bottom.pack(fill="x", pady=10)

        tk.Button(
            bottom, text="TEMİZLE",
            command=self.clear_canvas,
            font=("Arial", 11)
        ).pack(side="left", padx=25)

        tk.Button(
            bottom, text="ÇİZİMİ GÖNDER →",
            command=self.submit_drawing,
            font=("Arial", 13, "bold"),
            padx=20, pady=8
        ).pack(side="right", padx=25)

    def start_draw(self, event):
        self.start_x = event.x
        self.start_y = event.y

    def draw(self, event):
        if self.start_x is not None:
            line = self.canvas.create_line(
                self.start_x, self.start_y,
                event.x, event.y,
                width=5,
                capstyle=tk.ROUND,
                smooth=True
            )
            self.lines.append(line)

            self.start_x = event.x
            self.start_y = event.y

    def clear_canvas(self):
        self.canvas.delete("all")
        self.lines.clear()

    def submit_drawing(self):
        if not self.lines:
            answer = messagebox.askyesno(
                "Boş çizim",
                "Hiç çizim yapmadın. Yine de göndermek istiyor musun?"
            )
            if not answer:
                return

        self.show_bot_gallery()

    def show_bot_gallery(self):
        self.clear_main()
        self.update_round()

        tk.Label(
            self.main,
            text="🤖 BOT ÇİZİMLERİ",
            font=("Arial", 24, "bold"),
            bg="#f4f4f4"
        ).pack(pady=15)

        tk.Label(
            self.main,
            text="Botlar da aynı konu için çizim yaptı!",
            font=("Arial", 13),
            bg="#f4f4f4"
        ).pack(pady=5)

        gallery = tk.Frame(self.main, bg="#f4f4f4")
        gallery.pack(fill="both", expand=True, padx=20, pady=10)

        # Kullanıcının çizimi
        self.make_card(
            gallery, "🧑 SENİN ÇİZİMİN",
            "Kendi çizimini başarıyla gönderdin."
        )

        for bot in BOT_NAMES:
            desc = random.choice([
                "Bot bir çöp adam çizdi.",
                "Bot yaratıcı bir karalama yaptı.",
                "Bot konuyu biraz yanlış anladı.",
                "Bot oldukça komik bir çizim yaptı.",
            ])
            self.make_card(gallery, f"🤖 {bot}", desc)

        tk.Button(
            self.main,
            text="TAHMİN AŞAMASINA GEÇ →",
            command=self.show_guess,
            font=("Arial", 14, "bold"),
            padx=25, pady=10
        ).pack(pady=15)

    def make_card(self, parent, title, description):
        card = tk.Frame(
            parent, bg="white",
            bd=1, relief="solid",
            width=190, height=150
        )
        card.pack(side="left", expand=True, fill="both", padx=7)
        card.pack_propagate(False)

        tk.Label(
            card, text=title,
            font=("Arial", 13, "bold"),
            bg="white"
        ).pack(pady=18)

        tk.Label(
            card, text="✏️\n" + description,
            font=("Arial", 10),
            bg="white",
            wraplength=160,
            justify="center"
        ).pack()

    def show_guess(self):
        self.clear_main()
        self.update_round()

        tk.Label(
            self.main,
            text="🔎 TAHMİN ET",
            font=("Arial", 24, "bold"),
            bg="#f4f4f4"
        ).pack(pady=20)

        tk.Label(
            self.main,
            text="Çizime bakarak ne olduğunu tahmin et:",
            font=("Arial", 14),
            bg="#f4f4f4"
        ).pack()

        fake_drawing = tk.Frame(
            self.main, bg="white",
            width=500, height=250,
            bd=2, relief="solid"
        )
        fake_drawing.pack(pady=20)
        fake_drawing.pack_propagate(False)

        tk.Label(
            fake_drawing,
            text="🎨\nBOT ÇİZİMİ",
            font=("Arial", 30),
            bg="white"
        ).pack(expand=True)

        self.guess_entry = tk.Entry(
            self.main, width=45, font=("Arial", 15)
        )
        self.guess_entry.pack(pady=10)
        self.guess_entry.focus()

        tk.Button(
            self.main,
            text="TAHMİNİ GÖNDER",
            command=self.submit_guess,
            font=("Arial", 13, "bold"),
            padx=25, pady=10
        ).pack(pady=15)

    def submit_guess(self):
        guess = self.guess_entry.get().strip()

        if not guess:
            messagebox.showwarning("Eksik", "Bir tahmin yazmalısın!")
            return

        # Eğlencelik basit puanlama:
        # Tahmin yeterince uzunsa oyuncuya puan veriyoruz.
        if len(guess) >= 4:
            self.score["Sen"] += 10

        # Botlar rastgele puan kazanıyor.
        for bot in BOT_NAMES:
            self.score[bot] += random.choice([5, 10, 15])

        self.show_round_result()

    def show_round_result(self):
        self.clear_main()
        self.update_round()

        tk.Label(
            self.main,
            text="🏁 TUR SONUCU",
            font=("Arial", 26, "bold"),
            bg="#f4f4f4"
        ).pack(pady=20)

        tk.Label(
            self.main,
            text=f"Gerçek konu: {self.current_prompt}",
            font=("Arial", 14, "bold"),
            bg="#f4f4f4",
            wraplength=750
        ).pack(pady=10)

        board = tk.Frame(self.main, bg="white", bd=1, relief="solid")
        board.pack(pady=20, padx=100, fill="x")

        ranking = sorted(
            self.score.items(),
            key=lambda x: x[1],
            reverse=True
        )

        for i, (name, points) in enumerate(ranking, 1):
            tk.Label(
                board,
                text=f"{i}. {name}   —   {points} puan",
                font=("Arial", 15, "bold" if name == "Sen" else "normal"),
                bg="white"
            ).pack(pady=7)

        tk.Button(
            self.main,
            text="SONRAKİ TUR →",
            command=self.next_round,
            font=("Arial", 14, "bold"),
            padx=25, pady=10
        ).pack(pady=20)

    def show_results(self):
        self.clear_main()
        self.round_label.config(text="OYUN BİTTİ")

        ranking = sorted(
            self.score.items(),
            key=lambda x: x[1],
            reverse=True
        )

        winner = ranking[0][0]

        tk.Label(
            self.main,
            text="🏆 OYUN BİTTİ!",
            font=("Arial", 32, "bold"),
            bg="#f4f4f4"
        ).pack(pady=25)

        tk.Label(
            self.main,
            text=f"🏆 Kazanan: {winner}",
            font=("Arial", 22, "bold"),
            bg="#f4f4f4"
        ).pack(pady=10)

        for i, (name, points) in enumerate(ranking, 1):
            tk.Label(
                self.main,
                text=f"{i}. {name}: {points} puan",
                font=("Arial", 16),
                bg="#f4f4f4"
            ).pack(pady=5)

        tk.Button(
            self.main,
            text="TEKRAR OYNA 🔄",
            command=self.start_game,
            font=("Arial", 14, "bold"),
            padx=30, pady=12
        ).pack(pady=30)


if __name__ == "__main__":
    root = tk.Tk()
Feedback wanted
neva17778Pixel Knight neva17778
Sign in to react
Uploaded Sep 3, 2026

Feedback

Sign in to leave feedback

Published feedback

Robby
InimitableRobby
Updated Sep 6, 2026

Neva Şen, Çizgi Savaşı projen çok eğlenceli bir oyun olmuş; özellikle botlarla beraber oynama fikrin ve kullanıcıya aşama aşama net talimatlar vermen sayesinde oyun herkese anlaşılır geliyor.

Böyle farklı turlar ve skor takibiyle kendi dijital oyununu yaratman harika; senin kodunda tıpkı gerçek oyunlarda olduğu gibi oyuncunun seçimleriyle her şey hareketleniyor, bu gerçekten programlamanın temelinde olan bir fikir!