Bir cümlelik özet
Bu projede Scratch'te ok tuşlarıyla yönetilen bir karakter yaparız; karakter duvara değince başa döner, hedefe ulaşınca oyunu kazanırız.
Neden önemli?
Şimdiye kadar sıralama, koşul, döngü, değişken ve hata ayıklamayı ayrı ayrı öğrendik. Bir oyun ise bu parçaların hepsini aynı anda kullanır. Labirent oyunu küçük ama gerçek bir projedir: bir problem tanımlarız, bir tasarım çizeriz, blokları birleştiririz ve sonucu test ederiz.
Bu ders bir "kopyala-yapıştır" tarifi değildir. Amaç, oyunun her parçasının neden orada olduğunu anlamandır. Böylece daha sonra kendi oyununu sıfırdan kurabilirsin. Ben de bu oyunu ilk yaptığımda her şey ilk denemede çalışmadı; nerede takıldığımı ve nasıl düzelttiğimi de birlikte göreceğiz.
Adım 1: Problemi ve tasarımı belirle
Koda başlamadan önce oyunun ne yapacağını yazmak, sonradan çıkacak birçok hatayı önler.
Problem tanımı
- Oyuncu bir karakteri ok tuşlarıyla hareket ettirecek.
- Karakter duvara (belirli bir renge) değerse başlangıç noktasına dönecek.
- Karakter hedefe ulaşınca "Kazandın!" mesajı görünecek.
Gerekli kuklalar ve dekor
Scratch'te her nesne bir kukla (sprite), arka plan ise dekortur (backdrop).
| Öğe | Görevi |
|---|---|
| Oyuncu kuklası | Küçük bir top veya ok. Ok tuşlarıyla hareket eder. |
| Hedef kuklası | Labirentin çıkışındaki yıldız veya bayrak. |
| Labirent dekoru | Duvarları tek bir renkte (örneğin mavi) çizilmiş arka plan. |
Önemli bir tasarım kararı: labirentin bütün duvarları aynı renk olmalı. Çünkü karakterin "duvara değdim mi?" sorusunu, o rengi kontrol ederek cevaplayacağız. Duvarları maviyle çizersek, kod "mavi renge değiyor mu?" diye soracak.
Adım 2: Karakteri ok tuşlarıyla hareket ettir
Karakter dört yönde hareket etmeli. Bunu Olaylar (Events) ve Hareket (Motion) bloklarıyla yaparız.
En basit yöntem, her ok tuşu için ayrı bir olay bloğu kullanmaktır. x konumu karakterin sağ-sol, y konumu ise yukarı-aşağı yerini gösterir.
sağ ok tuşuna basıldığında
x konumunu 10 değiştir
sol ok tuşuna basıldığında
x konumunu -10 değiştir
yukarı ok tuşuna basıldığında
y konumunu 10 değiştir
aşağı ok tuşuna basıldığında
y konumunu -10 değiştir
Buradaki 10 sayısı karakterin her basışta kaç adım kayacağını belirler. Sayı büyükse karakter hızlı ama kaba hareket eder; küçükse yavaş ama hassas olur. Labirentin koridorları darsa küçük bir sayı seçmek daha iyidir.
Adım 3: Duvara ve hedefe tepki ver
Şimdi oyunun kalbine geliyoruz: karakter duvara değince başa dönmeli, hedefe değince kazanmalıyız. Bunun için Kontrol (Control), Algılama (Sensing) ve Görünüm (Looks) bloklarını birlikte kullanırız.
Duvara değince başa dön
Karakterin durumunu sürekli kontrol etmemiz gerekir, çünkü çarpışma her an olabilir. Bu yüzden bir sürekli tekrarla döngüsü içine bir koşul koyarız.
yeşil bayrağa tıklandığında
x konumunu -200, y konumunu -140 yap
sürekli tekrarla
eğer <renge [mavi] değiyor mu?> ise
x konumunu -200, y konumunu -140 yap
Burada başlangıçta karakteri labirentin girişine (-200, -140) yerleştiririz. Sonra döngü her an "mavi duvara değiyor mu?" diye sorar. Cevap evetse karakteri aynı başlangıç noktasına geri gönderir. Yani oyuncu duvara çarparsa en baştan başlamak zorunda kalır.
Hedefe ulaşınca kazan
Aynı sürekli döngüye ikinci bir koşul ekleriz. Bu sefer duvarı değil, hedef kuklasını kontrol ederiz.
yeşil bayrağa tıklandığında
x konumunu -200, y konumunu -140 yap
sürekli tekrarla
eğer <renge [mavi] değiyor mu?> ise
x konumunu -200, y konumunu -140 yap
eğer <[Hedef] kuklasına değiyor mu?> ise
"Kazandın!" de (2 saniye)
dur [bu kukladaki diğerleri]
renge değiyor mu? bloğu Algılama kategorisindedir ve duvarın rengini kontrol eder. Hedef kuklasına değiyor mu? bloğu da aynı kategoridedir ama bu kez başka bir kuklaya dokunmayı ölçer. "Kazandın!" de bloğu Görünüm kategorisinden gelir ve ekranda bir balon gösterir.
Adım 4: Test senaryolarını çalıştır
Bir önceki derste öğrendiğimiz gibi, kod yazmak yeter değil; test etmek gerekir. Oyunu yeşil bayrakla başlat ve şu senaryoları tek tek dene:
- Normal yürüyüş: Ok tuşlarına bas. Karakter dört yönde de düzgün hareket ediyor mu?
- Duvara çarpma: Bilerek bir duvara doğru sür. Karakter başlangıç noktasına dönüyor mu?
- Hedefe ulaşma: Karakteri çıkışa götür. "Kazandın!" mesajı çıkıyor mu?
- Baştan başlama: Yeşil bayrağa tekrar bas. Karakter yine girişte mi başlıyor?
Her senaryoda beklediğin sonucu önceden yaz, sonra gerçekte ne olduğunu gözle. İkisi farklıysa bir hata bulmuşsun demektir.
Adım 5: Bir hata ve düzeltmesi
Ben bu oyunu ilk kurduğumda 2. senaryo çalışmadı. Karakteri duvara sürdüm ama başa dönmedi; duvarın içinden geçip gitti. Hatayı şöyle buldum:
Amaç: Duvara değince karakter başa dönsün
Sorun: Karakter duvara değince hiç tepki vermiyor
Kontrol 1: Duvarlar gerçekten mavi mi? -> Evet
Kontrol 2: Koşuldaki renk kutusu doğru maviyi mi gösteriyor? -> Hayır
Neden: Renk kutusuna yanlış bir mavi tonu seçmiştim
Düzeltme: Renk kutusuna tıklayıp damlalıkla duvarın rengini aldım
Scratch'te renge değiyor mu? bloğundaki renk, duvarın rengiyle tam olarak aynı olmalıdır. Damlalık (renk seçici) aracıyla doğrudan duvardan renk almak en güvenli yöntemdir. Bu küçük ayrıntı, oyunun çalışıp çalışmamasını belirledi.
Adım 6: Geliştirme fikirleri
Temel oyun çalıştıktan sonra, önceki derslerde öğrendiğin araçlarla onu büyütebilirsin:
- Sayaç ekle: Bir değişken (variable) oluştur, adını "puan" koy. Hedefe ulaşınca puanı 1 artır.
- Süre tut: İkinci bir değişkenle geçen saniyeyi say. Oyuncu labirenti ne kadar hızlı bitirdi?
- Ses ekle: Duvara çarpınca Ses (Sound) kategorisinden kısa bir ses çal.
- Yeni bölüm: Hedefe ulaşınca dekoru değiştir ve daha zor bir labirent göster.
Bu fikirlerin hiçbiri zorunlu değil. Amaç, çalışan basit bir oyunu adım adım büyütmenin keyfini görmen.
Mini uygulama
Kendi labirentini kur:
- Yeni bir Scratch projesi aç ve boş dekora tek renkte bir labirent çiz.
- Oyuncu ve hedef olmak üzere iki kukla ekle.
- Yukarıdaki dört ok tuşu bloğunu oyuncu kuklasına ekle.
sürekli tekrarlaiçindeki iki koşulu (duvar ve hedef) ekle.- Dört test senaryosunu sırayla çalıştır ve sonuçları bir kağıda not et.
Bittiğinde kendine sor: Hangi senaryoda takıldın ve nasıl çözdün?
Projeyi güçlendirme planı
Proje: Labirent 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 “Hareket, koşul ve çarpışmayı birleştirerek oynanabilir bir labirent oyunu yap” 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. Adım 1: Problemi ve tasarımı belirle ile Gerekli kuklalar ve dekor 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: Labirent 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: Labirent 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; Adım 1: Problemi ve tasarımı belirle veya Gerekli kuklalar ve dekor 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: Labirent 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
Duvarları farklı renklerde çizmek
Duvarların bir kısmı mavi, bir kısmı lacivertse renge değiyor mu? bloğu sadece bir tonu yakalar. Bütün duvarları tek renk tut.
Başlangıç konumunu unutmak
Yeşil bayrağa basınca karakteri girişe koymazsan, oyun her seferinde farklı bir yerden başlar. x/y konumunu … yap bloğunu döngüden önce eklemeyi unutma.
Kontrolleri döngüye koymamak
Duvar kontrolünü sürekli tekrarla içine koymazsan, program çarpışmayı yalnızca bir kez bakar ve kaçırır. Kontrol her an çalışmalı.
Adım sayısını çok büyük seçmek
x konumunu 50 değiştir dersen karakter duvarların içinden atlayabilir. Dar koridorlarda küçük bir sayı (5–10) daha güvenlidir.
Güvenlik notu
Bu ders tamamen ekran başında yapılır. Uzun süre ekrana bakmak gözleri yorar; her 20 dakikada bir kısa bir mola verip uzağa bakmak iyi gelir. Scratch'te projeni paylaşırken gerçek adını, okulunu veya adresini yazma; sadece takma bir kullanıcı adı kullan. Yorumları açık bir projede bir yetişkinle birlikte incelemek daha güvenlidir.
Ders özeti
- Bir oyun projesi; sıralama, koşul, döngü ve değişkenlerin hepsini birlikte kullanır.
- Koda başlamadan önce problemi, kuklaları ve dekoru tasarlamak hataları azaltır.
- Ok tuşu hareketi Olaylar ve Hareket bloklarıyla,
x/y konumunu değiştirkullanılarak yapılır. - Duvara ve hedefe tepki,
sürekli tekrarlaiçindeki koşullar ve Algılama bloklarıyla verilir. - Test senaryoları ve hata ayıklama, oyunun gerçekten çalıştığından emin olmanın yoludur.
Kontrol soruları
- Labirentin bütün duvarlarının aynı renkte olması neden gereklidir?
- Karakteri sağa hareket ettirmek için hangi blok ve değer kullanılır?
- Duvar kontrolünü neden
sürekli tekrarladöngüsünün içine koyarız? - Yeşil bayrağa basınca karakteri başlangıç noktasına koymayı unutursak ne olur?
renge değiyor mu?bloğundaki renk duvarın rengiyle tam eşleşmezse ne olur?
Cevaplar
- Çünkü karakterin duvara değip değmediğini o rengi kontrol ederek anlarız. Renkler farklı olursa blok bazı duvarları göremez.
sağ ok tuşuna basıldığındaolayının içindex konumunu 10 değiştirbloğu kullanılır (pozitif değer sağa taşır).- Çünkü çarpışma her an olabilir. Döngü kontrolü sürekli tekrarlar; tek seferlik kontrol çarpışmayı kaçırır.
- Oyun her seferinde karakterin en son bulunduğu yerden başlar; oyuncu adil bir başlangıç noktasından oynayamaz.
- Blok duvarı algılamaz, karakter duvarın içinden geçer. Damlalıkla rengi doğrudan duvardan almak sorunu çözer.
Kaynak ve doğrulama notu
“Proje: Labirent Oyunu” dersi için doğrulama odağı Adım 1: Problemi ve tasarımı belirle ile Gerekli kuklalar ve dekor 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: Basketbol Atış Oyunu