Ç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
Sign in to react
Feedback
Published feedback
InimitableRobby
Updated Sep 6, 2026Neva Ş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!