lostyazilim
tr.link

Python İle Veritaban Kayıtlı Yılan Oyunu

3 Mesajlar 1.190 Okunma
acebozum
tr.link

OFffLaZZzz OFffLaZZzz WM Aracı Kullanıcı
  • Üyelik 16.06.2023
  • Yaş/Cinsiyet 40 / E
  • Meslek Esnaf
  • Konum Trabzon
  • Ad Soyad M** K**
  • Mesajlar 28
  • Beğeniler 10 / 13
  • Ticaret 0, (%0)

Yılan Oyunu Video Tanıtım

 

https://www.dailymotion.com/video/x8lt8lv

 

Yılan oyunu, klasik bir video oyunudur ve bir yılanı kontrol ederek yiyecekleri yemeyi amaçlar. Bu makalede, Python programlama dilini ve Tkinter kütüphanesini kullanarak basit bir yılan oyunu oluşturacağız. Oyun, kullanıcının yılanı yukarı, aşağı, sola veya sağa yönlendirmesine ve yiyecekleri yemesine dayanmaktadır. Ayrıca kullanıcı puanını kaydedebilir ve puan tablosunu görüntüleyebilir.

Makalenin İçeriği:

  1. Giriş

    • Yılan Oyunu Kavramı
    • Tkinter ve Python Hakkında Bilgi
  2. Oyunun İşleyişi

    • Tkinter ile Pencere Oluşturma
    • Yılanın Kontrol Edilmesi
    • Yemlerin Oluşturulması ve Yenilmesi
    • Yılanın Kendine ve Duvarlara Çarpma Kontrolü
  3. Puanlama Sistemi

    • Kullanıcı Adının Alınması
    • Puanın Güncellenmesi
    • Puanın Veritabanına Kaydedilmesi
  4. Oyunun Bitirilmesi ve Puan Tablosu

    • Oyunun Sonlandırılması
    • Puanların Veritabanından Alınması
    • Puan Tablosunun Görüntülenmesi
  5. Sonuç ve Kaynaklar

    • Yılan Oyununun İncelenmesi
    • Kaynaklara Erişim

Sonuç: Bu makalede, Python programlama dilini ve Tkinter kütüphanesini kullanarak basit bir yılan oyunu geliştirdik. Kullanıcı, yılanı yön tuşlarıyla yönlendirebilir ve yiyecekleri yiyerek puan kazanabilir. Oyun bittiğinde, kullanıcı puanını kaydedebilir ve puan tablosunu görüntüleyebilir. Bu proje, Python ve Tkinter'i kullanarak oyun geliştirmek isteyenler için temel bir başlangıç noktası olabilir.

 

 

 

import tkinter as tk
from tkinter import ttk, messagebox
import random
import sqlite3

GENISLIK = 400
YUKSEKLIK = 400
YILAN_BOYUT = 20
VERITABANI_DOSYASI = "oyun_veritabani.db"


class YilanOyunu:
    def __init__(self, pencere, kullanici_ad):
        self.pencere = pencere
        self.pencere.title("Yılan Oyunu")
        self.canvas = tk.Canvas(pencere, width=GENISLIK, height=YUKSEKLIK, bg="black")
        self.canvas.pack()

        self.yilan_bas_x = GENISLIK / 2
        self.yilan_bas_y = YUKSEKLIK / 2
        self.yilan_parcalari = []
        self.yon = "yukari"

        self.yem_x = 0
        self.yem_y = 0
        self.yem = None

        self.puan = 0
        self.kullanici_ad = kullanici_ad

        self.canvas.bind_all("<KeyPress>", self.tus_takip)

        self.yilan_parcalari.append(
            self.canvas.create_rectangle(self.yilan_bas_x, self.yilan_bas_y, self.yilan_bas_x + YILAN_BOYUT,
                                         self.yilan_bas_y + YILAN_BOYUT, fill="green"))

        self.yem_olustur()
        self.oyun_hareket()

    def oyun_hareket(self):
        if self.yilan_duvarlara_carpti_mi() or self.yilan_kendine_carpti_mi():
            self.oyun_bitir()
            return

        self.yilan_hareket()

        self.pencere.after(100, self.oyun_hareket)

    def yilan_hareket(self):
        yeni_bas_x, yeni_bas_y, _, _ = self.canvas.coords(self.yilan_parcalari[0])

        if self.yon == "yukari":
            yeni_bas_y -= YILAN_BOYUT
            if yeni_bas_y < 0:
                yeni_bas_y = YUKSEKLIK - YILAN_BOYUT
        elif self.yon == "asagi":
            yeni_bas_y += YILAN_BOYUT
            if yeni_bas_y >= YUKSEKLIK:
                yeni_bas_y = 0
        elif self.yon == "sol":
            yeni_bas_x -= YILAN_BOYUT
            if yeni_bas_x < 0:
                yeni_bas_x = GENISLIK - YILAN_BOYUT
        elif self.yon == "sag":
            yeni_bas_x += YILAN_BOYUT
            if yeni_bas_x >= GENISLIK:
                yeni_bas_x = 0

        self.yilan_parcalari.insert(0, self.canvas.create_rectangle(yeni_bas_x, yeni_bas_y, yeni_bas_x + YILAN_BOYUT,
                                                                    yeni_bas_y + YILAN_BOYUT, fill="green"))

        if self.yilan_yem_yedi_mi():
            self.puan += 10
            self.canvas.itemconfig(self.yem, fill="black")
            self.yem_olustur()
        else:
            self.canvas.delete(self.yilan_parcalari[-1])
            self.yilan_parcalari.pop()

        self.puan_guncelle()

    def yem_olustur(self):
        self.yem_x = random.randint(0, (GENISLIK - YILAN_BOYUT) // YILAN_BOYUT) * YILAN_BOYUT
        self.yem_y = random.randint(0, (YUKSEKLIK - YILAN_BOYUT) // YILAN_BOYUT) * YILAN_BOYUT

        self.yem = self.canvas.create_rectangle(self.yem_x, self.yem_y, self.yem_x + YILAN_BOYUT,
                                                self.yem_y + YILAN_BOYUT, fill="red")

    def yilan_yem_yedi_mi(self):
        yilan_bas_x, yilan_bas_y, _, _ = self.canvas.coords(self.yilan_parcalari[0])
        return yilan_bas_x == self.yem_x and yilan_bas_y == self.yem_y

    def yilan_duvarlara_carpti_mi(self):
        yilan_bas_x, yilan_bas_y, _, _ = self.canvas.coords(self.yilan_parcalari[0])
        return False

    def yilan_kendine_carpti_mi(self):
        yilan_bas_konum = self.canvas.coords(self.yilan_parcalari[0])
        return any(yilan_bas_konum == self.canvas.coords(parca) for parca in self.yilan_parcalari[1:])

    def tus_takip(self, event):
        tus = event.keysym
        if tus == "Up" and self.yon != "asagi":
            self.yon = "yukari"
        elif tus == "Down" and self.yon != "yukari":
            self.yon = "asagi"
        elif tus == "Left" and self.yon != "sag":
            self.yon = "sol"
        elif tus == "Right" and self.yon != "sol":
            self.yon = "sag"

    def puan_guncelle(self):
        self.canvas.delete("puan")
        self.canvas.create_text(10, 10, text=f"Puan: {self.puan}", fill="white", anchor="nw", tags="puan")

    def oyun_bitir(self):
        self.canvas.delete("all")
        self.canvas.create_text(GENISLIK / 2, YUKSEKLIK / 2, text="Oyun Bitti!", fill="white", font=("Arial", 20),
                                anchor="center")
        self.canvas.create_text(GENISLIK / 2, YUKSEKLIK / 2 + 30, text=f"Puanınız: {self.puan}", fill="white",
                                font=("Arial", 16), anchor="center")

        self.kayit_ekle(self.kullanici_ad, self.puan)

        self.yeniden_baslat_button = ttk.Button(self.pencere, text="Yeniden Başlat", command=self.yeniden_baslat)
        self.yeniden_baslat_button.pack()

        self.puan_tablosu_button = ttk.Button(self.pencere, text="Puan Tablosu", command=self.puan_tablosunu_goster)
        self.puan_tablosu_button.pack()

    def kayit_ekle(self, kullanici_ad, puan):
       baglanti = sqlite3.connect(VERITABANI_DOSYASI)
       cursor = baglanti.cursor()

       # Tablo kontrolü yapılıyor
       cursor.execute("CREATE TABLE IF NOT EXISTS puanlar (kullanici_ad TEXT, puan INTEGER)")

       cursor.execute("INSERT INTO puanlar (kullanici_ad, puan) VALUES (?, ?)", (kullanici_ad, puan))
       baglanti.commit()
       baglanti.close()


    def yeniden_baslat(self):
        self.pencere.destroy()
        ana_pencere.deiconify()

    def puan_tablosunu_goster(self):
        baglanti = sqlite3.connect(VERITABANI_DOSYASI)
        cursor = baglanti.cursor()
        cursor.execute("SELECT kullanici_ad, puan FROM puanlar ORDER BY puan DESC")
        puanlar = cursor.fetchall()
        baglanti.close()

        puan_tablosu_pencere = tk.Toplevel(self.pencere)
        puan_tablosu_pencere.title("Puan Tablosu")

        treeview = ttk.Treeview(puan_tablosu_pencere, columns=("Kullanıcı Adı", "Puan"), show="headings")
        treeview.heading("Kullanıcı Adı", text="Kullanıcı Adı")
        treeview.heading("Puan", text="Puan")

        for kullanici_ad, puan in puanlar:
            treeview.insert("", "end", values=(kullanici_ad, puan))

        treeview.pack()


def baslat():
    kullanici_ad = kullanici_entry.get()
    if kullanici_ad:
        kullanici_label.config(text=f"Kullanıcı Adı: {kullanici_ad}")
        oyun_penceresi = tk.Toplevel(ana_pencere)
        YilanOyunu(oyun_penceresi, kullanici_ad)
        ana_pencere.withdraw()
    else:
        messagebox.showerror("Hata", "Lütfen kullanıcı adınızı girin.")


ana_pencere = tk.Tk()
ana_pencere.title("Yılan Oyunu Giriş")

kullanici_label = ttk.Label(ana_pencere, text="Kullanıcı Adı:")
kullanici_label.pack()

kullanici_entry = ttk.Entry(ana_pencere)
kullanici_entry.pack()

baslat_button = ttk.Button(ana_pencere, text="Başlat", command=baslat)
baslat_button.pack()

ana_pencere.mainloop()

Mesaj 1 defa düzenlendi. Son düzenleyen: OFffLaZZzz (16.06.2023 13:10)

 

 

elektronikssl
webimgo

130793 130793 WM Aracı Anonim Üyelik
  • Üyelik 19.07.2021
  • Yaş/Cinsiyet - /
  • Meslek
  • Konum
  • Ad Soyad ** **
  • Mesajlar 238
  • Beğeniler 8 / 34
  • Ticaret 0, (%0)

hey yavrum hey tkinter ile kameralı box makinesi yazmışdım raspi ve ardu ile :D devam iyi yoldasın pythonu yazan herşeyi yazar.

OFffLaZZzz

kişi bu mesajı beğendi.

OFffLaZZzz OFffLaZZzz WM Aracı Kullanıcı
  • Üyelik 16.06.2023
  • Yaş/Cinsiyet 40 / E
  • Meslek Esnaf
  • Konum Trabzon
  • Ad Soyad M** K**
  • Mesajlar 28
  • Beğeniler 10 / 13
  • Ticaret 0, (%0)

epine adlı üyeden alıntı

hey yavrum hey tkinter ile kameralı box makinesi yazmışdım raspi ve ardu ile :D devam iyi yoldasın pythonu yazan herşeyi yazar.

Sonunda bir kişinin ilgisini çekti. 👍

 

 

wmaraci
wmaraci
Konuyu toplam 2 kişi okuyor. (0 kullanıcı ve 2 misafir)
Site Ayarları
  • Tema Seçeneği
  • Site Sesleri
  • Bildirimler
  • Özel Mesaj Al