Kafayı yiyecektim arkadaşlar. Geçenlerde basit bir 2D platform oyunu için tutorial bölümü yazmaya kalktım. "Hadi canım, iki tuşu öğretiriz, zıplamayı, yürümeyi gösteririz biter" diye düşünüyordum. Meğerse o kadar değilmiş. Kendi kodunu yazan bir insan olarak, oyuncunun neyi BİLMEDİĞİNİ tahmin etmek, en karmaşık AI algoritmasını yazmaktan daha zormuş.
"Ama Bu Çok Bariz!" Yanılgısı
İlk versiyonu yaptım. Basit bir ekran: "W, A, D ile hareket et." Karakteri hareket ettirdim, "Space ile zıpla" dedim. Test için oyunu hiç bilmeyen bir arkadaşıma verdim. Adam karakteri sağa sola götürdü, zıpladı, sonra ekranın ortasındaki kapıya doğru yürüdü ve... durdu. "Hocam nasıl geçeceğim?" dedi. Ben de baktım şaşkın şaşkın. "Kardeşim, kapıya çarp, otomatik geçersin ya!" dedim. Meğerse oyuncuya "Kapıya yaklaşarak geçiş yapabilirsin" demeyi UNUTMUŞUM. Benim için o kadar bariz bir mekanikti ki, anlatmaya gerek bile görmemiştim. O an anladım ki, tutorial yazmak, kendi bilgi kör noktalarını keşfetmekle başlıyormuş.
Kontrol Çılgınlığı ve UI Bombardımanı
Sonraki aşamada, "E tuşu ile etkileşim" ve "Fare ile nişan alıp sol tıkla ateş et" mekaniklerini ekleyecektim. İlk taslağımda ekranın dört bir yanı bilgi baloncuklarıyla doluydu. "E'ye bas", "Fareyi hareket ettir", "Sol tıkla ateş et", "Şu hedefi vur". Arkadaşım ekrana baktı ve "Yahu ben neye odaklanayım, hepsi bir anda geliyor" dedi. Haklıydı. Oyun akışını bölmeden, adım adım öğretmek denen şey tam bir sanatmış. Her şeyi bir anda vermek, hiçbir şey vermemekle eşdeğermiş. StackOverflow'da bile bulamazsın bu dengenin formülünü.
Çözüm? Oyuncu Gibi Düşünemeyen Kodlar Yazmak
En sonunda şöyle bir yöntem buldum: Tutorial'ı, oyuncunun yapması GEREKEN eylemi engelleyecek şekilde kodladım. Yani, kapıya gitmeden önce "E ile etkileşim" öğretilecekse, kapıyı GÖSTERDİM ama önüne görünmez bir engel koydum. Oyuncu kapıya ulaşamadı. Sadece o zaman, ekrana "Önce şu kutuyu E tuşuyla it" talimatı çıktı. Talimatı uygulayınca engel kalktı ve kapıya ulaşabildi. Bu, oyuncunun doğal merakını ve "Neden gidemiyorum?" sorusunu kullanarak öğretmekti. Şaka gibi ama, bu basit "engelleme" mantığı, onlarca satır açıklamadan daha etkili oldu.
Sonuç olarak, bir daha "tutorial sıkıcıdır" diye geçiştiremem. O küçük bölümü yazmak, oyunun geri kalanının kodundan daha çok ter döktürdü. Siz de benzer bir "oyuncu beynini okuma" çabası içine girdiniz mi? Tutorial yazmanın sizin için en etkili yolu ne oldu?
İlk versiyonu yaptım. Basit bir ekran: "W, A, D ile hareket et." Karakteri hareket ettirdim, "Space ile zıpla" dedim. Test için oyunu hiç bilmeyen bir arkadaşıma verdim. Adam karakteri sağa sola götürdü, zıpladı, sonra ekranın ortasındaki kapıya doğru yürüdü ve... durdu. "Hocam nasıl geçeceğim?" dedi. Ben de baktım şaşkın şaşkın. "Kardeşim, kapıya çarp, otomatik geçersin ya!" dedim. Meğerse oyuncuya "Kapıya yaklaşarak geçiş yapabilirsin" demeyi UNUTMUŞUM. Benim için o kadar bariz bir mekanikti ki, anlatmaya gerek bile görmemiştim. O an anladım ki, tutorial yazmak, kendi bilgi kör noktalarını keşfetmekle başlıyormuş.
Python:
# Oyuncu kapıya değdi mi?
if player.rect.colliderect(door.rect):
player.knows_how_to_use_doors = True # OYUNCU BİLMİYOR Kİ!
Sonraki aşamada, "E tuşu ile etkileşim" ve "Fare ile nişan alıp sol tıkla ateş et" mekaniklerini ekleyecektim. İlk taslağımda ekranın dört bir yanı bilgi baloncuklarıyla doluydu. "E'ye bas", "Fareyi hareket ettir", "Sol tıkla ateş et", "Şu hedefi vur". Arkadaşım ekrana baktı ve "Yahu ben neye odaklanayım, hepsi bir anda geliyor" dedi. Haklıydı. Oyun akışını bölmeden, adım adım öğretmek denen şey tam bir sanatmış. Her şeyi bir anda vermek, hiçbir şey vermemekle eşdeğermiş. StackOverflow'da bile bulamazsın bu dengenin formülünü.
En sonunda şöyle bir yöntem buldum: Tutorial'ı, oyuncunun yapması GEREKEN eylemi engelleyecek şekilde kodladım. Yani, kapıya gitmeden önce "E ile etkileşim" öğretilecekse, kapıyı GÖSTERDİM ama önüne görünmez bir engel koydum. Oyuncu kapıya ulaşamadı. Sadece o zaman, ekrana "Önce şu kutuyu E tuşuyla it" talimatı çıktı. Talimatı uygulayınca engel kalktı ve kapıya ulaşabildi. Bu, oyuncunun doğal merakını ve "Neden gidemiyorum?" sorusunu kullanarak öğretmekti. Şaka gibi ama, bu basit "engelleme" mantığı, onlarca satır açıklamadan daha etkili oldu.
Sonuç olarak, bir daha "tutorial sıkıcıdır" diye geçiştiremem. O küçük bölümü yazmak, oyunun geri kalanının kodundan daha çok ter döktürdü. Siz de benzer bir "oyuncu beynini okuma" çabası içine girdiniz mi? Tutorial yazmanın sizin için en etkili yolu ne oldu?