RPG Oyununu Geliştirmek

Kodlarınızı inceledim. Sanıyorum ki daha OOP (Nesne tabanlı programlama) kavramına yeni başlamışsınız. Hatalarınızın bazılarını madde madde inceleyerek açıklamaya çalışayım:

  • İlk olarak Python’un çalışma mantığını hatırlayalım. Python yazdığımız kodları yukarıdan aşağı doğru okur. Yani eğer:
print(a + b)
a = 5
b = 4

Şeklinde bir kullanımda Python bize a ve b değişkenlerinin tanımlanmadığı hatasını verir. Aynı şekilde sizin kodlarınızda:

import time
import random

class Oyuncu(Oyuncu_Özellikleri, Köy, Dev, Çapulcu, Hayalet, Goblin, Mağara):

Oyuncu sınıfının miras alınacağı sınıflar daha tanımlanmamış olduğu için hata alırsınız.

  • İkinci olarak örneğinizdeki Oyuncu sınıfına Köy, Dev, Çapulcu, Hayalet, Goblin, Mağara sınıflarını miras almanıza hiç gerek yok. Miras almanın amacı o sınıfın değişkenlerini örnek aldığınız sınıfa uygulamaktır. Sınıflardaki sınıf değişkenlerini kullanarak diğer sınıfların da bu değişkenlere daha sınıf örneklenmeden ulaşabilmesini sağlayabilirsiniz.

  • Sınıf içindeki örnek değişkenlerini başında mutlaka özel ifadesiyle yazıyoruz. Sizin örneğinizde “self” bu özel ifade oluyor. Ayrıca başka sınıfın değişkenine ulaşırken “self” ifadesini kullanamazsınız. Sizin örneğinizde:

class Dev():
    def __init__(self, can=20, vuruş=10, enerji=4):
        self.can = can
        self.vuruş = vuruş
        self.enerji = enerji
        print("Bir 'Dev' size doğru geliyor...")
        self.savaş()

sınıfında (diğer sınıflarda da aynı hata var) “self.savaş()” ifadesi hatalı çünkü “Dev” sınıfında “savaş()” fonksiyonu yok. Bu, “Oyuncu” sınıfının fonksiyonu. Ayrıca bu haliyle bu fonksiyonu başka sınıflarda çağıramazsınız çünkü henüz “Oyuncu” sınıfı örneklenmemiş oluyor. Sınıf metodu olarak yeniden tanımlanmalı.

  • Son bahsettiğim durum değişkenlerde de geçerli. Yani:
def dinlen_köy(self):
        self.can += 10
        self.enerji += 2

ifadesinde “Köy” sınıfı “can” ya da “enerji” değişkenlerine sahip değil. Bunlar, “Oyuncu” sınıfının değişkenleri.

Size tavsiyem “Sınıf” konusunu ve tekrar çalışmanız ve kodlarda ekleme yapmadan önce nasıl çalıştığını çözmeniz. Çünkü kodlarınız bu durumdayken çok eksik ve yanlışları var.
Kendinizi ekleme yapmaya hazır hissettiğinizde eklemelerinizin hepsini bir anda değil, sırayla yapın. Yani pek çok özellik eklemektense önce birini ekleyin ve iyice test edin. Sorun olmadığına emin olduğunuzda diğerlerine geçersiniz.

Size önerim pylint kullanabileceğiniz bir editöre geçin. Şu gönderiye bir göz atın.