Bir cümlelik özet
Bir oyunu ilgi çekici yapan şey; puan toplamak, can kaybetmek ve zorlaştıkça yeni seviyelere geçmektir. Bu derste Scratch'te değişkenlerle puanı ve canı takip etmeyi, belli bir puana ulaşınca seviye atlamayı ve oyunu bitirmeyi öğreniyorum.
Neden önemli?
Bir oyunda karakteri hareket ettirmeyi ve çarpışmayı öğrendik. Ama şu ana kadar oyunun bir "amacı" yoktu. Oyuncuya neden oynamalıyım sorusunun cevabını veren şey genellikle puandır: yıldız topla, düşmandan kaç, en yüksek skoru yap.
Puan ve can, oyuna bir hedef ve bir risk katar. Seviyeler ise oyunu tekdüzelikten kurtarır. İlk seviyede kolay olan oyun, ikinci seviyede biraz daha hızlanır. Böylece oyuncu ne çok sıkılır ne de hemen pes eder.
Bu fikirler yalnız oyunlarda değildir. Bir dil uygulamasında topladığın puanlar, bir spor müsabakasındaki skor tablosu ve seviye seviye ilerleyen bir kurs da aynı mantığı kullanır: ilerlemeyi ölç, geri bildirim ver, zorluğu kademeli artır.
Değişkenlerle puan ve can
Değişken nedir?
Değişken, bir değeri saklayabildiğimiz bir kutu gibidir. İçindeki sayı oyun sırasında değişebilir. Scratch'te değişkenler Değişkenler (Variables) kategorisinde oluşturulur.
Bir oyun için genellikle iki değişkene ihtiyaç duyarız:
puan— oyuncunun topladığı sayı.can— oyuncunun kaç hakkının kaldığı.
Değişkeni oluşturduktan sonra oyunun başında onu sıfırlamayı unutmamak gerekir. Aksi halde bir önceki oyundan kalan puanla başlarsın.
yeşil bayrağa tıklandığında
puan değişkenini 0 yap
can değişkenini 3 yap
Burada puan sıfırdan başlar, can ise 3 hakla başlar. Bu iki blok Olaylar (Events) ve Değişkenler (Variables) kategorilerinden gelir.
Puanı artırmak
Oyuncu bir yıldıza dokununca puan artmalı. Bunun için Algılama (Sensing) kategorisindeki "dokunuyor mu?" bloğunu ve Kontrol (Control) kategorisindeki döngüyü kullanırız.
yeşil bayrağa tıklandığında
sürekli tekrarla
eğer <Yıldız'a dokunuyor mu?> ise
puan değişkenini 1 artır
Ses "pop" çal
gizlen
Yıldıza her dokunulduğunda puan değişkeni 1 artar. Değişkeni sahnenin köşesinde göstererek oyuncunun skoru anlık görmesini sağlarız.
Can kaybetmek
Puan kazanmak kadar can kaybetmek de oyuna gerilim katar. Diyelim karakter bir engele çarparsa bir can gitsin.
yeşil bayrağa tıklandığında
sürekli tekrarla
eğer <Engel'e dokunuyor mu?> ise
can değişkenini 1 azalt
başlangıç konumuna git
1 saniye bekle
1 saniye bekle bloğu önemlidir: yoksa karakter engele değdiği tek anda döngü çok hızlı döner ve tek dokunuşta bütün canlar biter.
Seviye geçişi
Seviyeyi bir değişkenle takip etmek
Seviyeyi de bir değişkende tutarız: seviye. Oyun 1. seviyeden başlar. Puan belli bir sayıya ulaşınca 2. seviyeye geçeriz.
Scratch'te farklı seviyeler genellikle farklı dekorlarla (backdrops) gösterilir. Dekorlar sahnenin arka planıdır ve Görünüm (Looks) kategorisindeki bloklarla değiştirilir.
Örnek: puan 10 olunca 2. seviye dekoruna geçmek.
yeşil bayrağa tıklandığında
seviye değişkenini 1 yap
"Seviye 1" dekoruna geç
sürekli tekrarla
eğer <puan = 10> ise
seviye değişkenini 2 yap
"Seviye 2" dekoruna geç
Burada puan 10'a ulaştığı anda seviye 2 olur ve arka plan "Seviye 2" dekoruna geçer. Oyuncu artık yeni bir bölümde olduğunu görür.
Mesaj göndererek diğer kuklaları haberdar etmek
Dekoru değiştirmek yeterli olmayabilir. İkinci seviyede belki düşmanın da davranışı değişmeli. Bunun için Olaylar (Events) kategorisindeki mesaj bloklarını kullanırız. Bir kukla mesaj yayınlar, diğerleri o mesajı duyunca tepki verir.
eğer <puan = 10> ise
seviye değişkenini 2 yap
"Seviye 2" dekoruna geç
"seviye2-basladi" mesajını gönder
Böylece düşman kuklası "seviye2-basladi" mesajını dinleyip kendini hızlandırabilir.
Zorluğu kademeli artırmak
Hızı seviyeye bağlamak
İyi bir oyun her seviyede biraz daha zorlaşır. En basit yol, hareket hızını seviye değişkenine bağlamaktır. Örneğin bir düşman kuklası her adımda seviye kadar ilerlesin:
yeşil bayrağa tıklandığında
sürekli tekrarla
(2 * seviye) adım git
eğer <kenara değiyorsan> ise sektir
- seviyede düşman her turda 2 adım, 2. seviyede 4 adım gider. Yani seviye arttıkça oyun hızlanır. Sayıları değiştirerek zorluğu kendin ayarlayabilirsin.
Klon sıklığını artırmak
Scratch'te klon (clone), bir kuklanın kopyasıdır. Yağan yıldızlar veya gökten düşen engeller genellikle klonlarla yapılır. Klonlar Kontrol (Control) kategorisindedir.
Klonların ne sıklıkta üretildiğini de seviyeye bağlayabiliriz. Bekleme süresini kısaltırsak daha sık engel düşer.
yeşil bayrağa tıklandığında
sürekli tekrarla
kendimin klonunu oluştur
(2 / seviye) saniye bekle
- seviyede iki saniyede bir klon üretilirken, 2. seviyede saniyede bir üretilir. Ekranda daha çok engel olur ve oyun zorlaşır. Klon sayısını çok artırırsan oyun oynanamaz hâle gelebilir, bu yüzden dengeyi denemelerle bulmak gerekir.
Oyunu bitirmek
Her oyunun bir bitişi olmalı. Genellikle iki bitiş vardır: canlar biterse kaybetme, hedefe ulaşılırsa kazanma.
yeşil bayrağa tıklandığında
sürekli tekrarla
eğer <can = 0> ise
"Kaybettin" dekoruna geç
herşeyi durdur
herşeyi durdur bloğu tüm betikleri durdurur; oyun donar ve oyuncu sonucu görür. Kazanma için de benzer bir kontrol yazabilirsin: örneğin puan = 30 olunca "Kazandın" dekoruna geçmek.
Mini uygulama
Basit bir "yıldız topla" oyunu yapalım. Malzemeler: bir Kedi kuklası (oyuncu), bir Yıldız kuklası, iki dekor.
puanveseviyeadında iki değişken oluştur.- Oyun başında
puan= 0 veseviye= 1 yap, "Seviye 1" dekoruna geç. - Kediyi ok tuşlarıyla hareket ettir.
- Yıldıza dokununca
puan1 artsın ve Yıldız rastgele bir konuma ışınlansın. puan10 oluncaseviye2 yap ve "Seviye 2" dekoruna geç.
Yıldız için örnek betik:
yeşil bayrağa tıklandığında
sürekli tekrarla
eğer <Kedi'ye dokunuyor mu?> ise
puan değişkenini 1 artır
rastgele bir konuma git
Çalıştır ve şunları dene: puanı 10'a ulaştırdığında dekor gerçekten değişiyor mu? Sonra puan = 10 yerine puan = 5 yazıp seviye geçişini kolaylaştır. Sayıları değiştirdikçe oyunun nasıl değiştiğini gözlemle.
Uygulama laboratuvarı: Oyun Tasarımında Puan ve Seviye
Oyun Tasarımında Puan ve Seviye konusunu kalıcı hâle getirmenin en iyi yolu, kavramı küçük ve ölçülebilir bir göreve dönüştürmektir. Bu çalışmada Değişkenlerle puan ve can ile Puanı artırmak arasındaki ilişkiyi kullanarak çalışan bir Scratch sahnesi, blok düzeni ve test listesi hazırlayacaksın. Amaç yalnız sonucun çalışması değil; hangi kararı neden verdiğini, neyi test ettiğini ve hangi durumda tasarımı değiştireceğini açıklayabilmektir.
Görev senaryosu
Şu senaryoyu ele al: bir karakterin puana göre farklı tepki verdiği kısa oyun. Dersin ana hedefi “Puan, can ve seviye geçişleriyle bir oyunu adım adım zorlaştırmayı öğren” olduğuna göre önce problemi tek cümleyle tanımla. Ardından sistemin alacağı girdiyi, uygulayacağı işlemi ve üreteceği çıktıyı ayrı ayrı yaz. Bilmediğin bir ayrıntı varsa onu varsayım olarak işaretle; varsayımı gerçek bilgi gibi kullanma.
- Planla: Başlangıç durumunu, beklenen sonucu ve kullanacağın kavramları yaz.
- En küçük sürümü kur: Yalnız temel davranışı çalıştır; süsleme ve ek özellikleri sonraya bırak.
- Üç test hazırla: Normal bir durum, sınırda bir durum ve hatalı ya da beklenmeyen bir durum seç.
- Sonucu kaydet: Beklenen ile gerçekleşeni yan yana yaz; fark varsa olası nedeni belirt.
- Tek değişiklik yap: Aynı anda birçok şeyi değiştirmek yerine bir kararı düzeltip testi yeniden çalıştır.
Başarı ö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?
“Oyun Tasarımında Puan ve Seviye” çalışmasını bitirdiğinde ürünü bir arkadaşına yalnız bölüm başlıklarıyla anlat. Arkadaşın bir karakterin puana göre farklı tepki verdiği kısa oyun senaryosundaki adımları ve karar nedenlerini takip edebiliyorsa anlatım yeterince açıktır. Anlaşılmayan noktayı daha fazla terim ekleyerek değil, Değişkenlerle puan ve can ve Puanı artırmak ilişkisini daha küçük adımlara bölerek düzelt.
Sık yapılan hatalar
Değişkeni sıfırlamayı unutmak
Oyun başında puan ve can değerlerini ayarlamazsan, ikinci oynayışta bir önceki puanla başlarsın. Yeşil bayrak tıklandığında değişkenleri her zaman ilk değerlerine ayarla.
"eşittir" yerine sürekli kontrol tuzağı
eğer <puan = 10> bloğu yalnız puan tam 10 iken doğrudur. Eğer puan bir turda 9'dan 11'e atlarsa bu koşul hiç yakalanmaz. Daha güvenli yol puan > 9 gibi "büyüktür" kullanmak veya seviye geçtikten sonra bir işaret koymaktır.
Can kaybını sınırlamamak
Karakter engele değdiği sürece her karede can azalırsa, tek dokunuşta bütün canlar biter. Can azalttıktan sonra kısa bir bekle bloğu koy veya karakteri güvenli bir konuma taşı.
Zorluğu çok hızlı artırmak
Her seviyede hızı iki katına çıkarmak oyunu birkaç saniyede oynanamaz yapar. Zorluğu küçük adımlarla artır ve her değişiklikten sonra oyunu kendin oyna.
Güvenlik notu
Bu ders tamamen ekran başında, Scratch içinde yapılır; elektrik veya donanım yoktur. Yine de birkaç şey önemli:
- Ekran süresini dengede tut. 30–40 dakikada bir kısa mola vermek gözlerini dinlendirir.
- Scratch projelerini paylaşırken gerçek adını, okulunu veya adresini yazma.
- Yorumlarda tanımadığın kişilerle kişisel bilgi paylaşma. Emin olmadığında bir yetişkine sor.
Ders özeti
- Puan ve can, oyuna hedef ve risk katan değişkenlerdir; oyun başında sıfırlanmalıdır.
- Seviye de bir değişkendir ve genellikle farklı dekorlarla gösterilir.
- Belli bir puana ulaşınca seviye değiştirip yeni dekora geçebiliriz.
- Zorluğu seviyeye bağlayarak hızı ve klon sıklığını kademeli artırabiliriz.
- Oyun; canlar biterse kaybetme, hedefe ulaşılırsa kazanma ile bitmelidir.
Kontrol soruları
- Bir oyunda puanı ve canı saklamak için hangi Scratch yapısını kullanırız?
- Oyun başında
puandeğişkenini neden sıfırlamamız gerekir? - Scratch'te farklı seviyeleri göstermek için en çok hangi görsel öğe kullanılır?
- Zorluğu artırmanın bu derste geçen iki yolu nedir?
- Karakter engele değince canların hepsinin bir anda bitmesini nasıl önleriz?
Cevaplar
- Değişkenleri (Variables) kullanırız; örneğin
puanvecanadında iki değişken oluştururuz. - Sıfırlamazsak ikinci oynayışta bir önceki oyundan kalan puanla başlarız; her oyunun adil ve aynı noktadan başlaması için değişkeni ilk değerine ayarlarız.
- Farklı dekorlar (backdrops) kullanılır; puan belli bir sayıya ulaşınca yeni dekora geçilir.
- Hareket hızını
seviyedeğişkenine bağlamak ve klonların üretilme sıklığını (bekleme süresini kısaltarak) artırmak. - Can azaldıktan sonra kısa bir
beklebloğu koyarız veya karakteri güvenli bir başlangıç konumuna taşırız; böylece aynı dokunuş tekrar tekrar sayılmaz.
Kaynak ve doğrulama notu
“Oyun Tasarımında Puan ve Seviye” dersi için doğrulama odağı Değişkenlerle puan ve can ile Puanı artırmak 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
Hata Ayıklama ve Test: Oyunumuz beklediğimiz gibi çalışmadığında hatayı adım adım bulup düzeltmeyi öğreniyoruz.