Python Yaptığım oyun nasıl?


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 diğerlerine aldanmayın dili iyice öğrendikten sonra arayüz konusuna geçin.
 
Hocam diğerlerine aldanmayın dili iyice öğrendikten sonra arayüz konusuna geçin.
Zaten öyle yapmak istiyorum. Udemy üzerinden kurs satın aldım. Şuan biraz gerideyim ilerleyip tkinter konularına geçeceğim.
 
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.
 
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()
 
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.
 


Bir de yapay zeka dünyayı ele geçirecek derler daha beni taş kağıt makasda yenemiyor
 
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.
 
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için çerezleri kabul etmelisiniz. Daha Fazlasını Öğren.…