import time
import random
import sys
class Oyuncu():
def __init__(self, isim, can=5, enerji=100):
self.isim = isim
self.darbe = 0
self.can = can
self.enerji = enerji
def mevcut_durumu_görüntüle(self):
print('darbe: ', self.darbe)
print('can: ', self.can)
print('enerji: ', self.enerji)
def saldır(self, rakip):
print('Bir saldırı gerçekleştirdiniz.')
print('Saldırı sürüyor. Bekleyiniz.')
for i in range(10):
time.sleep(.3)
print('.', end='', flush=True)
sonuç = self.saldırı_sonucunu_hesapla()
if sonuç == 0:
print('\nSONUÇ: kazanan taraf yok')
if sonuç == 1:
print('\nSONUÇ: rakibinizi darbelediniz')
self.darbele(rakip)
if sonuç == 2:
print('\nSONUÇ: rakibinizden darbe aldınız')
rakip.darbele(self)
def saldırı_sonucunu_hesapla(self):
return random.randint(0, 2)
def kaç(self):
print('Kaçılıyor...')
for i in range(10):
time.sleep(.3)
print('\n', flush=True)
print('Rakibiniz sizi yakaladı')
def darbele(self, darbelenen):
darbelenen.darbe += 1
darbelenen.enerji -= 1
if (darbelenen.darbe % 5) == 0:
darbelenen.can -= 1
if darbelenen.can < 1:
darbelenen.enerji = 0
print('Oyunu {} kazandı!'.format(self.isim))
self.oyundan_çık()
def oyundan_çık(self):
print('Çıkılıyor...')
sys.exit()
##################################
# Oyuncular
siz = Oyuncu('Ahmet')
rakip = Oyuncu('Mehmet')
# Oyun başlangıcı
while True:
print('Şu anda rakibinizle karşı karşıyasınız.',
'Yapmak istediğiniz hamle: ',
'Saldır: s',
'Kaç: k',
'Çık: q', sep='\n')
hamle = input('\n> ')
if hamle == 's':
siz.saldır(rakip)
print('Rakibinizin durumu')
rakip.mevcut_durumu_görüntüle()
print('Sizin durumunuz')
siz.mevcut_durumu_görüntüle()
if hamle == 'k':
siz.kaç()
if hamle == 'q':
siz.oyundan_çık()
Kodun da;
if sonuç == 1:
print('\nSONUÇ: rakibinizi darbelediniz')
self.darbele(rakip)
if sonuç == 2:
print('\nSONUÇ: rakibinizden darbe aldınız')
rakip.darbele(self)
kısmın da kafam karıştı. class içinde rakip.darbele(self) kullanımı tam olarak nasıl oluyor ?
saldır fonksiyonuna baktığımızda görüyoruz ki rakip isimli bir parametresi var.
self sizsiniz. rakip de yine Oyuncu sınıfına ait başka bir nesne.
Oyun başladığında, size yapmak istediğiniz hamle sorulur ve s tuşuna basarak saldırmayı seçerseniz siz.saldır(rakip) ifadesi çalışır.
Bundan sonra, sırayla aşağıdakiler gerçekleşir:
Ekrana saldırıyı gerçekleştirdiğiniz, saldırının sürdüğü ve beklemeniz gerektiği ile alakalı yazılar yazdırılır.
Daha sonra 3 saniye bekletilirsiniz.
Sonra self.saldırı_sonucunu_hesapla() fonksiyonu çağrılır. Bu fonksiyon random.randint(0, 2) fonksiyonu kullanılarak 0 ile 2 arasında üretilen rastgele bir sayıyı geri döndürür ve dönen değer sonuç isimli bir değişkene kaydedilir.
Eğer sonuç, 0 ise, kazanan taraf yok şeklinde bir yazı ekrana yazdırılır. Eğer sonuç, 1 ise, ekrana rakibinizi darbelediniz şeklinde bir yazı yazdırılır ve self.darbele(rakip) fonksiyonu çağrılır. Eğer sonuç, 2 ise, ekrana rakibinizden darbe aldınız yazısı yazdırılır ve rakip.darbele(self) fonksiyonu çağrılır.
darbele fonksiyonu darbelenen isminde bir parametre alır. sonuç değişkeninin değerinin 1 olması durumunda darbelenen rakip olur. Yok eğer sonuç değişkeninin değeri 2 ise, bu durumda darbelenen self olur.
darbele fonksiyonunun içinde darbelenen'in darbe sayısı 1 birim arttırılır, enerji özelliği ise 1 birim azaltılır. Eğer darbelenen kişinin darbe niteliğinin 5'e bölümünden kalan 0 ise, darbelenen tarafın can niteliği 1 birim azaltılır. Eğer darbelenen tarafın can niteliği, aldığı darbe sonucunda 1'in altına düşerse, darbelen tarafın enerji niteliği 0'a eşitlenir. Ve oyun biter.
Özetle aynı sınıftan iki tane örnek oluşturuyorsunuz ve sınıf içerisinde oluşturacağınız örneklerin birbirleriyle nasıl ilişki kuracağını tanımlıyorsunuz.
Bir Mekatronik Müh. mezunu olarak sıfırdan programlama öğreniyorum. Her konuyu hemen hemen takılmadan zorlanmadan anlayabiliyorken, zaman zaman takıldığım yerlerde hep imdadıma yetişiyorsunuz. Bu basit örnek aydınlatıcı oldu teşekkür ederim. Klişe ile ;
Bilmemek ayıp değil, öğrenmemek ayıptır. Sorarak öğrenmeye devam