İlk Python Oyunum ve Deneyimim

SanayZockt

Kilopat
Katılım
25 Ağustos 2016
Mesajlar
1.820
Makaleler
1
Çözümler
8
Daha fazla  
Cinsiyet
Erkek
Yaklaşık 1 hafta önce Discord için Bot yazma sebebiyle öğreneceğim Python diline başladım. Fakat bir sorun vardı. Ben ne class'ları biliyordum ne string, ne de int ve float. 😀 . Sıra sıra bunları öğrendim (bazen sabah saat 8'e kadar). Pomodoro tekniğini kullandım ve 25 dakikalık öğrenme sonunda 5 dakikalık molada öğrendiklerimi test ettim.
İlk gün hiç bir şey anlamadım 😂. YouTube'da 2. gün bir sürü öğretici videosu izledim ve temeli çözdüm. Matematik ile alakalı oyun yapacak kadar çözdüm evet.

Yeni başlayanlara tavsiyelerim: Her gördüğünüz videoyu izleyin arkadaşlar. 3-5 demeyin izleyin. Internette bazı Python ile alakalı kitaplar var onları okuyun, deneyin. Denerken buglar ile karşılacaksınız onları da çözün.

O zaman oyunuma geçelim. Oyunumda ki her yazdığım kodu yorumlara ile açıkladım. Yeni başlayanlara mükemmel örnek olacaktır. Ben kendim şahsen 3 tane bug ile karşılaştım. "30 satır kod yazmışsın ne bug'ı" demeyin arkadaşlar. Buglar bizi bir üst seviyeye taşır. 😀

Kod:
import random #Random modülünü ekledik
print("Çarpma Oyunu İçin 1'e basınız") #Ekrana gördüğünüz şeyi yazdırdık
print("-"*len(str("Çarpma Oyunu İçin 1'e basınız"))) #len kullanarak stringin uzunluğu kadar - işareti koydurduk ki hoş gözüksün
print("Toplama Oyunu İçin 2'ye basınız") #Yine ekrana yazdırdık
print("-"*len(str("Toplama Oyunu İçin'ye basınız"))) #Yine şu len olayı
print("Çıkarma oyunu için 3'e basınız") #Yine ekran :D
print("-"*len(str("Çıkarma oyunu için 3'e basınız "))) #Yine len
oyun = input("Lütfen hangi oyunu oynamak istediğinizi seçiniz.") #Kullanıcıdan bir string değeri istedik hangi oyunu oynayacağına dair. Bunu ileride int olarak çevireceğiz.
while True: #Döngü oluşturduk
    try: #Eğer kullanıcı oyun oynamak için 1, 2 ya da 3 yazarsa şunları dene:
        oyun2 = int(oyun) #kullanıcıdan aldığımız stringi int olarak dönüştürdük. Bu artık sadece tam sayı olabilir.
        while True: #Döngümüzün içinde yine bir döngü oluşturduk ki oyunumuz sürekli çalışsın
            if oyun2 == 1: #Eğer kullanıcı 1. oyunu seçtiyse
                sayı = random.randint(1, 9) #Sayı 1 için 1 ve 9 arasında random bir değer oluştur
                sayı2 = random.randint(1, 9) #Sayı 2 için 1 ve 9 arasında random bir değer oluştur
                sayı3 = int(sayı) #Sayı3 adlı bir değişken tanıdık ve bu değişkene sayı değişkinini int olarak çevirmesini söyledik
                sayı4 = int(sayı2) #Yine aynı olay""
                print(f"{sayı3} ve {sayı4} çarpımı kaçtır?") #Ekrana sayı3 ve sayı4 değerinin çarpımını sorduk
                tahmin = input() #Kullanıcıdan tahmin istedik
                tahmin2 = int(tahmin) #Tahmini int değerine çevirdik (unutmayın input değeri her zaman string olarak çeker)
                if tahmin2 == sayı3 * sayı4: #Eğer kullanıcının yazdığı sayı doğruysa
                    print("Tebrikler başardınız!") #Tebrikler başardınız ekrana yazsın döngü oluşturduğumuz için oyunumuz tekrardan başlayacak

            elif oyun2 == 2: #Eğer kullanıcı 2. oyunu seçtiyse
                sayı = random.randint(1, 300) #Sayı 1 için 1 ve 300 arasında random bir değer oluştur
                sayı2 = random.randint(1, 300) #Sayı 2 için 1 ve 300 arasında random bir değer oluştur
                sayı3 = int(sayı) #Sayı3 adlı bir değişken tanıdık ve bu değişkene sayı değişkinini int olarak çevirmesini söyledik
                sayı4 = int(sayı2) #Yine aynı olay
                print(f"{sayı3} ve {sayı4} toplamı kaçtır?") #Ekrana sayı3 ve sayı4 değerinin toplamını sorduk
                tahmin = input() #Kullanıcıdan tahmin istedik
                tahmin2 = int(tahmin) #Tahmini int değerine çevirdik (unutmayın input değeri her zaman string olarak çeker)
                if tahmin2 == sayı3 + sayı4: #Eğer kullanıcının yazdığı sayı doğruysa
                    print("Tebrikler başardınız!") #Tebrikler başardınız ekrana yazsın. Döngü oluşturduğumuz için oyunumuz tekrardan başlayacak.
            elif oyun2 == 3: #Eğer kullanıcı 3. oyunu seçtiyse
                sayı = random.randint(150, 300) #Sayı 1 için 150 ve 300 arasında random bir değer oluştur
                sayı2 = random.randint(1, 150) #Sayı 2 için 1 ve 150 arasında random bir değer oluştur
                sayı3 = int(sayı) #Sayı3 adlı bir değişken tanıdık ve bu değişkene sayı değişkinini int olarak çevirmesini söyledik
                sayı4 = int(sayı2) #Aynı olay"
                print(f"{sayı3} ve {sayı4} çıkarırsak kaç kalır?") #Ekrana sayı3'ten  sayı4 çıkarılırsa kaç kalır diye sorduk
                tahmin = input() #Kullanıcıdan cevabı istedik
                tahmin2 = int(tahmin) #Cevabı tam sayıya çevirdik
                if tahmin2 == sayı3 - sayı4: #Eğer doğruysa
                    print("Tebrikler başardınız!") #Başardınız!
    except ValueError: #Eğer kullanıcı bir oyun seçmek yerine space bastıysa veya harf girdiyse
        print("Lütfen harf ve benzeri şeyleri girmeyin. Sadece oynamak istediğiniz oyunun sayısını girin.")
        break
Arkadaşlar az önce bir şey keşfettim. Ben önce sayıları string halinde input alıp sonradan integer'a çeviriyordum. Direkt olarak integer alabiliyormuşuz.
Gelişmiş bir versiyonunu yaptım. Sınıf kullanarak.
Kod:
import random
import time

class MatOyunu(object):
    def __init__(self):
        self.sayi1 = random.randint(1, 9)
        self.sayi2 = random.randint(1, 9)
        self.sayi3 = random.randint(150, 300)
        self.sayi4 = random.randint(1, 150)
        self.sayi5 = random.randint(1, 300)
        self.sayi6 = random.randint(1, 300)

    def Secenek(self, secim=6):
        self.secim = secim
        print("")
        print("Çarpım Tablosu Oyunu için 1'e basınız.")
        print("-" * len(str("Çarpım Tablosu Oyunu için 1'e basınız.")))
        print("Toplama Oyunu için 2'ye basınız.")
        print("-" * len(str("Toplama Oyunu için 2'ye basınız.")))
        print("Çıkarma Oyunu için 3'e basınız.")
        print("-" * len(str("Çıkarma Oyunu için 3'e basınız.")))
        while self.secim == 6:
            try:
                print("")
                self.secenek = input("Lütfen oynamak istediğiniz oyuna karşılık gelen sayıyı giriniz: ")
                self.secenek = int(self.secenek)
                time.sleep(1)
                while self.secenek == 1:
                    self.sayi1 = random.randint(1, 9)
                    self.sayi2 = random.randint(1, 9)
                    oyunsorusu1 = self.sayi1 * self.sayi2
                    print("")
                    cevap1 = int(input(f"{self.sayi1} ve {self.sayi2} sayılarının çarpımı nedir? (Oyunu kapatmak için 0 yazınız.) \nCevabı giriniz: "))
                    if cevap1 == oyunsorusu1:
                        print("")
                        time.sleep(0.3)
                        print("Tebrikler başardınız. Yeni soru geliyor!!")
                    elif cevap1 == 0:
                        print("")
                        print("Oyun kapatılıyor...")
                        time.sleep(1)
                        break
                        time.sleep(1.3)
                    else:
                        print("")
                        print("Gerçekten bu sorunun cevabını bilemeyecek kadar bilgisiz misin? :(")
                if self.secenek == 2:
                    self.sayi3 = random.randint(150, 300)
                    self.sayi4 = random.randint(1, 150)
                    oyunsorusu2 = self.sayi3 + self.sayi4
                    print("")
                    cevap2 = int(input(f"{self.sayi3} ve {self.sayi4} sayılarının toplamı nedir? (Oyunu kapatmak için 0 yazınız.) \nCevabı giriniz: "))
                    if cevap2 == oyunsorusu2:
                        time.sleep(0.7)
                        print("")
                        print("Tebrikler başardınız. Ana menüye dönülüyor.")
                    elif cevap2 == 0:
                        print("")
                        print("Oyun kapatılıyor...")
                        time.sleep(1)
                        break
                    else:
                        time.sleep(0.7)
                        print("")
                        print("Gerçekten bu sorunun cevabını bilemeyecek kadar bilgisiz misin? :(")
                if self.secenek == 3:
                    self.sayi5 = random.randint(1, 300)
                    self.sayi6 = random.randint(1, 300)
                    oyunsorusu3 = self.sayi5 + self.sayi6
                    print("")
                    cevap3 = int(input(f"{self.sayi5} ve {self.sayi6} sayılarını çıkarırsak kaç kalır? (Oyunu kapatmak için 0 yazınız.) \nCevabı giriniz: "))
                    if cevap3 == oyunsorusu3:
                        time.sleep(0.7)
                        print("")
                        print("Tebrikler başardınız. Yeni soru geliyor!!")
                    elif cevap3 == 0:
                        print("")
                        print("Oyun kapatılıyor...")
                        time.sleep(1)
                        break
                    else:
                        time.sleep(0.7)
                        print("")
                        print("Gerçekten bu sorunun cevabını bilemeyecek kadar bilgisiz misin? :(")

            except ValueError:
                time.sleep(0.7)
                print("")
                print("Lütfen sadece oynamak istediğiniz oyunun sayısını giriniz: ")
                break


oyun = MatOyunu()
oyun.Secenek()
 
Son düzenleme:
Güzel bir uygulama olmuş birkaç eksik yanını söylemek istiyorum. İlk olarak sadece toplama bölümü while döngüsü ile yapmışsın bundan dolayı çarpma dışındaki toplama ve çıkarma bölümlerinde sadece 1 soru sorabiliyorsun onu düzeltmedim fakat bir şeyler ekledim ilk kodu başlattım çarpma ile başladım bittiğinde hiçbir bilgi vermediğini gördüğüm küçük 1-2 kod ekledim çarpma bölümünü yaptığımız ve bitir dediğimizde artık kaç doğru kaç yanlış yaptığımızı gösteren bir kod yazdım. Aynısını toplama ve çıkarma içinde yapacaktım fakat tekrarla döngüsünde olan bir tek çarpma olduğu için ona ekledim. Geri kalanı için gayet kafa dağıtıcı, kolay, pratik bir oyun olmuş başarılar devamını dilerim.(Sıralama - galip -yenil kodlarını ekledim sadece)

Python:
 while self.secim == 6:
try:
print("")
self.secenek = input("Lütfen oynamak istediğiniz oyuna karşılık gelen sayıyı giriniz: ")
self.secenek = int(self.secenek)
time.sleep(1)
sıralama = 0
galip = 0
while self.secenek == 1:
self.sayi1 = random.randint(1, 9)
self.sayi2 = random.randint(1, 9)
oyunsorusu1 = self.sayi1 * self.sayi2
print("")
cevap1 = int(input(f"{self.sayi1} ve {self.sayi2} sayılarının çarpımı nedir? (Oyunu kapatmak için 0 yazınız.) \nCevabı giriniz: "))
if cevap1 == oyunsorusu1:
print("")
time.sleep(0.3)
print("Tebrikler başardınız. Yeni soru geliyor!!")
sıralama += 1
galip += 1
elif cevap1 == 0:
yenil = sıralama - galip
print("")
print(f"{sıralama} kadar oyun oynadınız ve {galip} kadar bildiniz {yenil} kadar kaybettiniz") ]
print("Oyun kapatılıyor...")
time.sleep(1)
break
time.sleep(1.3)
else:
sıralama += 1
print("")
print("Gerçekten bu sorunun cevabını bilemeyecek kadar bilgisiz misin? :(")
 
Böyle böyle çok hızlı öğrenirsiniz, uygulama yapmak çok önemli. Ellerinize sağlık. İlginizi çekerse imzamdaki Python hakkındaki yazıya bakabilirsiniz.
 

Geri
Yukarı