Final Projesi Sıkça Sorulan Sorular
Uzaylıları oluştururken problem yaşıyorum ne yapmalıyım?
Tek bir uzaylı görüyorum
Eğer uzaylılarınızı bir for döngüsüyle oluşturuyorsanız büyük ihtimalle uzaylıları aynı x ve y koordinatlarına eklediğiniz için bu hatayla karşılaşıyorsunuz. Her uzaylı için neyin değiştiğini, x ve y koordinatlarını nasıl belirleyeceğinizi düşünmelisiniz.
Uzaylıların sadece biri hareket ediyor
Bu problemde uzaylı ve hız listelerinize bakmalısınız. Büyük ihtimalle uzayli_listesi
‘ne tek bir uzaylı ekliyorsunuz. Bu nasıl olabilir, bir örnekle inceleyelim:
Örneğin, 0’dan 2’ye kadar bütün sayıları bir listede tutmak istiyorum. Aşağıdaki üç programı çalıştırırsam sonuçların nasıl olacağını düşünün. Doğru şekli 2. programda.
Siz kodunuzda 1. ve 3. örnekteki hatayı yapıyor olabilir misiniz?
for i in range(3):
l = list()
l.append(i)
print(l)
l = list()
for i in range(3):
l.append(i)
print(l)
l = list()
for i in range(3):
print(l)
l.append(i)
print(i)
- Birinci programın sonucu:
[0] [1] [2]
- İkinci programın sonucu:
Sonuç: [0] [0, 1] [0, 1, 2]
- Üçüncü programın sonucu:
[] [] [] [2]
Uzaylılarımın hepsi aynı yönde hareket ediyor ne yapmalıyım?
Bu problemle karşılaşmanızın sebebi genellikle
hız listesi oluştururken her uzaylı başına bir adet
hız değeri oluşturulmasıdır. Move fonksiyonu kanvas.move()
fonksiyonu 3 argüman alır:
hareket ettireceğimiz obje, x yönündeki hız değeri, y yönündeki hız değeriAncak iki boyutlu bir alanda
çalıştığımız için her vektörün farklı yöne bakabilmesi
için hem x düzlemi hem de y düzlemi için iki farklı değer
oluşturmalıyız. Matematikte dikliği nasıl hesapladığımızı
hatırlayalım, önemli olan x ve y değerlerinin birbirlerine
olan orantısı.
Eğer uzaylılarımızın hareketindeki x ve y değeri eşit olursa, birbirlerine olan oranları hep 1 olacaktır ve uzaylılarımızın hepsi aynı şekilde yol alıcaktır. Bu nedenle hız listesi yapımız şu şekilde olmalıdır:
[[hiz0_x, hiz0_y], [hiz1_x, hiz1_y], ..., [hizn_x, hizn_y]]
Aynı zamanda uzaylılarımızın rastgele hareketinin 360 derece yani her yöne olmasına istiyorsak, hız listemizi oluştururken MIN hız değerini negatif bir sayı yapabiliriz.
Uzaylıları oluşturdum, hız_listesi oluşturdum ancak onları nasıl hareket ettirebilirim?
Öncelikle uzaylıları oluştururken onları bir listeye eklediğimizden emin olalım. Yoksa sonrasında dönüp oluşturduğumuz uzaylıya ulaşmakta zorlanırız. Hız listemiz ile uzaylı_listemiz aynı uzunlukta olmalı ki böylece her uzaylı başına düşen bir hızımız var. Bu durumda bir for döngüsü kullanarak amacımıza ulaşabiliriz.
Uzaylıları nasıl duvardan sektireceğim?
Uzaylıların hareketlerini x ve y’nin birleşimi ile oluşan bir vektör gibi düşünmenin faydalı olucağını yukarda konuşmuştuk. Şimdi düşünmemiz gereken şey bu uzaylıların duvara çarptıklarında x ve y değerlerinde nasıl bir değişim gerçekleşeceği. Aşağıdaki görseller size yardımcı olabilir:
Bir objeniin kordinatlarına get_left_x
ve get_top_y()
ve fonksiyonları ile
ulaşabildiğimizi unutmayalım, bu durumda tek yapmamız gereken
uzaylılarımızın kanvasın sınırlarını değip değmediklerine bakmak
ve şayet deydilerse değen uzaylının hız değerlerini hız listesinde
değiştirmek.
SIK YAPILAN HATALAR
Zamanla güncellenecektir, başarılar.