Python Yaptığım oyun nasıl?

Hocam Python yazılım dili içerisinde arayüz geliştirmek için "Tkinter" adında bir kütüphane var. Onu yeni öğrenmeye başladım. Bundan dolayı arayüz geliştirmeyi tam bilmediğim için animasyonlu yapamadım. Kusura bakmayın:( fakat içerisinde "while" döngüleri "if" komutları gibi birçok uzmanlık gerektiren komut var.

Hocam eskiden yaptığım 8 çalışmam daha var. Onlarda komutlu. Arayüz geliştirmeyi daha öğrenmedim.

Aslında biraz YouTube gibi yerlerden araştırıp kendin öğrenebilirsin ben mesela tasarımı Full YouTube'daki içerikler ile öğrendim kendini çok güzel geliştirebilirsin sadece YouTube üzerinden.
 
Hocam Python yazılım dili içerisinde arayüz geliştirmek için "Tkinter" adında bir kütüphane var. Onu yeni öğrenmeye başladım. Bundan dolayı arayüz geliştirmeyi tam bilmediğim için animasyonlu yapamadım. Kusura bakmayın:( Fakat içerisinde "While" döngüleri "İf" komutları gibi bir çok uzmanlık gerektiren komut var.


Hocam eskiden yaptığım 8 çalışmam daha var. Onlarda komutlu. Arayüz geliştirmeyi daha öğrenmedim.
Hocam diğerlerine aldanmayın dili iyice öğrendikten sonra arayüz konusuna geçin.
 
Merhaba, Python üzerinden bir taş, kağıt, makas oyunu yaptım. Bu oyun ".exe" biçiminde indirirken zararlı yazılım diyordu bende "GDB" adlı bir site yardımıyla hiçbir şey indirmeden internet tarayıcısı üzerinden oyunuma bakabilirsiniz. Oyunuma bakıp 5 üzerinden puan vermenizi istiyorum.

Oyun linki:

Bence yazılarda biraz düzenleme yapman lazım. Mesela print("Deneme {}".format(deger)) kullanmak yerine başına f koyup print(f"Deneme {deger}") yazabilirsin. Kodun biçimi de önemli. Ayrıca her bir kombinasyon için ayrı ayrı bitiş mesajı koymak yerine string'lere bölüp onları birleştirerek yapman daha iyi olur. Aşağıda verdiğim tarz bir kod yazarak daha az satırla daha rahat halledebilirsin. Benim yazdığımda matrix ve liste var.

Puanım: 4

Python:
# -*- coding: utf-8 -*-

# Sadece randint fonksiyonunu kullandık. O yüzden nokta atışı olarak
# onu çağırdık. Ayrıca ben sleep'i koymayı tercih etmedim ama PC seçim
# yapmadan önce beklesin istiyorsanız 'from time import sleep' yazıp
# sleep(1.5) şeklinde bekleme kullanabilirsiniz.
from random import randint


# Oyun süresince kullanılacak olan ve değişmeyecek olan değerleri
# tanımladık. Bunlar ön tanımlı ve sabit olduğu için constant değişkenler
# olarak adlandırılır. Bu değişkenlerin isimlerini büyük harfle yazmak
# kodu geliştirirken daha belirleyici olur.

# Seçme durumu mesajları
CHOICES = [
    "Senin seçimin: ",
    "Bilgisayarın seçimi: "
]
# Oyun sonu mesajları
MESSAGES = [
    "Kazandın!",
    "Berabere!",
    "Kaybettin!"
]
# Şekiller listesi
SHAPES = [
    "Taş",
    "Kağıt",
    "Makas"
]
# Kazanma durumu tablosu.
WIN_MAP = [
    # Kullanıcı, Sistem
    [0, 2], # T, M
    [1, 0], # K, T
    [2, 1]  # M, K
]


print("=== TAŞ KAĞIT MAKAS OYUNU ===")


# Tek tek değerleri manuel yazmak yerine tek bir dmgüyle hepsini otomatik
# olarak yazdık. Ayrıca .format() yerine f-string kullanmak da okunurluk
# açısından daha iyi.
for i in range(len(SHAPES)):
    print(f"{i+1} - {SHAPES[i]}")

# Kullanıcıdan değeri aldık ve bilgisayara seçim yaptırdık.
user_select = int(input("Seçimini gir: ")) - 1
pc_select = randint(0, 2)

# Buraya bekleme koyabilirsiniz.
# print("Bilgisayar kendi seçimini yapıyor...")
# sleep(1.5)

# Seçimleri yazdırdık.
print(CHOICES[0] + SHAPES[user_select])
print(CHOICES[1] + SHAPES[pc_select])

# Oyunu kazanıp kaybetme durumlarına göre mesaj yazdırdık.
if [user_select, pc_select] in WIN_MAP:
    print(MESSAGES[0])
elif user_select == pc_select:
    print(MESSAGES[1])
else:
    print(MESSAGES[2])
 
Bence yazılarda biraz düzenleme yapman lazım. Mesela print("Deneme {}".format(deger)) kullanmak yerine başına f koyup print(f"Deneme {deger}") yazabilirsin. Kodun biçimi de önemli. Ayrıca her bir kombinasyon için ayrı ayrı bitiş mesajı koymak yerine string'lere bölüp onları birleştirerek yapman daha iyi olur. Aşağıda verdiğim tarz bir kod yazarak daha az satırla daha rahat halledebilirsin. Benim yazdığımda matrix ve liste var.

Puanım: 4

Python:
# -*- coding: utf-8 -*-

# Sadece randint fonksiyonunu kullandık. O yüzden nokta atışı olarak
# onu çağırdık. Ayrıca ben sleep'i koymayı tercih etmedim ama PC seçim
# yapmadan önce beklesin istiyorsanız 'from time import sleep' yazıp
# sleep(1.5) şeklinde bekleme kullanabilirsiniz.
from random import randint


# Oyun süresince kullanılacak olan ve değişmeyecek olan değerleri
# tanımladık. Bunlar ön tanımlı ve sabit olduğu için constant değişkenler
# olarak adlandırılır. Bu değişkenlerin isimlerini büyük harfle yazmak
# kodu geliştirirken daha belirleyici olur.

# Seçme durumu mesajları
CHOICES = [
    "Senin seçimin: ",
    "Bilgisayarın seçimi: "
]
# Oyun sonu mesajları
MESSAGES = [
    "Kazandın!",
    "Berabere!",
    "Kaybettin!"
]
# Şekiller listesi
SHAPES = [
    "Taş",
    "Kağıt",
    "Makas"
]
# Kazanma durumu tablosu.
WIN_MAP = [
    # Kullanıcı, Sistem
    [0, 2], # T, M
    [1, 0], # K, T
    [2, 1]  # M, K
]


print("=== TAŞ KAĞIT MAKAS OYUNU ===")


# Tek tek değerleri manuel yazmak yerine tek bir dmgüyle hepsini otomatik
# olarak yazdık. Ayrıca .format() yerine f-string kullanmak da okunurluk
# açısından daha iyi.
for i in range(len(SHAPES)):
    print(f"{i+1} - {SHAPES[i]}")

# Kullanıcıdan değeri aldık ve bilgisayara seçim yaptırdık.
user_select = int(input("Seçimini gir: ")) - 1
pc_select = randint(0, 2)

# Buraya bekleme koyabilirsiniz.
# print("Bilgisayar kendi seçimini yapıyor...")
# sleep(1.5)

# Seçimleri yazdırdık.
print(CHOICES[0] + SHAPES[user_select])
print(CHOICES[1] + SHAPES[pc_select])

# Oyunu kazanıp kaybetme durumlarına göre mesaj yazdırdık.
if [user_select, pc_select] in WIN_MAP:
    print(MESSAGES[0])
elif user_select == pc_select:
    print(MESSAGES[1])
else:
    print(MESSAGES[2])
Hocam inanılmaz bir bilginiz var. Daha yeni yeni öğreniyorum 1 ay önce başladım ve kursu alalı 2 haftadan az oldu. Teşekürler daha for i range komutunu ve shapes diye tanımladığınız şeyleri bilmiyordum. Teşekürler dediklerinize dikkat etmeye çalışacağım çok iyi birisiniz iyi akşamlar.
 
Hocam inanılmaz bir bilginiz var. Daha yeni yeni öğreniyorum 1 ay önce başladım ve kursu alalı 2 haftadan az oldu. Teşekürler daha for i range komutunu ve shapes diye tanımladığınız şeyleri bilmiyordum. Teşekürler dediklerinize dikkat etmeye çalışacağım çok iyi birisiniz iyi akşamlar.
Rica ederim. Lafı geçmişken kısa bilgi vereyim o zaman:

SHAPES olarak tanımladığım değişken bir liste veya dizi (yabancı kaynaklarda ise array diye geçer). Kısaca verileri bir araya gruplamaya yarar dersek yanlış olmaz. Mesela ben bu kodda CHOICES, MESSAGES ve SHAPES adı ile 3 tane dizi tanımladım.

Dizilerde eleman sayımı 0'dan başlar. Mesela meyveler = ['elma', 'armut', 'karpuz'] şeklinde bir dizi varsa bunun üçüncü elemanı için (istediğin elemanın sayısı) - 1 şeklinde yani karpuz için 2 numaralı elemanı çağırman gerekir.

Dizi verilerini kullanmak için liste_adi[eleman_no] şeklinde bir yazımı var. Eğer ben bu diziden armut kelimesini almak istersem print(meyveler[1]) satırını kullanabilirim. Dizilerin verilerini değiştirmek de benzer bir şekilde oluyor. Eğer ben elma yerine kiraz koymak istersem o zaman şunu yapabilirim: meyveler[0] = "kiraz"

for komutu ise bir döngüdeki her bir eleman için tekrar tekrar aynı işlemleri uygulayan bir fonksiyondur. Buna da şöyle bir örnek verelim: Yine aynı şekilde meyveler = ['elma', 'armut', 'karpuz'] olsun. Eğer şu kodu çalıştırırsak:
Python:
for meyve in meyveler:
    print(meyve)
Kod sırayla döngünün elemanlarını alacak ve her seferinde meyve diye geçici bir değişkene atayacak. Daha sonra print fonksiyonu ile bunları ekrana yazdıracak. Çıktısı ise böyle olur:
Kod:
elma
armut
kiraz

Son olarak ise range() fonksiyonu. Bu fonksiyon verdiğimiz değer aralığında bir dizi oluşturur. Mesela range(5) komutu ile [0, 1, 2, 3, 4] dizisi aynıdır. Ayrıca başlangıç değeri de verebilirsiniz. Örnek olarak range(7,10) ile [7, 8, 9] aynıdır. Önemli nokta ise range komutu son değeri diziye dahil etmez. Son bir örnek olarak da 10 kere tekrarlayan bir kod yazmak isterseniz kodunuz şu şekilde olmalı:
Python:
for i in range(10):
    abcd()
 
Merhaba, Python üzerinden bir taş, kağıt, makas oyunu yaptım. Bu oyun ".exe" biçiminde indirirken zararlı yazılım diyordu bende "GDB" adlı bir site yardımıyla hiçbir şey indirmeden internet tarayıcısı üzerinden oyunuma bakabilirsiniz. Oyunuma bakıp 5 üzerinden puan vermenizi istiyorum.

Oyun linki:

Başlangıç için 10/8
 
Kodlama konusunda bilgi sahibi değilim ancak oyun konusunda beraber kaldıktan sonra direkt tekrar sormasını vesaire düşünmen güzel olmuş. Tabii pek ilgi çekici bir yapım değil, böyle bir amacının olduğunu da düşünmüyorum. Kod bilginle yüzeysel bir oyun tasarlamak istemişsin ki başarmışsın, tebrik ederim. Yolun açık olsun.
 
1684610480580.png


Bir de yapay zeka dünyayı ele geçirecek derler daha beni taş kağıt makasda yenemiyor 😁
 
Merhaba, Python üzerinden bir taş, kağıt, makas oyunu yaptım. Bu oyun ".exe" biçiminde indirirken zararlı yazılım diyordu bende "GDB" adlı bir site yardımıyla hiçbir şey indirmeden internet tarayıcısı üzerinden oyunuma bakabilirsiniz. Oyunuma bakıp 5 üzerinden puan vermenizi istiyorum.

Oyun linki:

Yani güzelde yeni başlamışsınız. Bazı kısımları tekrar yazmak yerine oyunu daha etkili olarak yazıp 90 satıra kadar rahat düşürebilirsiniz belki daha az satıra kadar. Bazı tekrar eden cümleleri yazmak yerine onları bir arrayden çekebilirdiniz. Kod daha temiz olurdu ve düzeltmeniz gereken daha az yer olurdu. Bilgisayarın kararını illa Taş, Kağıt, Makas olarak tutmak yerine 1, 2, 3 olarak tutup oyuncuya durumu gösterirken bir sözlükten otomatik karşılık gelen değeri basabilirdiniz. İlla herşeyi düşündüğünüz gibi yazmak zorunda değildiniz. Yani yapılabilecek çok şey var ama yeni başlayan biri için kötü değil güzel bir oyun. Bu bir kenara koyup bunun versiyon 2si altında biraz daha uğraşırsanız. Daha güzel şekilde yazabilirsiniz. Burada yazmadığım başka iyileştirmeleride zaman ayırırsanız bulabilirsiniz. Ama dediğim gibi şevkinizi kırmak istemem yeni başlayan biri için güzel yazmışsınız.
 

Geri
Yukarı