Bir cümlelik özet
Bu derste Scratch’te bir basketbol atış oyunu yapıyoruz: atış gücünü ve açısını ayarlıyoruz, topu yerçekimiyle harekete geçiriyoruz, potaya değince puan kazanıyor ve deneme sayısını sayıyoruz.
Neden önemli?
Basketbol oynamayı seviyorum. Sahada bir atışın girmesi için gücü, açıyı ve zamanlamayı ayarlarız. Bilgisayarda bir atış oyunu yaparken de aynı fikirleri kullanıyoruz; ama bu kez topun yolunu kendimiz kodluyoruz.
Bu proje, önceki derslerde öğrendiğimiz üç yapıyı bir araya getiriyor: sıralama (atış adımları belli bir sırayla olur), koşul (top potaya değdiyse puan ver) ve tekrar (top havada olduğu sürece hareketi sürdür). Ayrıca yeni bir fikir ekliyoruz: bir nesneyi klonlamak ve ona yerçekimi benzeri bir hareket vermek.
Bu bir oyun projesidir, gerçek fizik simülasyonu değildir. Amacımız oynanabilir ve öğretici bir oyun yapmak; kusursuz bir fizik motoru kurmak değil.
Oyunu planlamak
Kod yazmadan önce oyunun ne yapacağını sade cümlelerle yazmak işi kolaylaştırır. Bu, önceki derslerde gördüğümüz sözde koda benzer.
Oyunun kuralları
- Oyuncu bir güç ve bir açı seçer.
- Yeşil bayrağa basınca top fırlatılır.
- Top havada yerçekimiyle aşağı düşer.
- Top potaya değerse puan artar.
- Her atıştan sonra deneme sayısı bir artar.
Kullanacağımız kuklalar (sprite) ve değişkenler
Bir kukla (sprite), sahnede hareket eden nesnedir. Bir değişken (variable), oyunun akılda tuttuğu bir sayıdır.
- Kuklalar:
Top,Pota - Değişkenler:
puan,deneme,güç,açı,hız_y
Burada hız_y, topun dikey (yukarı–aşağı) hızını tutar. Yerçekimi bu değeri her adımda biraz azaltarak topun önce yükselip sonra düşmesini sağlar.
Atış gücü ve açısı
Gerçek bir atışta iki şeyi ayarlarız: ne kadar sert attığımız (güç) ve topu hangi yöne yolladığımız (açı). Oyunda bunları iki değişkenle temsil ediyoruz.
Değişkenleri kaydırıcıya çevirmek
Değişkenler panelinde güç ve açı değişkenlerine sağ tıklayıp “kaydırıcı” (slider) seçeneğini açarsan, oyuncu sahnede fareyle bu değerleri değiştirebilir. Böylece her denemede farklı bir atış yapılabilir.
Örnek: atış başlangıcı
Aşağıdaki blok dizisi, yeşil bayrağa basınca topu başlangıç noktasına koyar ve seçilen güce göre ilk hızını verir.
yeşil bayrağa tıklandığında
"deneme" değişkenini 0 yap
"puan" değişkenini 0 yap
x: -180 y: -120 konumuna git
yönü (açı) derece yap
"hız_y" değişkenini (güç) yap
Burada hız_y değişkenine güç değerini vererek topun yukarı doğru ilk hızını belirliyoruz. Yön bloğu ise topun hangi açıyla ilerleyeceğini ayarlıyor.
Topu yerçekimiyle hareket ettirmek
Şimdi projenin en önemli parçasına geliyoruz: topun yolu. Top hem ileri gider hem de yerçekimiyle aşağı çekilir.
Yerçekimi fikri
Gerçek dünyada top yukarı atılınca yavaşlar, durur ve düşmeye başlar. Bunu oyunda taklit etmek için her adımda hız_y değerini biraz azaltırız. Buna bir çeşit yerçekimi diyebiliriz.
Örnek: uçuş döngüsü
Aşağıdaki döngü, topu yatayda açı yönünde ilerletirken dikeyde hız_y kadar kaydırır, sonra yerçekimini uygular.
"Top_at" mesajını aldığında
sürekli tekrarla
(açı) yönünde 5 adım git
y konumunu (hız_y) değiştir
"hız_y" değişkenini -1 değiştir
eğer <y konumu < -140> ise
"deneme" değişkenini 1 değiştir
dur (bu kuklada çalışan diğerleri)
Bu döngüde:
y konumunu (hız_y) değiştirtopu yukarı ya da aşağı taşır."hız_y" değişkenini -1 değiştirher adımda hızı azaltır; böylece top önce yükselir, sonra düşer.y konumu < -140koşulu, top yere değince atışın bittiğini anlar ve deneme sayısını artırır.
Puan ve potaya değme
Bir atışın “girmesi” için topun potaya değmesi gerekir. Bunu Algılama (Sensing) kategorisindeki değme bloğuyla kontrol ederiz.
Örnek: puan koşulu
Aşağıdaki blok dizisi, top potaya değdiği anda puanı artırır ve topu durdurur.
"Top_at" mesajını aldığında
sürekli tekrarla
eğer <"Pota" kuklasına değiyor?> ise
"puan" değişkenini 1 değiştir
"Basket!" de (1 saniye)
dur (bu kuklada çalışan diğerleri)
Burada <"Pota" kuklasına değiyor?> bloğu bir koşuldur: yalnız top potaya değdiğinde içerideki adımlar çalışır. dur bloğu, aynı atışta puanın birden çok kez sayılmasını engeller.
Atışı başlatmak
Oyuncunun tıklamayla atış yapmasını istiyoruz. Şu kısa dizi, boşluk tuşuna basınca atışı başlatır:
boşluk tuşuna basıldığında
x: -180 y: -120 konumuna git
"hız_y" değişkenini (güç) yap
yönü (açı) derece yap
"Top_at" mesajını gönder
Böylece oyuncu gücü ve açıyı ayarladıktan sonra boşluğa basarak yeni bir atış yapar.
Mini uygulama
Aşağıdaki adımları sırayla dene:
- Yeni bir Scratch projesi aç ve iki kukla ekle:
TopvePota. puan,deneme,güç,açı,hız_ydeğişkenlerini oluştur.güçveaçıdeğişkenlerini kaydırıcıya çevir.- Yukarıdaki dört blok dizisini ilgili kuklalara ekle.
- Farklı güç ve açı değerleriyle en az beş atış yap.
Test senaryoları
- Az güç: Güç çok düşükken top potaya ulaşabiliyor mu? Muhtemelen ulaşamaz. Bu beklenen bir sonuçtur.
- Çok güç: Güç çok yüksekken top potanın üstünden mi geçiyor? Öyleyse gücü biraz azalt.
- Doğru açı: Hangi açı aralığında top potaya daha çok yaklaşıyor? Not al.
Geliştirme fikirleri
- Ekrana “Basket oranı: puan / deneme” yazan bir mesaj ekle.
- Pota her birkaç atışta bir yatayda yer değiştirsin; oyun zorlaşsın.
- Bir atış sesi ekle (Ses / Sound kategorisi).
Projeyi güçlendirme planı
Proje: Basketbol Atış Oyunu için yalnız çalışan bir gösterim hazırlamak yeterli değildir. İyi bir proje; hedefi, kullanıcıyı, sınırları, test koşullarını ve başarısız denemeleri de görünür kılar. Bu genişletme çalışmasında labirentte duvara değince başlangıca dönen karakter bağlamını kullanarak çalışan bir Scratch sahnesi, blok düzeni ve test listesi oluştur. Dersin hedefi “Atış gücü, yerçekimi ve puanla basit bir basketbol atış oyunu tasarla” olsa da proje sayfasında ölçülmemiş bir sonucu kesin başarı gibi yazma.
1. Proje özeti ve kapsam
Önce üç cümle yaz: Çözmek istediğin sorun nedir, bu sorun kimin için önemlidir ve ilk sürüm özellikle neyi yapmayacaktır? Kapsam dışını belirtmek projeyi küçültmez; tamamlanabilir hâle getirir. Oyunu planlamak ile Kullanacağımız kuklalar (sprite) ve değişkenler arasındaki ilişkiyi projenin temel varsayımı olarak yaz ve bu varsayımı hangi testin doğrulayacağını belirt.
2. Kabul ölçütleri
- Yeşil bayrakla başlangıç durumu doğru kuruluyor mu?
- Olaylar yalnız gerektiğinde mi çalışıyor?
- Değişkenler anlaşılır adlarla mı kullanıldı?
- Klon veya döngü sayısı kontrol altında mı?
- Oyun yeniden başlatıldığında önceki durum temizleniyor mu?
“Proje: Basketbol Atış Oyunu” için kabul ölçütlerini “çalışıyor” gibi belirsiz sözcüklerle bırakma. Süre, mesafe, doğru deneme sayısı, ekran genişliği veya kullanıcı adımı gibi gözlenebilir bir ölçü seç. Ölçüm mümkün değilse en azından üç ardışık denemede aynı davranışın görülüp görülmediğini kaydet.
3. Test matrisi
| Test | Koşul | Beklenen | Gerçek sonuç | Sonraki karar |
|---|---|---|---|---|
| Normal | Standart giriş ve tam bağlantı | Temel görev tamamlanır | Test sırasında doldur | Koru veya küçük iyileştirme yap |
| Sınır | En düşük ya da en yüksek kabul edilen değer | Sistem kararlı kalır | Test sırasında doldur | Eşiği veya kuralı gözden geçir |
| Hata | Eksik, yanlış ya da beklenmeyen giriş | Güvenli ve anlaşılır tepki | Test sırasında doldur | Hata yönetimi ekle |
| Tekrar | Aynı koşulda en az üç deneme | Benzer sonuçlar | Test sırasında doldur | Tutarsızlığın kaynağını araştır |
4. Sürüm günlüğü
“Proje: Basketbol Atış Oyunu” projesinin her sürümü için tarih, değiştirdiğin tek ana karar, değişikliğin nedeni ve test sonucu yaz. İlk sürümün çalışmaması başarısızlık değildir; Oyunu planlamak veya Kullanacağımız kuklalar (sprite) ve değişkenler ile ilgili hangi varsayımın yeniden düşünülmesi gerektiğini gösteren veridir. Görsel kullanırken kişisel bilgi ve özel arka plan ayrıntılarını paylaşma.
5. Sunum ve öz değerlendirme
“Proje: Basketbol Atış Oyunu” projesini iki dakikada anlatacak şekilde hazırlan: sorun, çözüm yaklaşımı, labirentte duvara değince başlangıca dönen karakter için en önemli test sonucu ve bir sonraki adım. “Tamamlandı” demek yerine hangi kısmın doğrulandığını ve hangi kısmın hâlâ geliştirilmesi gerektiğini açıkla.
Sık yapılan hatalar
Yerçekimini unutmak
"hız_y" değişkenini -1 değiştir satırını koymazsan top düz bir çizgide gider ve hiç düşmez. Atış eğrisi oluşmaz.
Değişkeni sıfırlamamak
Her atıştan önce hız_y değerini yeniden güç yapmazsan, ikinci atış bir öncekinin kalan hızıyla başlar ve tuhaf davranır. Her atışta başlangıç değerlerini yeniden ver.
Puanın birden çok sayılması
dur bloğunu koymazsan, top potaya değdiği birkaç adım boyunca puan sürekli artar. Bir atış girince döngüyü durdur.
Beklenen sonucu yazmadan test etmek
“Çalışmıyor” demek yetmez. Önce ne beklediğini yaz (“top yükselip düşmeli”), sonra ne olduğunu gözlemle. İlk farkın oluştuğu adımı bul ve yalnız onu düzelt.
Güvenlik notu
Bu ders tümüyle ekran başında yapılır; elektronik veya alet kullanılmaz. Yine de uzun süre ekrana bakmak yorucu olabilir. Her 20–30 dakikada bir kısa mola ver, gözlerini dinlendir ve mümkünse gerçek bir topla birkaç atış yaparak hareket et. Projeni internette paylaşmadan önce bir yetişkine danış.
Ders özeti
- Bir oyun projesini önce sade cümlelerle planlamak, kodlamayı kolaylaştırır.
- Atış gücü ve açısı, iki değişkenle temsil edilir ve kaydırıcıyla ayarlanabilir.
- Yerçekimini, her adımda dikey hızı biraz azaltarak taklit ederiz.
- Potaya değme bir koşuldur; koşul doğruysa puan artar.
- Test senaryoları ve hata düzeltme, oyunu adım adım geliştirmenin temel yollarıdır.
Kontrol soruları
- Oyunda
hız_ydeğişkeni neyi temsil eder? - Topun havada eğri çizerek düşmesini sağlayan satır hangisidir?
<"Pota" kuklasına değiyor?>bloğu hangi kategoridedir ve ne işe yarar?- Her atıştan önce hangi değerleri yeniden ayarlamak gerekir? Neden?
durbloğunu koymazsak puanla ilgili hangi hata oluşur?
Cevaplar
hız_y, topun dikey (yukarı–aşağı) hızını tutar. Yerçekimi bu değeri azaltarak topun önce yükselip sonra düşmesini sağlar."hız_y" değişkenini -1 değiştirsatırı. Bu satır her adımda dikey hızı azaltır ve atış eğrisini oluşturur.- Algılama (Sensing) kategorisindedir. Topun potaya değip değmediğini kontrol eder; bir koşul olarak kullanılır.
- En az
hız_y(yenidengüçdeğeri), başlangıç konumu ve yön. Böylece her atış aynı temiz başlangıçtan başlar; bir önceki atışın kalan hızıyla karışmaz. - Puan bir atışta birden çok kez artar, çünkü top potaya değdiği birkaç adım boyunca koşul sürekli doğru kalır.
Ek doğrulama görevi
“Proje: Basketbol Atış Oyunu” için ikinci bir örnek oluştur: labirentte duvara değince başlangıca dönen karakter. İlk çözümü aynen kopyalamak yerine Oyunu planlamak kavramının hangi bölümde, Kullanacağımız kuklalar (sprite) ve değişkenler kavramının hangi kararda kullanıldığını işaretle. Sonucu değerlendirmek için şu iki soruya yazılı cevap ver: “Beklediğim davranış neydi?” ve “Gerçekte hangi kanıtı gördüm?”
Ardından kontrol listesinden özellikle “Yeşil bayrakla başlangıç durumu doğru kuruluyor mu?” ve “Oyun yeniden başlatıldığında önceki durum temizleniyor mu?” maddelerini kullan. İlk denemede fark bulamazsan bir sınır koşulu ekle; örneğin en küçük değer, en büyük değer, boş giriş, bağlantı kaybı veya yeniden başlatma durumu. Son notunda yaptığın tek değişikliği ve bu değişikliğin sonucu nasıl etkilediğini açıkla.
Kaynak ve doğrulama notu
“Proje: Basketbol Atış Oyunu” dersi için doğrulama odağı Oyunu planlamak ile Kullanacağımız kuklalar (sprite) ve değişkenler arasındaki ilişkinin örnekler üzerinde tutarlı çalışmasıdır. Blok adları Scratch’in güncel temel kategorileriyle uyumlu tutulmuştur. Proje davranışı; başlangıç, normal oyun, hata ve yeniden başlatma durumlarında ayrı ayrı denenmelidir.
Sonraki ders
Proje: Robot Görev Simülasyonu