Renkli Kar Tanelerini Sayalım!
Ödev 2
Renkli Kar Tanelerini Sayalım!
Fırat Tamur, Ahmet Uyar
Ödeve Başlamadan Önce
CS 101: Merhaba, Dünya! programının ikinci ödevi olarak bir animasyon hazırlayacağız. Bu ödeve başlamadan önce dikkat etmeniz gerekenler:
- Bu ödevin teslim tarihi 16 Aralık 2020 Cuma 23:59‘dur.
- Lütfen ödevin adımlarını dikkatlice okuyun ve programınızı yazarken bu adımları takip ederek kodunuzu yazmaya çalışın.
- Bu ödev ders ve grup çalışmalarında üzerinden geçtiğimiz konuları pekiştirmeniz için güzel bir fırsat, bu sebeple aklınıza takılan noktalarda Ders materyallerini tekrar etmenizi öneriyoruz.
- Unutmamanız gereken şey problemi parçalara ayırmak ve tabii ki bunu programı yazarken fonksiyonlarla yaptığımız için kendi fonksiyonlarınızı tanımlamınızı çok önemsiyoruz!
- Ödevinizi Ed üzerinden teslim edeceksiniz.
- Ödevi yaparken aklınıza takılan her soru için Ed üzerinden bize soru sorabilirsiniz.
- Bu ödev notlandırılmayacak ancak eğitmenleriniz kodunuzu detaylıca inceleyerek size Ed üzerinden geri bildirim ve önerilerde bulunacaklar. Programı başarıyla tamamlayıp sertifika alabilmek için mutlaka ödevlerinizi teslim etmelisiniz.
Başarılar!
Başlangıç Kodları
Buraya tıklayarak ödeve ait başlangıç kodlarına ulaşabilirsiniz.
Genel Bakış
Bu çalışmamızda grafik kütüphanesini kullanarak kanvasımızda belirli miktarda renkli kar taneleri yağdıracağız ve bu kar taneleri kanvasımızın altına ulaştıktan sonra bazı şartlara göre yukarı geri taşıyacağız. Bu kar taneleri yağarken animasyonumuzda toplam ne kadar kar tanesi bulunduğu ve belirttiğimiz renklere sahip olan kar tanelerinin kaç defa oluştuğunu takip edeceğiz. Bonus kısmında ise Mario’yu kanvasımızın alt tarafında yatay bir şekilde hareket ettireceğiz.
Ana Görevin Proje Adımları
1. Kar Tanelerini Oluşturmak
Renkli kar tanelerini oluşturup bir listeye koymak için bir renkli_kar_taneleri_olustur
fonksiyonumuzu kullanışlı hale getirmeliyiz. Bu fonksiyonumuz bize oluşturduğumuz kar tanelerinin listesini geri döndürmeli. Oluşturduğumuz kar tanelerinin bir listesini oluşturmamızın sebebini 5. Hafta yaptığımız CS 101 Evreni isimli egzersizden hatırlayabilirsiniz. Hatırlamıyorsanız bu çalışmayı ve çözümünü incelemeniz faydalı olacaktır.
1) Oluşturacağımız kar tanelerinin eni ve boyu KAR_TANESI_EN
ve KAR_TANESI_BOY
sabit değişkenleriyle sizlere verilmiştir.
2) Oluşturacağımız kar tanelerinin koordinatlarını KAR_TANESI_X_MIN
, KAR_TANESI_X_MAX
, KAR_TANESI_Y_MIN
ve KAR_TANESI_Y_MAX
sabit değişkenlerini kullanarak rastgele belirlemelisiniz. Bunun için grup çalışmalarında da kullanmış olduğumuz random kütüphanesi kullanabilirsiniz.
3) Oluşturacağımız kar tanelerinin renkleri rastgele seçilmeli. Bunun için kanvasımızın get_random_color()
fonksiyonunu kullanabilirsiniz.
4) Oluşturacağımız kar tanelerinin sayısı KAR_TANESI_SAYISI
sabit değişkeniyle sizlere verilmiştir.
2. Renkli Kar Tanelerini Hareket Ettirmek
Renkli kar taneleri listesini içine alan ve liste içindeki her kar tanesini hareket ettiren renkli_kar_tanelerini_hareket_ettir
fonksiyonunu kullanışlı hale getirelim. Bu fonksiyonumuz bize kar tanelerinin listesini geri döndürmeli.
1) Renkli Kar tanelerini hareket ettirirken KAR_TANESI_HIZ
sabit değişkenini kullanalım.
4. Kar Tanelerini Pencereyi Aşma Durumunu Kontrol Etmek ve Doğacak Durumları Halletmek
Renkli kar taneleri listesindeki her kar tanesinin y pozisyonuna bakarak eğer oyun_kanvası
‘nın boyundan daha büyükse kontrol etmemiz gereken bazı durumlar var.
- Eğer kar tanesinin rengi kırmızı, yeşil ya da mavi ise bu renkler için tuttuğumuz sayı değerini bir arttırmalıyız ve bu renklere sahip olan kar tanelerini kar taneleri listesinden çıkarmalıyız.
- Eğer kar tanesinin rengi bu üç renkten biri değilse, bu kar tanesininin koordinatlarını
KAR_TANESI_X_MIN
,KAR_TANESI_X_MAX
,KAR_TANESI_Y_MIN
veKAR_TANESI_Y_MAX
sabit değişkenleriyle yeniden belirleyelim ve bu kar tanesinin rengini rastgele yeniden belirleyelim. Her bir kar tanesinin rengine kanvasınget_outline_color
fonksiyonu ile ulaşabilirsiniz. Ayrıca kar tanelerinin yeni rengini belirlerken tekrar kanvasınget_random_color()
fonksiyonunu kullanabilirsiniz.
İPUCU: Animasyon başlamadan önce kar tanelerinin sayılarını tutabileceğimiz bir liste oluşturmalısınız. Bu liste; kırmızı, yeşil, mavi ve toplam kar tanesi sayısını tutmalı.
Bu bilgiler ışığında pencereyi_gecen_kar_taneleri_geri_getir
fonksiyonunu kullanışlı hale getirmeliyiz. Fonksiyon, güncellenmiş olabilecek olan kar taneleri listesini ve ipucunda bahsettiğimiz listeyi bir liste şeklinde döndürmeli. [liste1, liste2]
gibi.
5. Kırmızı, Yeşil, Mavi ve Pencere Üzerindeki Toplam Kar Tanelerinin Sayılarını Görüntülemek
Bahsettiğimiz renklerin görüntülerinin bulunacağı yerler KIRMIZI_SAYI_YAZI_X, KIRMIZI_SAYI_YAZI_Y, YESIL_SAYI_YAZI_X, YESIL_SAYI_YAZI_Y, MAVI_SAYI_YAZI_X, MAVI_SAYI_YAZI_Y, TUM_KAR_TANELERI_SAYI_YAZI_X, TUM_KAR_TANELERI_SAYI_YAZI_Y
sabit değişkenleriyle sizlere verilmiştir.
Pencere üzerinde oluşturduğumuz yazıları bir değişkene atamalıyız ki kar yağarken bu yazıları değiştirebilelim. Elde ettiğimiz bu değişkenleri de bir liste (yazi_listesi
gibi) içine alalım ki animasyon sırasında kullanacağımız kirmizi_yesil_mavi_renkli_kar_tanelerini_yazdir
fonksiyonunu kullanışlı hale getirebilelim.
Bu fonksiyon, içine parametre olarak kanvası, yazı listesini ve kar tanelerinin sayı listesini almaktadır ve oluşturmuş olduğumuz yazıları bu parametrelere göre değiştirmektedir. Bu değiştirme işlemine kanvasımızın set_text
fonksiyonuyla gerçekleştirebilirsiniz.
Ödev için sizden beklenen ana kısmı tamamladığınız zaman oyununuz bu şekilde görünmelidir.
Buraya tıklayarak derste gördüğünüz oyunun tamamlandığında nasıl görüneceğini izleyebilirsiniz.
Bonus Görevin Proje Adımları
Pillow’u İndirelim
Pillow’u İndirelim
Grafik kütüphanemizi kullanarak resim eklemek ya da resimler üzerinde değişiklik yapmak için Pillow
isimli ek bir paket indirmemiz gerek. Pillow
‘u indirmek için bir terminal penceresi açın (PyCharm’ın içindeki Terminal sekmesini kullanabilirsiniz) ve aşağıdaki komutu girin:
Windows için:
python -m pip install Pillow==7.1.1
Mac için:
python3 -m pip install Pillow==7.1.1
Kurulum başarı ile tamamlandığında terminalinizde son olarak “Successfully installed Pillow-7.1.1” ibaresi görünür. Artık grafik kütüphanemizdeki resim içeren fonksiyonları kullanabiliriz!
Mario’yu Oluşturmak
Mario’yu oluşturmak için marioyu_cagir
fonksiyonunu kullanışlı hale getireceğiz. Bu fonksiyon mario resmini alıp kanvasta belirlediğimiz pozisyona koyuyor.
Mario’yu ekrana koyabilmek icin mario icin belirledigimiz EN
, BOY
, X_BASLANGIC
, Y_BASLANGIC
değerlerini kullanmamız gerekiyor. Bunlar bizlere sabit değişkenler olarak verilmiş durumda. Ayrıca Mario’nun resmini almak için “img/mario-sag.png” kullanabilirsiniz. Mario’yu oluşturmak için kanvasımızın create_image_with_size
fonksiyonunu kullanmalısınız.
Mario’yu Sağa ve Sola Hareket Ettirelim
Mario’yu hareket ettirmek için marioyu_hareket_ettir
fonksiyonunu kullanışlı hale getireceğiz. Bu fonksiyon marioyu sol ya da sag yöne hareket ettiriyor. Eğer Mario’nun x koordinatı azalıyorsa (yani sola doğru gidiyorsa) Mario sola bakıyor. Eğer x koordinatı artıyorsa o zaman Mario sağ yönüne bakıyor. Marionun sağa ve sola bakmasi aslinda sadece marionun resminin degismesi ile oluyor. Eger Mario sağa bakacaksa “img/mario-sag.png” ya da sola bakacaksa “img/mario-sol.png” resimlerine sahip bir Mario oluşturup eski Mario’yu kanvastan siliyoruz. Burada Mario’nun sol x koordinatını kanvasın başlangıç (0) ve bitiş (en) noktasına göre karşılaştırarak resmi değiştirmeniz gereken yeri anlayabilirsiniz.
Ödev için bonus kısmı tamamladığınız zaman oyununuz bu şekilde görünmelidir.
Buraya tıklayarak derste gördüğünüz oyunun tamamlandığında nasıl görüneceğini izleyebilirsiniz.