Scratch (Kalitesiz Baskı)
Transkript
Scratch (Kalitesiz Baskı)
Nergiz E rcil Çağı11ay S flehmetcan Fal ODTÜyiyincilik İÇİNDEKİLER BÖLÜM 1. Scratch ile Programlama Temelleri 1.1 Giriş.................................................................................................2 1.2 Programlama Nedir?....................................................... 2 1.3 Program Yazmanın Aşamaları.......................................................3 1.4 Programlama Temelleri.................................................................. 4 1.5 Scratch............................................. .............................................. 7 1.6 Scratch ile Programlama................ ?.................... 8 9 3 | ; T Değişkenler..................... USB!Bunu C Dili ile Nasıl Yaparım? ..... 1.7.1 Değişkenlere Değer Atamak................... 10 11 HBB!Bunu C Dili ile Nasıl Yaparım? ............................ ............... 11 1.7.2 Değişken Değerini Artırmak............ . . . . . . . . . . 12 d Bunu C Dili ile Nasıl Yaparım? .............................. 1.7.3 Değişken Değerini Göstermek................................. 13 13 Bunu € Dili ile Nasıl YaparımK;:;. .......................14 1.7.4 Değişken Değerini Gizlemek................................................. 14 1.8 Operatörler................................... 14 1.8.1 Aritmetik Operatörler.............................................. 15 1.8.2 Mod Operatörü.... ...................................... 15 1.8.3 Yuvarlayın Operatörü ...... 16 1.8.4 Diğer Matemetiksel Operatörler.............................................16 1.8.5 Rastgele Operatörü................ 16 1.8.6 İlişkisel Operatörler................ 17 1.8.7 Mantıksal Operatörler.............................................................17 1.8.8 Dahil ol Operatörü..................................................................18 1.8.9 Dizgi Operatörleri...................................................................18 1.9 Listeler.............................................................. 19 1.9.1 Liste Tanımlama..................................................................... 19 1.9.2 Listeyi Sahnede Göster........................ 20 1.9.3 Liste Değerlerini Göster............................................. 21 1.9.4 Listeye Yeni Değerler Ekle....................................................21 1.9.5 Listeden Değer Sil............................... 21 1.9.6 Listeye Sıralı Değer Ekle........................... 22 1.9.7 Listede Değer Değiştir.............. 22 M m 23 1.9.8 Liste Parçası .,.... 1.9.9 Liste Eleman Sayısı...... 1.9.10 Liste Eleman 'kontrolü BÖLÜM 2. Scratch Arayüzü ...... 1 G M | :: 23t Köd BöJömü .................... k 2,3 Köö^ffffâ! ?#w§$v;/;. 31 . ' l? .,..' ± . 32 .................... 2.3.1 Döndürme Düğmesi. ..... ....................i . İ l . ' . 2.3.2 Sağ-Sol Düğmesi ................................... 2.3.3 Kısıtlı Dönüş Düğmesi.................................... .....................35 2.3.4 Yer Yön Paneli ....... 36 2.3.5 Kodlama Paneli Alt Kısmı ......... 36 ......- ■ - 3 7 . 2.3.6 Düzenle Düğmesi .r tiiHV nftlU fl ım.mnı 2.3.7 Sesler Paneli.......................*...................... ...................... 38 ■"2.4Şahne ve Karakterler t..m'Mî$ ! ( . ® 9 2.5 Araç Çubuğu..................S-X.t.• • 42 2.5.1 Dil Seçeneği Düğmesin.... İLk...........................................42 ! 2.5:2 Çalışmayı Sakla D ü ğ m is fl. İ .İ Ü . .1'..J?r* ■.^ 1 : 1 j&r..*.... 42 2.5.3 Çalışmayı Scratch Sitesine Yükle................ ................... 43 2.5.4 Dosya Sekmesi ................................ 43 ’ 2.5.5 Proje Notları................... ....43 2.5.6 Düzenle Sekmesi .......... 44 ......... 44 2.5.7Paylaşın Sekmesi..... 2.5.8 Yardim Sekmesi............ . . . . . . . . . 1 : ^ ^ 4 5 [ 2.5.9 Karakter Çoğaltma Düğmesi...v.v j% . 1 - 1 -■..............45 [ ''ıSMtfOKarakter Silme Düğmesi....._.l „ : l l i i . . * . 4 5 l ' 2.5.11 Karakter Büyütme Düğmesi ............................. 46 2.5.12 Karakter Küçültme D ü ğ m e si..il....il...:............ 46 2 M 1 3 Salma Böyüttâmn Ayarlanması ........................ 46 ^A lış tırm a la r... — ............ h R ........ 1..... 47 BÖLÜM 3. Kontrol Komutları * > 3 .1 G ir iş . . . . . . . . . . . . . . . . . . . . | . . . . . . . . . . . . . . . . . . . . . . . . . . . 9. . . . . . . . . . . . . . 4 9 J|i#T rklaM ıfm 4a................................ Ü..............................| .........50 . vüi lÜ sJİBunu Ç p ili ile Nasıl Yaparım?.............«N&efStaıU............ 51 3.21 Tıklandığında ve Değişkenler.................îs.l.îuf^ 52 Tıklandığında ve Operatörler..................................................... 8$ £]=$Bunu O D ili ile Nasıl Yaparım?....................................................... 55 3.2.2 BŞ İBunu C D ili İle .Nasıl Yaparım?....................................i,....,........ * ......... 56 l3.3 Tuşu basıldığında ...................................... 58 3.4 Karakter Tıklandığında .......... .... .................. i . f l Ü l 3.5 Saniye Bekleyin ................................. 60 ^3.6.Sürekli .............................................................................61 I£ r Q buhu C Dili ile Nasıl Y a p a r ı m 3.6.1 Sürekli ve Operatörler ....... ........................................ 63 . . . . . . i . . . . . . .................................. 64 [ E=3İBnnu C D ili ile Nasıl Yaparım? ??......................... 3.7 Defa Tâk’rarlayın 68 7'.... ...'......................69 lO ^B ü n u C 'D iliile Nasıl Yaparıfn? 3.7.1 Defa tekrarlayın ve Operatörler..............-----------G JİB unu C D ili ile Nasıl Yapanm? 3.7.2 Defa tekrarlayın ve dizgi uzunluğu .\................71 71 ...................................... 72 ................... 74 iSBİBunu O D ili He Nasıl Yaparım? :..::.................. 3.8 yayınlayın ;................................ :......... 3.9 algıladığımda ...;....................... ^ v...............‘ ‘3.10’fse sürekli öf .ğsÛİBunu C D ili ile Nasıl Yaparım ? :G sjku n u 75 S.. 76 ..... 77 .... H î... Îâ ....... 80 &âY\û%*Cî ğğ&:l C D ili ile Nasıl Yaparım? 3.11 Eğer ise ......................... SÛ ^BunüC ’D ili He Nasıl Yaparım? C û/B unu-G D ili ile-Nasıl Yaparım?:. 80 ................ ..................................... Q buhu C D ili W NâSıl'Yaparım ?.....,. 84 87 !?........ 3.12 Eğer ise Başka.................................................. ’£ 82 t t Z A r t M fc J to .8 88 .............. 89 3.13 OJana Kadar Bekleyin ..... 3.14 Olana Kadar Tekrarlayın................. v............. S .t5 Programı Durdurun .......... .'.................................. 91 93 94 .^ A lış tırm a la r 97 ...................... BÖLÜM 4. Hareket Kom utları 4.1 Giriş..................................................................................... 101 4.2 Adım gidin.......................................................................................103 4.3 Derece dönün................................................................................ 104 4.4 Yönüne dönün................................................................................ 105 4.5 Doğru dönün....................................... 106 4.6 Konumuna gidin.............................................................................107 4.7 E gidin............................................................................................. 109 4.8 Saniyede Konumuna Gidin............................................................109 4.9 X ve Y Değiştirin............................................................................ 110 4.10 X ve Y Yapın................................................................................ 111 4.11 Kenarda ise Zıplatın.................................................................... 112 4.12 XY Konumu ve Yön..................................................................... 113 ^ A lıştırm alar......................................................................................115 BÖLÜM 5. Görünüm Kom utları 5.1 Giriş.................................................................................................119 5.2 kostümüne geçin............................................................................121 5.3 Sonraki Karakter............................................................................122 5.4 Kostüm............................................................................................ 123 5.5 Söyle Süre Saniye.........................................................................124 5.6 Söyleyin.......................................................................................... 125 5.7 Süre Saniye Düşünün............................................ 126 5.8 Efektini ile değiştirin...................................................................... 126 5.9 Efektini Yapın................................................................................. 127 5.10 Grafik Efektini Temizleyin........................................................... 128 5.11 Boyu Değiştirin ve Yapın.............................................................129 5.12 Ebat.............................................................................................. 130 5.13 Göster ve Gizleyin........................................................................131 5.14 Öne Gidin ve Katman Geriye Gidin........................................... 132 ^ A lıştırm alar......................................................................................134 BÖLÜM 6. Kalem Kom utları 6.1 6.2 6.3 6.4 x Giriş.................................................................................................140 Temizleyin.......................................................................................140 Kalemi Bastırın ya da Kaldırın...................................................... 141 Kalem Rengini Yapın.................................................................... 143 6.5 Kalemin Rengini Değiştirin........................................................ 144 145 6.6 Kalem Rengini Değer Yapın............................................ 6.7 Kalem Gölgesini Değiştirin........................................................ 146 6.8 Kalem Boyunu Değiştirin........................................................... 148 6.9 Damga.............................................. 150 ^Alıştırmalar............................ 151 BÖLÜM 7. Algılama Komutları 7.1 Giriş.................................................................. 155 7.2 Yaklaşıyor mu?........................................................................ 157 7.3 Rengine Yaklaşıyor mu?.......................................................... 158 7.4 Renk Renge Yaklaşıyor mu?.........................f fîtrrifîıflt-fftfh H P 7.5 Sor ve Bekle............................................................................ 161 CÜİBunu C Dili ile Nasıl Yaparım?................................................163 7.6 Mousexvey............................................................................. 164 7.7 Mouse Basılı?........................................................................... 165 7.8 Tuşu Basılı? ......................................................................... 166 7.9 Uzaklığı ...............................................................................167 7.10 Sayacı Sıfırlayınve Zamanlayıcı..............................................168 7.11 İn S ı.........................................................................................169 7.12 Ses Yüksekliği......................................................................... 170 7.13 Yüksek Sesle?........................................................................ 172 7.14 Sensör Değeri ve Sensör........................................................ 172 ^Alıştırmalar................................................................................ 173 BÖLÜM 8. Ses Komutları 8.1 Giriş........................................................................................... 178 8.2 Ses Çal ................................................................ 179 8.3 Bitene Kadar Çal............................................................... 179 8.4 Tüm Seslen Durdurun............................................................... 180 8.5 Enstrüman Sesleri..................................................................... 181 8.6 Ses Ayarı...................................................................................183 8.7 Ses Tempo Ayarı...................................................................... 184 ^Alıştırmalar............................................................................... 186 xi BÖLÜM 9. Oyun Programlama 9.1 Giriş ............................................................ ........t........ 187 9.2 Oyunlarda Bulunması Gereken Temel Unsurlar .......— 190 9.3 Oyun Geliştirme Süreci................................ 191 9.4 Gereksinimlerin Tanımlanması........................ 191 9.5 Oyunun Amacı........................................................................... 192 9.6 Genel Tasarım ...................................................................... 195 9.7 Seviye Tasarımı......................................................................... 195 9.8 Sahne Tasarımı......................................................................... 195 9.9 Hikaye Parçacığı................................................................... 197 9.10 Hikaye Seçenekleri ve Sonuçlar.............................................. 198 BÖLÜM 10. Nasıl Yaparım? 10.1 Giriş................................ 203 10.2 Nasıl Kostüm Değiştiririm?!.':.... | .............................. 204 ..... 208 10.3 Sahneyi Nasıl Değiştiririm? 10.4 İki Karakterin Çarpışmasını Nasıl Sağlarım?.......................... 212 10.5 Karakterimi Nasıl Zıplatabilirim?..,..,........................................215 10.6 Karakterimi Sahnede Nasıl Gizleyebilirim?............................. 215 BÖLÜM 11. Nesneye Dayalı Programlama 11.1 Giriş............................................................................... .219 11.2 Nesne....................................................... 221 11.3 Sınıf ........................... .......iuU¥ 222 11.4 Alt Sınıf ve Üst Sınıf.................................................................222 11.5 Sınıf ve Nesneye İlişkin Bazı Tanımlamalar........................... 223 11.6 Kalıtım (Inheritance).................................................................224 11.7 Arayüz (Interface) ............. 224 *}11.8 Paket (Package)......................... 225 'ÎSv Alıştırmalar ......... 226 BÖLÜM 12. Örnek Çalışma-1 12.1 G iriş............................................ 12.2 Tasarım .................................................................. 228 228 12.2.1 Oyun Hikayesi...................................................................228 12.2.2 Oyun Nesneleri.................................................................229 xii 12.3 Geliştirme ..... ....................... 12.3.1 Sahne ve Karşılama 12.3.2 Hayalet (karakteri)................. .. — 12.3.3 İskelet (karakter2) ....... 12.3.4 Mezar Taşı (karakter3) ......... 12.3.5 Yarasa (karakter8)............ ..... .— 12.3.6 Oyıın Bitti Sahnesi (karakterli) ... 12.3.7 Karşılama Ekranı (KaraktertS) ... 12.3.8l<azandınız Sayfası (Karakterli) ...... 12.3.9 Oyun Tanıtım Sayfası (Karakteri8). "cSk A l ı ş t ı r m a l a r . . . . | .......................................... 230 İÜ! 241 243 245 248 250 252 255 2S7 BÖLÜM 13. Ö rnek Çalışm a-2 13.1 Giriş ............................................. -.260 13.2 Tasarım............... 260 13.3 Geliştirme ........................... 261 jW§. 1 Rakam Düğm eleri............................. 261 13.3.2 Topla İşlem Düğmesi.................................. ........... . . 263 13.3.3 Çıkart İşlem Tuşu........................... 268 13.3.4 E şittir İşlem Düğmesi. ...... 272 'Ök Alıştırmalar ...................... 275 Kaynakça............................................ 277 Dizin 279 M # .........« t*.......... xiii B C L İJ M 1 1.1 Giriş Hepimiz çok iyi biliyoruz ki, bilgisayarlar günümüzde yaşamımızın kaçı nılmaz birer parçası haline gelmiştir. Akıllı cep telefonlarımızdan, ülkele rin beynini oluşturan sistemlere kadar birçok farklı bilgisayar sistemi, günlük yaşantımızı etkilemektedir. Ciddi işlerimizi de, eğitimimizi de, eğ lenmek için geçirdiğimiz zamanları da günümüzde bilgisayarlar yardımı ile daha etkili hale getirmekteyiz. Ancak yine hepimizin bildiği gibi, bilgi sayarlar aslında mekanik ve elektronik sistemlerden oluşur. Bilgisayarlar insanlar tarafından yazılan programlar ile yönetilirler. Bilgisayarlar, prog ramlarda yazılmış olan komutları aynen uygulayan, asla bu komutlarda tanımlı görevlerin dışına çıkmayan sadık birer çalışanlardır. Bu durumda bilgisayarlardan kendi istediğimiz şekilde yararlanabilmek içim onlar ile nasıl konuşmamız gerektiğini bilmemiz gerekiyor. Biz buna programla ma diyoruz. Eğer bilgisayarınıza onun anlayacağı şekilde komutlarınızı verirseniz, o da sizin hayalinizdekileri gerçekleştirmenize katkı sağlaya cak ve istediklerinizi yerine getirecektir. Bu bölümde programlamanın temellerini ve neden Scratch ile programlamayı öğrendiğimizi inceleye ceğiz. 1.2 Programlama Nedir? Programlama temel olarak ve en genel tanımı ile yapmasını istediğimiz işleri, bilgisayarın anlayabileceği şekilde komutlar vererek söylememizdir. Bilgisayarlar bizim konuştuğumuz dili anlayamazlar. Bilgisayarlar elektronik sistemlerdir demiştik. Bu nedenle bilgisayarlar aslında elektrik akımının var olması ve olmaması durumuna göre çalışan sistemlerdir. Elektrik akımının olduğu durumu 1, olmadığı durumu ise 0 olarak algılar bilgisayarlar. Böylece ikili (binary) sistem denilen bir yapıda, bilgisayar lara son derece karmaşık bilgileri aktarırız ve bu bilgileri son derece 2 karmaşık yöntemler ile işlemesini ve çözümlemesini sağlarız. Bu du rumda biz kendi konuşma dilimizle bilgisayarlar ile iletişim kuramadığı-* miza göre, sadece 1 ve Q sembollerini kullanarak bu karmaşık komutla rımızı bilgisayarlara nasıl aktaracağımız cevaplanması gereken asıl sorumuzdur. Bizim sadece bu sıfır ve bir değerlerini kullanarak karmaşık komutları yazmamız oldukça zor bir programla sürecini gerektirir. Aslın dadır yazılan bilgisayar programları buna çok benzer bir yöntem ile ya zılıyordu. Ancak bu karmaşık sistem ile program yazmak son derece zor olduğu için, programlar da ancak basit işlemleri gerçekleştirebiliyordu. ©ünümüzde daha kolay bir şekilde insanların istediği komutları bilgisa yara gönderebilmesi için yüzlerce, binlerce farklı programlama dili geliş tirilmiştir. Örneğin Fortran, Cobol gibi artık günümüzde yaygın olarak kullanılmayan programlama dillerinin yanı sıra, günümüzde yaygın ola rak kullanılan C [1], JAVA, Visual Basic gibi birçok programlama dili bu lunmaktadır. Ancak hala bu dillerin çok iyi bir şekilde kullanılması prog ramların kolaylıkla ve daha kısa sürelerde yazılması önemli bazı prog ramlama tekniklerini ve yeteneklerini gerektirmektedir. Bu nedenle Scratch gibi ortamlar programlamayı öğrenme süreçlerini kolaylaştır makta ve herkesin kısa sürede kolay ve gösterişli programlar yazabil mesini mümkün kılmaktadır. Böylece Scratch ile kolay ve eğlenceli bir şekilde programlamanın öğrenilmesi mümkün olabilmektedir. 1.3 Program Yazmanın Aşamaları Programlar aslında bir işin nasıl yapılacağını bilmeyen, ancak işin ya pılması için gerekli tüm donanıma sahip olan bilgisayarlara, adım adım işin nasıl yapılacağını anlatan yapılardır. Bu nedenle bir problem ile ilgili bir program yazılmadan önce, programı yazan kişinin problemi çok iyi anlaması gerekir. Gerek duyarsa, problemin çözümü ile Mfill feir alan 3 uzmanından da yardım alarak, problemin en optimum çözümü ile ilgili bir çalışma yapması gerekir. Bu çalışma sonucunda, problemin çözümü ile ilgili bir algoritma geliştirilir. Algoritma (algorithm) adım adım prob lemin nasıl çözüleceğini gösteren bir yapıdır. Bazı durumlardan birden fazla çözüm alternatifleri hazırlanarak en uygun alternatifin seçilmesi de gerekebilir. Etkin çözüm alternatifinin oluşturulmasında, geliştirilecek olan algoritmanın önemi çok büyüktür. Algoritması hazırlanan progra mın bir editör ya da ortam aracılığı ile bilgisayarın anlayacağı yapıya dönüştürülmesi gerekir. Editörler bizim kolaylıkla ifade edebileceğimiz bir dil aracılığı ile bilgisayara ilettiğimiz komutların doğru bir şekilde elektronik ortamda tanımlanmasını sağlarlar. Daha sonra bu tanımlama lar bilgisayarın anlayacağı en basit yapılara dönüştürülerek bilgisayar tarafından işlenebilir ve derlenerek [1: sa.11] çalıştırılabilir bir hale dö nüştürülür. Bu aşamadan sonra programımız çalışmaya hazır hale gelir. 1.4 Programlama Temelleri Yazılım geliştirme süreçleri belirli aşamaları gerektirir. Yazılımların bü yüklükleri, kullanılacak olan teknolojiler, yazılımın geliştirileceği alan, yazılım geliştirme ekibinin yetenekleri ve deneyimleri gibi birçok farklı etken yazılım geliştirme sürecinde önemli rol oynar. Bu nedenle her ya zılım için, yazılım ve yazılım geliştirme ortamının özellikleri değerlendiri lerek çeşitli stratejilerin uygulanması gerekebilir. Biz buna yazılım geliş tirme metodolojisi (software development methodology) diyoruz. Bu metodolojiler yazılımdan yazılıma farklı biçimlerde uygulansa da, temel de Şekil 1:Tde görüldüğü gibi belirli aşamaları kapsar. Bu aramalar ge nellikle her yazılım süreci için geçerlidir. Ancak bu aşamaların birbirleri ile olan ilişkisi, süreç içindeki öncelik ve tekrar durumları farklı projeler için farklı şekillerde uygulanabilmektedir. Bu durum farklı yazılım geliş 4 tirme metodolojilerinin gelişmesine neden olmuştur. Biz bu kitapta farklı yazılım geliştirme metodolojileri ile ilgili detaylara girmeden genel olarak bu süreçteki temel aşamaları inceleyeceğiz. Bu aşamalardan ilki, yazı lımın geliştirileceği ortam ile ilgili olarak, yazılımın hedef kullanıcı kitlesi dediğimiz, geliştireceğimiz yazılımı kullanacak olan kişilerin, geliştirece ğimiz yazılımdan beklentilerinin araştırılmasıdır. Biz bu sürece gereksi nimlerin toplanması (Requirements collection) süreci adını veriyoruz. Bu gereksinimler mümkün olduğunca detaylı bir şekilde hedef kullanıcı kitleleriyle yapılacak olan görüşmeler sonucu ve bu konuda yapılan di ğer araştırmaların incelenmesi ile elde edilir ve dokümante edilir. Örne ğin okul öncesi yaş grubundaki çocuklar için bir oyun yazılımı geliştir mek istiyorsanız bu yaş grubundaki çocukların tercihleri ve yetenekleri konusunda yeterince bilgiye sahip olmanız gerekir. Aksi durumda, geliş tireceğiniz yazılım bu kişiler tarafından ilgi çekmeyecek ve kullanılma yacaktır. Daha sonra bu toplanan gereksinimler analiz edilerek yazılım geliştirme süreçlerinde kullanılabilecek şekilde dokümante edilir. Gereksinimlerin Toplanması ve Analizi TASARIM GELİŞTİRME BAKIM ve ONARIM TEST Şekil 1.1 Yazılım Geliştirme Aşamaları Yazılım geliştirme süreçlerinin diğer bir aşaması, yazılımın tasarım (design) aşamasıdır. Bir yazılım tasarlanırken çeşitli araçlar yardımı ile dokümante ediir. Bu dokümantasyonlar yazılımın nasıl geliştirileceği ile ilgili tüm detayları kapsar. İyi bir tasarım çalışmasından sonra, yazılımla- 5 rın geliştirilmesi çok daha kolay ve kısa sürelerde olur. Oysaki gereksi nimler ve tasarım ile Hpili süreçler yeterince iyi hazırlanmaz ise, yazılım sürekli sil baştan hazırlanmak durumunda kalır ve spagetti kod (sphagette code) adı verilen son derece karmaşık ve içinden çıkılmaz bir hal alır. Tasarım aşamasını geliştirme (development) aşaması izler. Bu aşamada tasarlanan sistemin bilgisayar ortamında geliştirilmesi ve ge rekli programların yazılması sağlanır. Bir diğer aşama ise yazılımların test (testing ) aşamasıdır. Böylece yazılımların hatalardan arındırılması, kullanıcıların istediği biçime getirilmesi ve kolaylıkla kullanılabilmesi için gerekli araştırmalar ve düzenlemeler yapılır. Son aşamada ise yazılımın bakım ve onarım (maintanence) süreci başlar ki bu süreçte kullanıcıla rın sorunsuz bir şekilde yazılımları kullanması için gerekli işler gerçek leştirilir. Kitabımızın bu kısmında yazılım geliştirme süreçlerinin burada kısaca özetlenen başlıkları altındaki tüm detaylara girmemizin mümkün olmadığını biliyoruz. Bu nedenle, yazılım geliştirme süreçlerinde gelişti receğimiz yazılımın kalitesi ile doğrudan bağıntılı olan yazılım tasarım aşamasında kullanılabilecek temel araçlardan bahsetmek istiyoruz. Bu araçlar algoritma, akış çizenekleri ve Tümleşik Modelleme Dili-TMD’dir. Şimdi bu araçları kısaca inceleyelim' Algoritma (algorithm), bilgisayarda yazacağımız bir programın çalışma adımlarını bilgisayarımıza aktarabilmek için kullanılan temel araçlardan birisidir. Algoritma bir problemin çözülmesi için izlenilen basit adımların sıralı olarak tanımlanmasını sağlar. Bu nedenle sıralı Olarak yapılması gereken problemlerin çözümü amacıyla kullanılan etkin araçlardan biri sidir. Akış çizenekleri (flow diagrams) ise, algoritma [1: sa. 7-9] ile belirlenen adımların grafiksel olarak gösterimidir. Tümleşik Modelleme Dili-TMD (Unified Modeling Language-UML) ge lişen, yazılım teknolojisi ve yazılım karmaşıklığının artması karşısında 6 yaşanılan sorunları azaltmak amacıyla endüstriyel olarak geliştirilmiş ve standartlaşmış grafiksel bir dildir. Bu yaklaşım, tasarım aşamasında sistemin görsel olarak farklı açılardan modellenmesine olanak verir. TMD ile sistem modellemesinin yapılması, daha sonraki adım olan kod lamanın daha kolay ve doğru bir biçimde gerçekleşmesini sağlar. Bu araç, hem hataların en aza inmesine yardım eder, hem de geliştirme ekibi elemanları arasındaki iletişimi kolaylaştırır. TMD [2: sa. 122-134] aynı zamanda tekrar kullanılabilir kod sayısının ve program kararlığının artmasında da etkilidir. 1.5 Scratch Programlamaya başlarken, programlama mantığı ve algoritmik düşünce yeteneği kazandıran Scratch, tüm dünyada programlama eğitimine baş layanlar için önerilen bir yazılımdır. Bu programı yeterince etkin bir şe kilde kullanabilmek, size çok karmaşık ilişkileri analiz edip, karşılaştığı nız problemleri küçük parçalara bölme yeteneği kazandırırken, herhangi bir programlama dili ile kullanacağınız temel yapıları en etkili şekilde öğrenmenizi de sağlayacaktır. Bu kitapta size, Scratch programının temel yeteneklerini anlatıp bu ye teneklerin birleşimleriyle neler yapabileceğiniz konusunda örnekler ve receğiz. Scratch ile programlamayı öğrenmeye başlamadan önce, Scratch yazılımını bilgisayarınıza kurmanız gerekmektedir. Bu kitap, Scratch yazılımının 1.4’sürümü kullanılarak hazırlanmıştır. Bu yazılımı Amerika’daki MIT Üniversitesi’nin web adresine bağlanarak [4] bilgisa yarınız için uygun olan sürümü seçtikten sonra, ücretsiz olarak bilgisa yarınıza yükleyebilirsiniz. 1.6 Scratch ile Programlama Scratch ile programlama, görsel olarak programlama temellerine da yanmaktadır. Programlama mantığı içinde gerek duyulan tüm yapılar, Scratch sistemi içinde görsel olarak sunulmaktadır. Bu kapsamda Scratch Şekil 1.2’de görüldüğü gibi temel bir ekran sunmaktadır. Şekil 1.2 Scratch Ana Ekranı Bu ekrandaki sekmeler ve sekmelerin altında bulunan tüm özellikleri bu kitapta size tanıtacağız. Daha sonra, programlama için gerekli kodların kullanımını anlatırken, temel kod bloklarını örneklerle açıklayacağız. Ay rıca tüm bu kavramların diğer programlama dilleri ile olan bağlantılarını kurarak, programlama dillerindeki temel yapıları da kavramanıza yar dımcı olacağız. Kitabımızın sonraki bölümlerinde Scratch’ın bu ana ekranı üzerinden yapabileceğimiz işeri, Kod Bölümü, Kodlama Paneli, Sahne, Karak t e r le r ve Araç Çubuğu olmak üzere dört başlıkta size tanıtacağız. Scratch arayüzünün Türkçe olarak bize sunulmuş olmasının, ülkemizde daha yaygın ve kolay kullanımı açısından önemli olduğunu düşünüyo ruz. 1.7 Değişkenler Değişkenler (variables) programlamanın en temel unsurlarından birisi dir. Scratch içinde değişkenler Şekil 1.3’de görüldüğü gibi, turuncu renk le imgelenen kod grubu ile tanımlanır. Burada tanımlanan işlemler ile programlayıcının bir değişkeni tanımlaması ve daha sonra bu değişkene değerler atayarak program içinde kullanması mümkündür. (Ü* Scratch 1.4 of 3G-Jun-09 Şekii 1.3 Scratch Menüsü Değişkenler yardımı ile bilgisayarın bazı bilgileri belleğinde tutması sağ lanır. Değişken kod gruplarına program yazarken sıkça ihtiyaç duyulur. Hatta bazı durumlarda değişkenler olmadan karakterler arasındaki ilişki leri tanımlamak olanaksız olmaktadır. Bu nedenle, değişkenleri doğru ve etkin bir şekilde kullanmak, yazacağınız programın kalitesini artıracaktır. Ancak şunu da hatırlatmak gerekir ki, iyi bir programlayıcı, değişkenleri gerekli olduğu yerde ve gerekli olduğu kadar tanımlar ve kullanır. Çünkü değişkenlerin gereksiz kullanımı bilgisayarınızın belleğinde ge reksiz tanımlamaların tutulmasına neden olacak bu durum da program larınızın yavaş çalışmasına, beklenmedik yerlerde takılmasına ya da çalışmamasına neden olabilecektir. Scratch ile bir değişken tanımlaya bilmek için, Şekil 1.3’de görülen Scratch menüsünden Değişkenler seçeneğini seçmeniz gereklidir. Daha sonra “Değişken oluşturun” seçeneğini seçerek yeni bir değişkeni tanımlayabilirsiniz. Örneğin can isimli bir değişkeni Scratch ile Şekil 1.4’deki gibi tanımlayabiliriz. can Şekil 1.4 Scratch ile Değişken Tanımı Bunu C Dili ile Nasıl Yaparım? C programlama dili ile bir değişkenin tanımlanması için [1: sa. 31-32], öncelikle o değişkene ait veri tipinin [1: sa. 29-30] tanımlanması gerekir. Veri tipi değişkenin alabileceği değerlerin ne tür değerler olabileceğini tanımlar, örneğin sayısal değerler alabilen bir değişken ile karakter bir değer alabilen bir değişkenin C dilinde tanımlanması farklıdır. Şimdi sa yısal bir değer alabilen can isimli değişkeni C dilinde tanımlayalım. # in c lu d e < s td io .h > i n t main (v o id ) { in t can; retur>n(0); } Yukarıdaki program çalıştırıldığında bilgisayarınızın ekranında herhangi birşey görülmez. Çünkü sadece bir değişkenin bilgisayarınızın belleğin de tanımlanması sağlanmış, ancak bu değişken ile ilgili bir işlem yapıl mamıştır. Değişkenler ile bir işlem yapabilmek için değişkenlere öncelik le bir değer atanması gerekir. Değişkenler ile Şekil 1,5’de görüldüğü gibi birçok işlemin gerçekleştirilmesi mümkündür. 10 Şekil 1.5 Scratch ile Değişken İşlemleri Şimdi bu işlemleri basit olarak inceleyelim. Kitabımızın ilerleyen bölüm lerinde değişkenleri daha detaylı olarak kullanacağız. 1.7.1 Değişkenlere Değer Atamak Scratch ortamında bir değişkene değer atayabilmek için Şekil 1.6’daki gibi bir tanımlama yapılabilir. Şekil 1.6 Değişkene Değer Ata Bu tanımlama sonucunda can değişkeninin değeri sıfırlanmış olur. Bu tanımlamadan sonra can değişkeni kullanıldığı her yerde sıfır değeri ile işlem yapacaktır. m Bunu C Dili ile Nasıl Yaparım? C programlama dili ile bir değişkene değer atanması, atama komutları [1: sa. 36-40], kullanılarak gerçekleştirilir. Şimdi Scratch ile yazdığımız yukarıdaki koda benzer şekilde can değişkenine ilk değer ataması işle mini gerçekleştiren C kodunu birlikte yazalım. #include <stdio.h> in t main (void) { in t can = 0; re tu rn (0 ); > C programlama dilinde bu şekilde yazılmış bir komutu aynı zamanda aşağıdaki gibi de yazmak mümkündür. Bu iki kod da aynı şekilde çalışır. Aradaki tek fark, birinci programda can değişkeninin tanımlanması ve ilk değer ataması işlemleri tek bir komut ile yapılırken, aşağıdaki program da bu işlemler için iki ayrı komut yazılmıştır. #include <stdio.h> in t main (void) { in t can; can = 0; re tu rn (0 ); > 1.7.2 Değişken Değerini Artırmak can değişkeninin mevcut değerini belli bir sayıda artırmak ya da azalt mak için de atama komutlarını kullanabiliriz. Örneğin Şekil 1.7’deki ko mut ile can değişkeninin değeri bir artırılır. c a r f:j O k a d a r de ğ iştirin Şekil 1.7 Değişken Değerini Artır Bu durumda can değişkeninin bilgisayarımızın belleğinde kaydedilmiş olan en son değeri, belirtilen sayı kadar artırılır ya da azaltılır. Scratch içindeki bu değişken grubu kodumuz tanımladığımız değişkenin değerini belirttiğimiz kadar artırmak için kullanılır. Eğer değişken değerimizi 12 azaltmak istiyorsak bir ifade kullanmamız değişken değerimizi azal tacaktır. m Bunu C Dili ile Nasıl Yaparım? C programlama dili ile, yukarıdaki Scratch koduna benzer işi yapan bir programı aşağıdaki gibi yazabiliriz. Böylece can değişkeninin ilk değeri sıfırken, bir artırılarak 1 değerine eşitlenmiş olur. Burada ilk değer ata ması işlemi yapılmadan artırma işleminin yapılması durumunda, prog ramımız hata verecektir. Bunun nedeni, bellekte herhangi bir değer ataması yapılmamış olan değişkenin mevcut değerinin artırılmaya çalı şılmasıdır. #include <stdio.h> in t main (void) { in t can = 0; can = can + 1; re tu rn (0 ); > 1.7.3 Değişken Değerini Göstermek Bir değişkenin bellekte sakladığı değeri gösterebilmek için, Şekil 1,8’deki gibi bir tanımlama yapmak gerekir. Şekii 1.8 Değişken Değerini Göster Böylece, can değişkeninin mevcut değerini sahnede görmek mümkün olur. Bir başka deyişle, böylece can değişkeninin değerindeki tüm deği şikliklerin sahnede kullanıcı tarafından takip edilmesi mümkün olur. Ge nellikle puan ya da zaman göstermek için bu tanımlama sıkça kullanılır. 13 ta Bunu C Dili ile Nasıl Yaparım? C programlama dili ile, bir değişkenin bilgisayarın belleğinde saklamakta olduğu değeri gösterebilmek için, çıktı komutlarını [1: sa. 50-67] kul lanmak gerekir. Yukarıdaki Scratch koduna benzer işi yapan bir prog ramı C programlama dilinde aşağıdaki gibi yazabiliriz. #include <stdio.h> i n t main (v o id ) { i n t can = 0; can = can + 1; p r i n t f ("can= %d", can); re tu r n (0 ) ; > 1.7.4 Değişken Değerini Gizlemek Bir önceki kodumuzun tam tersi bir şekilde çalışan program parçasını, değişken değerimizi sahnede gizlemek için, Şekil 1.9’daki gibi yazabili riz. Şekii 1.9 Değişken Değerini Gizle Bazı değişkenlerin kullanıcı tarafından görülmesine gerek yoktur. Böyle durumlarda bu kodu kullanmak gerekir. 1.8 Operatörler Operatörler, tanımlamış olduğumuz değişkenler ile çeşitli işlemleri ger çekleştirebilmemizi sağlayan tanımlamalardır [1: sa. 41-45]. Scratch ile operatörleri kullanmak için Şekil 1.10’da görüldüğü gibi operatörler me nüsüne girmemiz gerekir. 14 Şekil 1.10 Operatörler Menüsü Scratch operatörler menüsü seçildikten sonra, operatörler ile yapılabile cek işlemleri gösteren detay menü karşımıza çıkar. Yeşil renkle imgele nen bu kod grubu, yapacağınız oyunlarda karakter hareketleri, sahne geçişleri ve zamanlama gibi mantıksal süreç içeren tüm olaylarda kulla nacağınız kod grubudur. 1.8.1 Aritmetik Operatörler Bu kısımda tanımlanan komutlar ile matematiksel işlemleri yapmak mümkündür. Matematiksel işlemler için Şekil 1.11’de gösterilen tanım lamalar kullanılır. • • Şekil 1.11 Aritmetik Operatörler Şekil 1.11’de görüldüğü gibi bu amaçla + toplama, - çıkartma, * çarp ma ve / bölme olmak üzere dört basit işlem sunulmaktadır. 1.8.2 Mod Operatörü Bu operatör iki tamsayı değerinin birbirine bölünmesinden kalanı verir. Kullanım biçimi Şekil 1.12’deki gibidir. £ ’r nod Şekil 1.12 Mod Operatörü 1.8.3 Yuvarlayın Operatörü Bu operatör matematiksel olarak yuvarlama işlemini yapar, içerisine yazdığınız ondalıklı sayıyı üzerindeki tam sayıya yuvarlar. Kullanımı Şekil 1.13’de görüldüğü gibidir. Şekil 1.13 Yuvarlayın Operatörü 1.8.4 Diğer Matemetiksel Operatörler Bu operatörler dışındaki diğer matematiksel işlemler için, Şekil 1.14’deki tanımlamaları kullanmak mümkündür. Bu operatörler matematiksel ifa deleri içermektedir ve bunlar ile sinüs, kosinüs, karekök gibi işlemleri yapmak mümkündür. Şekil 1.14 Diğer Matematiksel Operatörler Bu tanımlamalar, sağ tarafdaki aktif bölgeye yazdığınız ya da atadığınız değişkenin değerini seçtiğiniz matematiksel ifadeye döndürür. 1.8.5 Rastgele Operatörü Rastgele operatörü, belli aralıktaki sayı kümesi içinden rastgele olarak bir değer seçilmesini sağlar. Olasılıksal olarak seçilen bu değer, farklı 16 işlemlerde farklı amaçlar için kullanılabilir. Örneğin 1 ile 10 değerleri ara lığından rastgele olarak bir sayı seçmek için Şekil 1.15’deki gibi bir ta nımlama kullanılabilir. Şekil 1.15 Rastgele Operatörü örneğin l ile 6 aralığındaki sayı değerlerinden birisini rastgele seçerek zar atma işlemine benzer bir işlem yapabilmek için, Şekil 1.15’deki gibi bir tanımlamayı “1 i l e 6 arası rastgele seçin” şeklinde yapmak gerekecektir. 1.8.6 İlişkisel Operatörler ilişkisel operatörler büyüklük ve eşitlik durumlarının karşılaştırılması gibi parametreler arasındaki ilişkiler ile ilgili işlemlerin yapılması amacıyla kullanılan ve Şekil 1.16’da gösterilen operatörlerdir. Şekil 1.16 İlişkisel Operatörler Bu operatörler aracılığı ile, < küçüklük, > büyüklük ve = eşitlik durumla rının karşılaştırılması sağlanır. 1.8.7 Mantıksal Operatörler Mantıksal işlemlerin yapılması amacıyla ise, Şekil ^f/17'de gösterilen mantıksal operatörler kullanılır. Şekil 1.17 Mantıksal Operatörler 17 1.8.8 Dahil ol Operatörü Genel olarak görünüm kodlarından konuşma balonu ile kullanılan bu kod parçamızın üzerinde bulunan iki aktif boşluk, bildireceğimiz mesajın yazılması gereken bölümdür. Burada Şekil 1.18’de görüldüğü gibi kod parçasının ilk ya da ikinci aktif bölümünü söylemek istediğimiz mesaj, diğer bölümünü ise bir değişkenden elde edeceğimiz değer için kullana biliriz. Şekil 1.18 dahil ol Operatörü 1.8.9 Dizgi Operatörleri Dizgiler (strings) birden fazla karakterin bir araya gelmesi ile oluşan ka rakter kümeleridir [1: sa. 264-291]. Dizgiler ile dizgi içinde bir karakterin aranması, dizginin uzunluğunun bulunması gibi bir çok farklı işlemin ya pılması gerekebilir. Örneğin bir dizginin birinci karakterine ulaşabilmek için Şekil 1.19’daki gibi bir tanımlama yapılabilir. harfi I Şekil 1.19 Dizgi Operatörü Yukarıdaki kod parçacığımız daha sonraki kısımlarda anlatacağımız bir çok kod grubumuzla birlikte kullanılabilir. Burada tanımlanmış olan kod “dünya” kelimesinin 1. harfi olan “d” harfini işaret etmektedir. Aynı şekil de bir dizginin içindeki harf sayısını bulabilmek için uzunluğu dizgi ope ratörünü Şekil 1,20’de görüldüğü gibi kullanabiliriz. Şekil 1.20 uzunluğu Dizgi Operatörü 18 Bu operatör grubu kodu içerisine yazılan kelimenin uzunluğunu, bir baş ka deyişle, içerdiği harf sayısını gösteren sayısal bir değer döndürür. Eğer içine bir değişken eklenirse, bu durumda bu değer belirtilen değiş kene atanır. Bu kod grubundaki işlemlerin kullanımları, kitabımızın iler leyen bölümlerinde detaylı olarak anlatılmaktadır. 1.9 Listeler Değişkenler kod grubunda koyu turuncu rengi ile temsil edilen listeler grubu değişken olmasının yanı sıra, değişkenlerden farklı olarak, birden fazla değişkenin birarada saklanabileceği, bu değişkenlerin hepsinin, birkaçının ya da herhangi birisinin istenildiğinde kullanılabileceği bir ya pıya sahiptir. Listeler diğer programlama dillerindeki dizi (array)’lere benzer bir yapıdadır [1: sa. 226-257]. Burada unutulmaması gereken nokta, listeleri kullanırken, liste adını ve sahnede görünüp görünmeme durumunu listenizi oluşturduğunuzda bilmeniz gerekmektedir. Tıpkı de ğişkenlerde olduğu gibi, listelere de vereceğimiz isimlerin açıklayıcı isimler olduğundan emin olmamız, yazdığımız programın anlaşılabilirliği ve kalitesi açısından önemlidir. Bir liste tanımlayabilmek için, Şekil 1.21’de görüldüğü gibi Listele tuşuna basarak listenize daha önce kul lanmadığınız bir değişken ismi vermeniz yeterlidir. Şekil 1.21 Listele Tuşu 1.9.1 Liste Tanımlama Şimdi adı can olan bir liste tanımlayalım. Ancak bu listeyi tanımlayabil mek için, daha önce tanımlamış olduğunuz can değişkenini silmeniz gerekir. Çünkü aynı isme sahip iki değişkenin tanımlanmasına sistem izin vermeyecektir. Bu durumda, Şekil 1.22’de görüldüğü gibi yeni ta nımladığımız can listesi değişkenler alanında görülecektir. can Şekil 1.22 Liste Tanımlama Bu tanımlamadan sonra, listeler ile ilgili yapılabilecek tüm işlemlerin gö rüldüğü yeni tanımlamalar ekranınıza gelecektir. 1.9.2 Listeyi Sahnede Göster Tanımlanan yeni listenin sahnede görülüp görülmeme durumunu, de ğişkenler kod penceresinde herhangi bir liste oluşturduktan sonra ekra na gelen seçeneklerden ilk sıradaki kodun sağ tarafında bulunan kontrol kutucuğunu işaretleyerek ayarlayabilirsiniz. Kutucuğu Şekil 1.23’de gö rüldüğü gibi işaretlediğinizde listenin sahnede görülmesini, işaretleme diğinizde ise görülmeme durumunu ayarlayabilirsiniz. m Şekil 1.23 Listeyi Sahnede Göster Listeleri daha iyi anlayabilmek ve programlama sırasında oluşabilecek hataları önleyebilmek için, listelerle çalışırken sahnede görünmelerini sağlamanız önerilir. lîpBîH *e can j ekleyin 6 D '*n can l 'sini silin KEflBH *in QQ m 'sine can |'i ekleyin \'sini r f H B olarak de **n f l B 'i n can Iparçası can J'in uzunluğu p içermektedir Şekil 1.24 Liste Tanımlamaları 20 Programınızı tamamladığınızda listeleri sahnenizden kaldırabilirsiniz. Listelerin tanıtımında can listesini kullanacağız, can listesini oluşturdu ğumuzda Şekil 1.24’de görülen tanımlamalar ekranımıza gelecektir. 1.9.3 Liste Değerlerini Göster Kullanıcımız programımızı çalıştırdığında karakterimizin can listesindeki tüm değerleri konuşma balonu içerisinde göstermesi için Şekil 1.25’deki gibi bir tanımlama yapabiliriz. Şekil 1.25 Liste Değerlerini Göster 1.9.4 Listeye Yeni Değerler Ekle Tanımladığımız bu listeye yeni değerler eklemek için ise Şekil 1.26’daki gibi bir tanımlama yapabiliriz. Şekil 1.26 Listeye Değer Ekle Bu tanımlama kodun aktif olan bölümüne yazdığımız değeri ya da kulla nıcıdan alınacak bir değişken değerini listeye ekler. 1.9.5 Listeden Değer Si! Tanımlanan bir listeye ait değerleri listemizden silmek için, Şekil 1.27’de görüldüğü gibi bir tanımlama yapabiliriz. Şekil 1.27 Listeden Değer Sil 21 Silme işlemini gerçekleştirmek için, öncelikle sağdaki çoklu seçim kutu sundan silme işleminin yapılacağı listeyi seçip, daha sonra soldaki se çim kutusundan silmek istediğiniz değerlerin sıra numarasını veya de ğerlerin hepsini seçerek silme işleminizi gerçekleştirebilirsiniz. 1.9.6 Listeye Sıralı Değer Ekle Şekil 1.28’de verilen kod, listemize girmek istediğimiz değeri, listemizde istediğimiz sıraya koyabilmek içindir. Şekil 1.28 Listeye Sıralı Değer Ekle Böylece, soldaki aktif olan bölüme girdiğimiz değeri, ortada bulunan çoklu seçim kutusundan seçeceğimiz sıra numarası ile, seçtiğimiz liste de, istediğimiz sıraya yerleştirmek mümkün olur. Burada dikkat etmemiz gereken nokta, listeleri birbirine karıştırmamaktır. Bu nedenle listelere ve değişkenlerimize vereceğimiz isimlerin anlaşılabilir isimler olması son derece önemlidir. 1.9.7 Listede Değer Değiştir Şekil 1.29’da verilen kod, listemizden istediğimiz sıradaki değeri başka bir değerle değiştirmek için kullanılır. Şekil 1.29 Listede Değer Değiştir Burada dikkat etmemiz gereken nokta, değiştirilen değerin tamamen kaybolacak olmasıdır. Yeni girilen değerin sıra numarası, kaybolan de ğerin sıra numarası olarak tanımlanır. Böylece, değiştirdiğimiz değerin eski halini tekrar çağırmak gibi bir şansımız olmayacaktır. 22 1.9.8 Liste Parçası Şekil 1.30’da verilen kodumuz, şeklinden de anlaşıldığı gibi, operatörler tarafından kullanılmak için tasarlanmıştır. Şekil 1.30 Liste Parçası Sol taraftaki çoklu seçim kutusunda bulunan, sıra sayıları, hepsi ya da herhangi biri seçeneklerinden birini seçerek tanımlanır. Böylece, listede seçtiğimiz değeri sınamak mümkün olur. 1.9.9 Liste Eleman Sayısı Şekil 1.31’de verilen kod, liste değişkenine ait, eleman sayısını bulmayı sağlar. Şekil 1.31 Liste Eleman Sayısı Çoklu seçim kutusunda seçtiğimiz listenin içerisinde kaç değer bulun duğunu gösteren bu kod, liste uzunluklarını sınamak veya liste içerisin de bulunan eleman sayısıyla ilgili işlemleri gerçekleştirmede kolaylık sağlar. 1.9.10 Liste Eleman Kontrolü Şekil 1.32’de verilen tanımlamalar ile, koşul olarak sorgulanan bir değe rin belirtilen liste içerisinde yer alıp almadığı kontrol edilebilir. Şekil 1.32 Liste Eleman Kontrol 'eüSk Alıştırmalar 1. Aşağıdaki kodlardan hangisi, değişken değerimizi sahnede göste rebilmemiz için tasarlanmıştır? 2. Yukarıda verilen kod bloğunda tanımladığımız değişkenlerin değen leri program çalıştırıldığında nasıl olur? * X ' 0 y 1 z -» 1 ^ ' X 1 Y Z 0 2 C) 3. 2. soruda verilen işlemin benzerini yapan bir C programını yazınız ve çalıştırınız. 24 4. Aşağıdaki program parçasında, bir önceki kod bloğu ile aynı anda çalışacak olan yeni bir kod bloğu tanımlanmıştır. Bu kod bloğu ilk kod bloğumuzdan 1 saniye sonra çalışacaktır. Yeni kod bloğumuzun çalışmasından sonra değişkenlerimizin alacağı değerler aşağıdaki seçeneklerin hangisinde doğru bir şekilde verilmiştir? a) c) X -» 1 y -> 2 z -» 3 x -» 1 y * 2 z -» 0 b) X Y -» z d) x -» y -» z -» 25 5. Aşağıda verilen kod bloğunun yapısı, seçeneklerde sunulan C programlama dilinde kullandığımız yapılardan hanisine benzemektedir? a) c) 6. if switch b) Nested i f d) Nested fo r Aşağıda verilen program parçası çalışma prensibi açısından, C programlama dilinde kullandığımız hangi yapıya benzemektedir? a) Nested fon c) switch b) i f d) w hile 7. Aşağrd&klİİStd f rubu kodlardan hangi kodu kullanarak, oluşturdu ğumuz listenin sonuna x değişkenimizin değerini ekleyebiliriz? a) b) c) d) 8. Aşağıdaki kod parçalarından hangisini kullanarak liste değerlerini diğer listemize ya da bir değişkene atayabiliriz? a) b) c) d) iste [ , I B p p içerm ektedir 9. Aşağıdaki kod parçalarından hangisi listemîze ait olan bir değeri rasgele seçer ve bir değer olarak geri döndürür? a) fB-in Jtsfca |'sini BgHSgolarakdeğiştir! b) d) 10. Aşağıdaki kodlardan hangisi C programlama dilinde kullandığımız strlen() fonksiyonu gibi davranır? 11. Aşağıdaki kodlardan hangisi listemizdeki değerleri kontrol edip bize geri döndürür? a) c) G B E B 'e m l 's^e lis te ; e k le y in | b) d) p a rç a s ı iste . B T B î H iç e rm e k te d ir 12. Aşağıdaki kod parçalarımızdan hangisi listemizdeki değerlerden belirttiğimiz bir tanesini değer olarak geri döndürür? a) | 'in İ D *sine *|SJ e i *i e k le y in c) K S S ^ H B B 13. 14. d> iç e rm e k te d ir Aşağıdaki kodlardan hangisi toplama işlemi yapmak için kullanılır? b) a) c) b) I9 B d) Aşağıdaki kodlardan hangisi kontrol grubuna ait sınama kodlarıyla kullanılabilir? 15. Aşağıdaki kodlardan hangisi belirlediğimiz bir aralıkta herhangi bir değeri elde etmemizi sağlar? I G ■ 16. s S S 1 d) m I ») | ara sı ra s tg e le seçin Aşağıdaki kodlardan hangisi herhangi bir değeri, bir başka sayıya bölümünden kalan sayıyı bize geri döndürür? a ra s ı r a s t g e le s e ç in c) 17. 0 b) 9 y u v a rla y ın E5SB m od (f Aşağıdaki kodlardan hangisi herhangi bir listeye bir nesneyi sabit olarak ekleyip, bununla beraber belirlenmiş bir değişkenin değerini lis temize ekler? İ M » dahil ol b) f| yuvarlayın d) 18, Aşağıdaki kodlardan hangisi herhangi bir ondalık sayıyı ona en yakın değere eşitler? b) d) I L J B U İ ■ I y u v a rla y ın 29 19. Aşağıdaki kodlardan hangisi herhangi bir harf dizisinin istediğimiz harfini bize değer olarak geri döndürür? a) c) 20. 0 y u v a r la y ın m sm sm b) [d ü n y a j d) Aşağıdaki kodlardan hangisi bize birden fazla koşulu sağlayan bir kod bloğu oluştururken yardımcı olur ? EEBI ■ M M f) E 3 c) 21. m m usum b) Aşağıdaki kodlardan hangisi bir koşulun olmaması durumunda diğer kod parçacığımız içerisindeki kodlarımızı aktif eder? F 0 m od 0 C) 22. i n Aşağıdaki kodlarımızdan hangisi trigonometrik işlemler yapabil memize olanak sağlar? BÖ LÜ M 2 2.1 Giriş Scratch ana ekranında bulunan temel bölmelerin altında yapılabilecek olan tüm işler, bu bölümde ayrı ayrı tanıtılmaktadır. Kodlama paneli, sahne, karakterler ve araç çubuğu ile ilgili tanımlamalar bu bölümde iş lenmektedir. 2.2 Kod Bölümü Kod bölümü ana ekranın en solunda bulunan bölümdür. Bu bölümün üst kısmında, bu bölümde kullanabileceğimiz kodların grupları yer almakta dır. Genel olarak kodlar, yeteneklerine göre gruplanmışlardır. Şekil 2.1’de görüldüğü gibi sekiz farklı grup olarak sunulan bu bölümdeki sekmelere tıkladığınızda, tıkladığınız gruba ait tanımlamalar ekranda belirir. Şekil 2.1 Kod Gruplan Bu gruplardan birisini seçtiğinizde, ayrıca seçtiğiniz grubun düğmesinin rengi de değişerek size hangi grupta olduğunuzu hatırlatacaktır. Ana ekran resmini incelediğinizde, k o n tro l grubunun seçildiğini ve bu gruba ait olan kodların alt bölümde sunulduğunu görebilirsiniz. Örneğin Kont r o l kod grubunu seçtiğinizde, Şekil 2.2’de görülen kodlar ekrana gele cektir. 32 ■ ■ H l Şekil 2.2 Kontrol Kod Grubu Seçenekleri 2.3 Kodlama Paneli Bu bölüm ana ekranın tam ortasında bulunan kısımdır. Temel olarak bu bölüm de yine iki ayrı pencereden oluşmuştur. Üst pencerede bulunan bilgiler, kullandığınız karakterin ismi, yeri, yönü ve karakterin dönebilme yeteneğini bildiren bilgileri barındırır. Bu bilgiler, karakterinizin ismini değiştirerek, ekranda görüneceği konumunu, hangi yöne bakacağını belirtmek, karakterin program boyunca sabit kalmasını veya sağa sola dönebilmesini ya da tamamen dönebilmesini sağlamak için kullanılır. İyi bir programlama için mutlaka karakterlerinize hatırlayacağınız isimler vermeniz, onların sahnede alacağı yerleri mutlaka belirtmeniz ve hare ket yeteneği konusunda seçim yapmanız gerekmektedir. Bu amaçla ta nımlanmış olan düğmeleri kullanabilirsiniz. 2.3.1 Döndürme Düğmesi Bu düğme size karakterin dönüş yeteneğinin sınırsız olması için bir se çenek sunar. Bu düğme Şekil 2.3’de görülen biçimdedir. Şekil 2.3 Döndürme Düğmesi Bu yetenekte unutulmaması gereken şey, karakterin iki boyutlu (2B) ol duğu ve yapılan dönüşün sadece iki boyutta yapılabileceğidir. Örneğin, sahneye getirdiğiniz bir karakter resmi sadece saat yönünde Şekil 2.4’de görüldüğü gibi dönebilecektir. a) Durum-1 b) D uru m -2 c) Durum-3 Şekil 2.4 Döndürme Düğmesi Örneği 34 2.3.2 Sağ-Sol Düğmesi Bu düğme karakterin sağa bakarken sola doğru bakmasını sağlar. Bu düğme Şekil 2.5’deki gibidir. Şekil 2.5 Sağ-Sol Düğmesi Karaktere aynada göründüğü gibi bir görünüm sağlamanız gerekirse bu seçeneğin seçilmiş olması gerekmektedir. Aslında, bir üstte tanıttığımız düğme de bu yeteneği sağlarken, sağ-sol düğmesi karaktere bir sınır lama getirmektedir. Bu yetenek daha çok karakterin herhangi bir komut ta kusursuzca sağa ve sola dönüş yapmasını sağlamayı amaçlamakta dır. Kısaca bu düğme, karakterin kodlarla Şekil 2.6’daki durumlar ara sında geçiş yapmasını sağlar. Dönüş için gerekli kodlar ilerideki bölüm lerde örneklerle açıklanmaktadır. a) Durum-1 b) Durum-2 Şekil 2.6 Sağ-Sol Düğmesi Örneği 2.3.3 Kısıtlı Dönüş Düğmesi Bu düğme seçildiğinde karakterin dönüş yapma imkânı kısıtlanacaktır. Bu düğme Şekil 2.7’de görüldüğü gibidir. Şekil 2.7 Kısıtlı Dönüş Düğmesi 35 Bir karakter oluşturulduğunda mutlaka bu düğmelerin kontrol edilip ka rakteriniz için gerekli olan seçeneğin tanımlanmış olduğuna emin olma nız gerekmektedir. Seçilen özelliğin düğmesinin rengi mavi olarak belirginleştirilecektir. 2.3.4 Yer Yön Paneli Yukarıda tanıttığımız düğmelerin yanında bulunan bu panelde, karakte rinizin ismini değiştirmek için kullanılan bir aktif isim alanı yer alır. Ka rakterinizin ismini değiştirmek için Şekil 2.8’de görüldüğü gibi Karak t e r i yazan bölüme vermek istediğiniz ismi yazmanız yeterlidir. Şekil 2.8 Yer Yön Paneli Bu panelde, X ve Y yazan kısım karakterin sahnedeki yerini X ve Y koor dinatları ile belirlemektedir. X ve Y kısmı aktif olmadığı için seçip yazarak değiştiremezsiniz. Bu koordinat bilgilerini değiştirmek için, karakterinizin sahnedeki yerini işaretçi (Mouse) yardımıyla sürükleyip bırakmanız ge rekir. Diğer bir yöntem ise, karakterin sahne yerini kod kullanarak tanım lamaktır. Panelin en sağ alt köşesinde bulunan Yön kısmı, karakterinizin sahnede hangi yöne baktığını bildirir. Karakterinizin yönünü belirlemek için, panelin sonunda, karakterin resminin üzerinde bulunan mavi çubu ğu işaretçiniz yardımıyla döndürmeniz yeterli olacaktır. 2.3.5 Kodlama Paneli Alt Kısmı Kodlama paneli, Şekil 2.9’dan da görüldüğü gibi, üç temel kısımdan olu şur. Bu panelin, ortadaki Kostümler bölümüne kodlama panelindeki Kostümler sekmesine tıklayarak ulaşabilirsiniz. 36 Yazılar Kostümler Şekii 2.9 Kodlama Paneli Ait Kısmı Bu panelde, karakterlerinizi silebilir ya da karakterinize eklemeler yapa rak ona tamamen yeni bir görünüm kazandırabilirsiniz. Ayrıca, hazırla yacağınız kodlarla, karakterin kostümleri arasında geçişler yapabilirsi niz. 2.3.6 Düzenle Düğmesi Karakterinizin hali hazırda olan görüntüsünü, isterseniz onun kopyasını oluşturarak ya da onun üzerinde değişiklikler yapabileceğiniz Düzenle komutunu kullanarak değiştirebilirsiniz. Düzenle düğmesini tıkladığınız da Şekil 2.10’da görülen panel açılacaktır. ©üSSSGîlS' ItŞtmSİ ■:''.':'::;:.ggja________ 1 1 1 sİ i H i 'm L_ Şekil 2.10 Düzenle Paneli 2.3.7 Sesler Paneli Şekil 2.11’de görülen S esler paneline yine kodlama panelindeki ses le r sekmesinden ulaşabilirsiniz. Bu bölümde karaktere program içeri sinde atayacağınız sesleri tanımlayabilir, yeni sesler kaydederek bu sesleri de karaktere atayabilirsiniz. Şekil 2.11 Sesler Paneli Seslerin kullanımı yine kod grupları arasında bulunan s e s le r sekme sinden ulaşabileceğimiz kodların kullanımıyla gerçekleşir. Seslerin kul lanımına ilerideki bölümlerde devam edeceğiz. Ses kaydetmek için yeni ses imlecinin yanındaki K ayıt düğmesine tıkladığınızda, açılan ses kaydedici tanımlamasını kullanabilirsiniz. Şekil 2.9’da en soldaki kısım 38 da bulunan Y a z ıla r bölümü beklide en fazla kullanacağımız paneldir. Bu bölüm, seçilen kodların aktif olması için kullanacağınız bölümdür. Kodların aktif olabilmesi için seçtiğiniz kodları sürükleyip bu bölüme bı rakmanız yeterlidir. Şekil 2.9’da en soldaki kısımda resimde sürüklenip bırakılmış örnek kod ve kod blokları görülmektedir. 2.4 Sahne ve Karakterler Ana ekranın sol üst tarafında bulunan bu bölüm, sahne olarak adlandırı lır. Karakterlerinizin ve olaylarınızın gerçekleşeceği yer burasıdır. Sahne x ve y koordinatlarıyla kontrol edilir. İşaretçinizi sahne üzerinde gezdir diğinizde, Şekil 2.12’de resmi bulunan sahne bölümünün sağ alt köşe sinde x ve y koordinatlarının değiştiğini görebilirsiniz. Şekil 2.12 Sahne ve Karakterler Bu özellik, sahne üzerindeki noktaları saptamak için kullanılan ve prog ramları yazarken sıkça başvuracağımız bir kaynaktır. Sahnenin sağ üst köşesinde bulunan yeşil bayrak ü programı çalış tırmanızı sağlar. Yeşil bayrak tıklandığında, tık la n d ığ ın d a kod bloğu tetiklenir ve bu blok için yazılmış olan komutlar çalışmaya başlar, t ı k landığında ile ilgili detayları kitabımızın ilerleyen kısımlarında görece 39 ğiz. Yine sahnenin sağ üst kısmında bulunan kırmızı yuvarlak mm ise, çalıştırmış olduğunuz bir programı durdurmanızı sağlar. Sahnenin altında yer alan K a ra k te rle r paneli hazırladığımız, ya da hali hazırda Scratch ile beraber gelen karakterlerin bulunduğu kütüpha neden seçtiğimiz, karakterlerin bulunduğu paneldir (Şekil 2.13). Şekil 2.13 Karakter Paneli Burada kodları veya özellikleri atayacağımız karakteri üzerine tıklayarak seçeriz. Ayrıca panelin üst tarafında Yeni karakter ibaresinin yanında bulunan üç seçenek sırasıyla, yeni bir karakter tanımlamaya, kütüpha neden bir karakter seçmeye ya da herhangi bir resmi karakter olarak bilgisayarınızdan seçmeye ve son olarak Scratch programının rastgele bir karakteri sizin için seçmesine yarayan düğmelerdir. Öte yandan, Şe kil 2.13’de görüldüğü gibi, bu panelin sol tarafında bulunan Sahne bölü mü de, tıpkı karakterler gibi seçilebilir ve bu bölümde yeni kodlar tanım lanabilir. Aynı zamanda karakterlerdeki gibi, kostümler yerine arka plan lar bölümü bulunmaktadır. Tıpkı kostümlerde yaptığımız gibi, arka plan lar hazırlanabilir ya da bir resim buraya arka plan olarak aktarılabilir ve bunlar üzerinde düzenle seçeneğiyle değişiklikler yapılabilir. Şekil 40 2.14’de, Şekil 2.13’deki panelden sahne imlecine tıkladığımızda açılan kod paneli görülmektedir. Bu kod panelinde yapılabilecek işlemler, yu karıda bahsettiğimiz karakterler için yapılabilen işlemlerden farklı değil dir. Şekil 2.14 Sahne Kod Paneli Şekil 2.15 Sahne Düzenle Şekil 2.15’deki panel, Şekil 2.14’deki Arka p la n la r sekmesindeki Dü zenle seçeneğiyle açılan penceredir. Bu sekmeyle kendinize yeni arka planlar hazırlayabilirsiniz. 41 2.5 Araç Çubuğu Bu bölümde son olarak ana ekranın en üst kısmında bulunan Araç Çu buğu ve özelliklerini anlatacağız. 2.5.1 Dil Seçeneği Düğmesi Dil seçeneği için gerekli ayarlamaları Şekil 2.16’da görülen D il Seçe neği düğmesini kullanarak yapabilirsiniz. Şekii 2.16 Dil Seçeneği Düğmesi Türkçe desteği bulunan Scratch yazılımının, Türkçe olmayan tek kısmı yardım içeriğidir. Ancak bu kitap sayesinde Scratch ile ilgili bu eksikliğin tamamlanmış olacağına inanıyoruz. 2.5.2 Çalışmayı Sakla Düğmesi Şekil 2.17’de görülen düğme, çalışmanın kayıt edilmesi için kullanılır. Bu düğmeyi kullanarak çalışmanızı' bilgisayarınızda bulunan Scratch klasörüne ön ayarlı olarak kayıt etmeniz mümkün olur. E Şekil 2.17 Çalışmayı Sakla Düğmesi İsterseniz çalışmanızı bilgisayarınızda saklayacağınız dizini, kendiniz seçebilir ya da istediğiniz yeni bir dizin içinde çalışmanızı kayıt edebilirsiniz. 42 2.5.3 Çalışmayı Scratch Sitesine Yükle Çalışmanızı, Scratch’ın sitesinde Dünya’daki diğer Scratch kullanıcıları ile paylaşmak için, Şekil 2.18’de görülen Scratch S itesin e Yükle düğmesini kullanabilirsiniz. Şekil 2.18 Çalışmayı Scratch Sitesine Yükle Bu düğmeye bastığınızda açılacak olan pencerede size sorulan bilgileri girip projenizi yüklediğinizde, projeniz Scratch’ın sitesinden erişilebilir bir hale gelir. 2.5.4 Dosya Sekmesi Düğmelerin hemen yanında bulunan Dosya sekmesinden: • Yeni bir proje başlatabilir • Projenizi kayıt edebilir • Daha önceki kayıtlı projelerinizi açabilir • Projelerinizi F a rk lı edebilir • Hali hazırda çalıştığınız bir projeye, başka projeleri "P ro je y i îçe Aktar” seçeneğiyle aktarabilir • Ya da tek bir karakteri bir projeden diğerine “K arakteri Dışa Ak t a r ” seçeneğiyle aktarabilirsiniz Kaydet seçeneği ile farklı bir konuma kayıt 2.5.5 Proje Notları “Proje N o tla rı” kısmında sizden sonra projeyi geliştirecek veya ekle me yapacaklara kodlar hakkında bilgi verebilir ve çeşitli açıklamaları ya pabilirsiniz. 43 2.5.6 Düzenle Sekmesi Düzenle sekmesinin altında bulunan seçenek ile aşağıdaki işlemleri yapmak mümkündür: • Herhangi bir şekilde hazırladığınız bir kodu veya karakteri ya da iş lemi silmiş iseniz, “S ilm eyi Geri A l” seçeneği ile silinmiş olan ob jeleri geri getirebilirsiniz. Unutmamak gerekir ki, bu işlem sadece bir adım içindir, sadece en son silinen nesne geri çağrılabilir. • “Adım Adım Çalışmayı B a ş la tın ” seçeneği ile, kod bloklarınızın nasıl çalıştığını adım adım görebilirsiniz. Bu işlem, hazırladığınız kodların çalışması sırasında hangi adımda olduğunuzu ve karakterin ne zaman hangi koddan etkilendiğini kolayca görebilmenizi sağlar. • “B ir Adım lık Kurulum” seçeneği size adım adım kodlama sıra sında kod bloklarının devreye girdiğinde renk değiştirme olayını, di ğer bir deyişle kodlarınızın çalışma hızını, bir defaya mahsus ayar layabilmenize olanak sağlamaktadır. • “S e s le ri S ık ı ş t ır ın ” seçeneği, kullandığınız seslerin kalitelerini değiştirmenize olanak tanır. Unutmayın ki, büyük projelerde kullan dığınız karakterler ve özellikleri arttıkça bu tip sıkıştırmalara ihtiyaç duyacaksınız. Böylece, resim dosyalarınızın boyutlarını küçültebilir ve programlarınızın daha hızlı çalışmasını sağlayabilirsiniz. • “Resim leri S ık ı ş t ı r ı n ” seçeneği size, tıpkı seslerdeki gibi, kul landığınız resimlerin kalitelerini ayarlamanıza olanak verir. • “Motor B lo k la rı Göster” seçeneği LEGO robotlarla [3] çalışırken kullanılan kodları gruplanmış kod panellerinde gösterip gizlemeye yarar. Sadece LEGO robotlarla çalışılırken kullanılan bu seçenek, LEGO robotların motorlarına sinyal göndermek için tasarlanmıştır. 2.5.7 Paylaşın Sekmesi Paylaşın sekmesinin altında “Bu P ro je y i Paylaşın” seçeneği ile projenizi Scratch sayfasında paylaşabilirsiniz. Aynı panelden, “Scratch Ana Sayfasına G it” seçeneği ile, Scratch web sitesine bağlanabilirsi niz. 44 2.5.8 Yardım Sekmesi Yardım sekmesinin altındaki, “Yardım Ekranı” ile, Scratch’ın yardım menüsüne ulaşabilir, problemlerinize çözümler bulabilir ve kodların nasıl çalıştığıyla ilgili örneklere ulaşabilirsiniz. “Yardım” seçeneğiyle doğrudan kodlarla ilgili bilgiye ulaşabilirsiniz. “Scracth hakkında” seçeneği ile Scratch lisans hakkı ve yapımcı kuruluş ile ilgili bilgilere ulaşabilirsiniz. 2.5.9 Karakter Çoğaltma Düğmesi Sahnenizdeki karakterleri zahmetsizce çoğalmak için Şekil 2.19’da gö rülen düğmeyi kullanabilirsiniz. Bu şekilde çoğaltılan karakterin tüm özellikleri orijinal olanla aynı olur. Şekil 2.19 Karakter Çoğaltma Diğer bir deyişle, karaktere daha önceden atanmış olan kodlar var ise, onlar da bu şekilde çoğaltılacaktır. Karakterleri çoğaltmak için düğme basılmış durumdayken karakterin üzerine tıklamanız yeterlidir. 2.5.10 Karakter Silme Düğmesi Oluşturmuş olduğunuz bir karakteri silmek istediğinizde, Şekil 2.20’de görülen düğmeyi kullanabilirsiniz. r a Şekil 2.20 Karakter Silme Bu düğme silmek istediğiniz karakterden kolayca kurtulmanızı sağla maktadır. Düğme basılı iken karaktere tıklarsanız karakter silinecektir. 45 2.5.11 Karakter Büyütme Düğmesi Şekil 2.21’de görülen düğme, karakter büyütme düğmesidir.. Bu düğme, karakterinizin boyutlarının büyütülmesi için kullanılmaktadır. Şekil 2.21 Karakter Büyütme Düğmesi Düğmeye bastıktan sonra karakterin üzerine tıklamanız karakterin bü yümesi için yeterlidir. 2.5.12 Karakter Küçültme Düğmesi Şekil 2.22’de görülen düğme, karakter küçültme düğmesidir. Bu düğme ile karakterinizin boyutlarının küçültülmesini sağlayabilirsiniz. Şekil 2.22 Karakter Küçültme Düğmesi Düğme basılmış durumdayken karaktere tıklamanız, karakteri küçült mek için yeterli olacaktır. 2.5.13 Sahne Boyutunun Ayarlanması Şekil 2.23’de görülen ve araç çubuğumuzun en sağında bulunan imleç ler, sahne boyutunuzu ayarlamanızı sağlar. Şekil 2.23 Sahne Boyutunun Ayarlanması Çalışma için projelerinizi tasarlarken en ideal boyut en küçük olandır. Yazdığınız kod bloklarını denerken de, en büyük ya da orta seçeneği seçmeniz hataları tespit etmede size kolaylık sağlayacaktır. 46 '^ A lıştırm alar 1. Aşağıdakilerden hangisi kalem ve kontrol grubuna ait renkdir? a) ■ 2. Ana ekranda seçilen karakterin dönüş yeteneğini tamamen kısıtla b) m c) mı d) m yan düğme aşağıdakilerden hangisidir? a) KH b)1 3 c) İ Ü d) E 3. Karakterlere atamak istediğimiz kayıtlı sesleri oluşturmak için, aşa ğıdaki yollardan hangisini kullanmalıyız? a) Karakter seçimi/sesler paneli/içe aktar b) Karakter seçimi/Kodlama paneli/Yazılar sekmesi/sesini çalın kodu c) Sesler sekmesi/Kayıt d) Karakter seçimi/Kodlar paneli/Sesler sekmesi/Kayıt 4. Aşağıdaki düğmelerden hangisi düzenleyiciyi açmadan karakterimi- zin boyutlarını sahne içerisinde küçültebilir? b) Ü L c) 31 a) M 5. Scratch ana ekranında yazılar bölümü.......... ... yarar. a) Kodlarımızı oluşturmaya b) Yazı yazmaya c) Yardım alamaya d) Kodların yazılarını yazmaya d) Ifi B€LLH 3 3.1 Giriş Kitabımızın bundan sonraki bölümlerinde, Scratch komutlarının kullanı mı ve bu komutlar ile yazılmış örneklerin açıklamalarını bulacaksınız. Anlatılan kod ile verilen örnekleri uyguladığınızda, hem verilen kodu iyi anlayabilir, hem de kod bloğu içindeki ilişkileri daha iyi kavrayabilirsiniz. Bildiğiniz gibi Scratch daha çok oyun tasarlamak için kullanılsa da, Scratch ile bir hesap makinesi gibi farklı uygulamalar ya da eğitsel ben zetim ler (simulation) geliştirmek de mümkündür. Ancak daha çok ka rakterlerin hareket ettiği, birbirleriyle iletişim kurdukları ve genel olarak bir hedef belirten oyunlar üzerine çalışacağımız için beklide kod grupları arasından en çok kullanacağımız grup, k o n tro l grubu ve h areket grubudur. Bu nedenle öncelikle k o n tro l grubundan başlamak üzere, daha sonra h areket grubuyla devam ederek bu yapıları anlamaya çalı şacağız. K o n tro l grubuna ait kodlara Kod P a n e li’nden ulaşılabilir. Panelden Kontrol isimli düğmeye (button) basmanız durumunda kod panelinde bu gruba ait kodlar belirecektir. Bu komutlar arasından ilk ola rak tık la n d ığ ın d a komutunu birlikte inceleyelim. 3.2 Tıklandığında Şekil 3.1’de görülen tık la n d ığ ın d a simgesini, programınızı başlatan bir başlangıç düğmesi olarak algılayabilirsiniz. Şekil 3.1 Tıklandığında Kod Grubu Yani biten projeniz bir kullanıcı tarafından çalıştırıldığında bu komutu vermiş olur. Bir başka deyişle, kullanıcı programınızı açar açmaz baş lamasını istediğiniz bir kod bloğu var ise, programınızın başlangıçta 50 yapması gereken olayları burada tanımlamanız gerekir. Örneğin yazdı ğınız program kullanıcı tarafından çalıştırıldığında, karakterin kullanıcıyı “Merhaba!” konuşma balonu ile karşılaması için, tık la n d ığ ın d a kod bloğunu Şekil 3.2’deki gibi kodlayabiliriz. Şekil 3.2 Tıklandığında Kod Grubu Örnek Kod Bu durumda, kullanıcı bu programı çalıştırdığında Şekil 3.3’de görüldü ğü gibi bir karşılama mesajı verilecektir. M e rh a b a ) Şekil 3.3 Tıklandığında Kod Grubu Örneği £ □ Bunu C Dili ile Nasıl Yaparım? C programlama dili ile benzer bir şekilde kullanıcı ekranında “Merhaba Dünya” mesajını yazdırabilmek için aşağıdaki program kodunu yazma nız ve çalıştırmanız gerekir. #include <stdio.h> int main (void) { printf("Merhaba Dünya"); return(0); > Yukarıdaki program çalıştırıldığında bilgisayarınızın ekranında “Merha ba Dünya” [1: sa. 16] kelimelerinin aşağıdaki gibi yazıldığını göreceksınız. M C programlama dili fonksiyonel bir dildir. D i yapısı büyük oranda fonksi yonların etkin olarak kullanımı temelleri üzerine kurulmuştur. Bir C prog ramının içinde daha önceden tanımlanmış olan fonksiyonları kapsayan kütüphaneler içinden ya da doğrudan programlayıcı tarafından belli işle ri gerçekleştirebilmek için hazırlanmış olan bir çok fonksiyon kullanılır. Ancak bu fonksiyonlar içinde olmazsa olmaz olan fonksiyon main() fonksiyonudur. Bir C programı çalışmaya başladığında ilk olarak main() fonksiyonu ile tanımlanmış olan komutlar çalışır. Sonrasında gerekli olan durumlara göre diğer fonksiyonlar çağrılarak kullanılır. Bir başka deyişle, Scratch yapısında tanımlanmış olan tıkla n d ığ ın d a komutu, C programlama dilindeki main() fonksiyonuna karşılık gelir. 3.2.1 Tıklandığında ve Değişkenler Tıklandığında bir değişkenin değerini değiştiren kodu Şekil 3.4’de görül düğü gibi yazabiliriz. Burada sol taraftaki çoklu seçim kutusu, tanımladı 52 ğınız değişkenleri seçmek, sağ taraftaki aktif bölge ise seçtiğiniz değiş kene değer atamak içindir. Şekil 3.4 Tıklandığında Değişkene Değer Ata Tıklandığında bir değişkenin son değerini sahnede gösterebilmek için, Şekil 3.5’de görüldüğü gibi bir tanımlama yazabiliriz. Şekil 3.5 Tıklandığında Değişken Değerini Göster Böylece kullanıcımız programımızı çalıştırdığında değişkenimize ait o anki ve daha sonraki değerler sahnede görülecektir. Kullanıcının prog ramımızı çalıştırdığında belirttiğimiz değişkeni sahnede gizlemek için Şekil 3.6’daki gibi bir tanımlama yapmak gereklidir. Şekil 3.6 Tıklandığında Değişkeni Gizle Şimdi, tık la n d ığ ın d a tanımlamasının listeler ile kullanımını anlayabil mek için Şekil 3.7’deki örneği inceleyelim. Bu örneğimizde tanımladığı mız g ir iş cümlemizi listemize ekleyecek olan kodumuz, kullanıcımız programı çalıştırdığında aktif olacaktır. Burada önemli olan diğer bir ko nu ise, kodumuzda bulunan çoklu seçim kutusunun listeler arasında ge çiş yapmak için kullanılabileceğidir. 53 Şekil 3.7 Tıklandığında Listeye Değer Ekle Eğer birden fazla listeniz varsa, değerinizi girmek istediğiniz listeyi bu seçim kutusundan seçerek tanımlayabilirsiniz. tıkla n d ığın d a I S » 'in ‘sini silin Şekil 3.8 Tıklandığında Listeden Değer Sil Şekil 3.8’deki örneğimizde verilen program parçacığı, kullanıcı programı çalıştırdığında aktif hale gelecektir. Böylece can listesindeki 1. sıradaki değişken silinir. Bu program parçası, can listesindeki ilk değeri sildikten sonra, listede daha sonra gelen değeri ilk sıraya otomatik olarak taşıya caktır. Tıklandığında tanımlaması ile listelerin kullanımını daha iyi anla yabilmek için Şekil 3.9’daki programı birlikte inceleyelim. Şekil 3.9 Tıklandığında Listeye Sıralı Değer Ekle Bu program çalıştırıldığında, kodumuzun sol tarafındaki aktif bölümde bulunan nesne kelimesi can listesinin 1. sırasına yerleştirilecektir. Eğer listemizde başka değerler bulunuyor ise, daha önceki değerler birer sıra otomatik olarak aşağı kaydırılacaktır. 54 Şekil 3.10 Tıklandığında Listeden Değer Değiştir Şekil 3.10’daki örneğimizde programın çalıştırılmasıyla aktif olacak kod parçacığımız, sol taraftaki seçilmiş olan 1. sıradaki, can liste değişkeni ne ait olan değeri nesne kelimesiyle değiştirecektir. Bu işlemden sonra, can listesindeki değişimden önceki değer tamamen kaybolacak ve yeri ne nesne kelimesi gelecektir. 3.2.2 Tıklandığında ve Operatörler Program çalıştırıldığında karakterimizin 20 sayısının 3’e bölümünden kalan sayıyı konuşma balonu içerisinde gösterebilmesi için, Şekil 3.11 ’deki gibi bir tanımlama yapabiliriz. Şekil 3.11 Tıklandığında ve mod Operatörü Böylece, mod operatörü, 20 sayısının 3’e bölümünden kalan sayıyı bul mamızı sağlar. Bu operatör ile bir sayının çift sayı mı yoksa tek sayı mı olduğunu belirlemek, bir sayının basamak değerlerini bulabilmek gibi bir çok işlem kolaylıkla gerçekleştirilebilir. ca Bunu C Dili ile Nasıl Yaparım? C programlama dilinde modülüs işlemi, % operatörü [1: sa. 42] kullanıla rak gerçekleştirilmektedir. Şimdi, 20 sayısının 3’e bölümünden kalanı bulma işlemini yapan ve sonucu ekranda gösteren C programını yaza lım. #include <stdio.h> in t main (void) { p rin tf("% d ", 20%3); getchan(); re tu n n (0); } Yukarıdaki program çalıştırıldığında bilgisayarınızın ekranında 20 sayı sının 3’e bölümünden kalan sayı olan 2 değeri aşağıdaki gibi gösterile cektir. Yuvarlama matematiksel işlemi için de benzer bir kodu Scratch ile Şekil 3.12’deki gibi yazabiliriz. Şekil 3.12 Tıklandığında ve yuvarlayın Operatörü Bu kod parçacığımızın içerisine yazdığımız 2.5 sayısını karakterimiz program çalıştırıldığında 3 olarak konuşma balonu içerisinde iletecektir. lOOİBunu C Dili ile Nasıl Yaparım? C programlama dilinde yuvarlama işlemi round() fonksiyonu [1] kullanı larak gerçekleştirilmektedir. Şimdi, 2.5 sayısının bu fonksiyon kullanıla rak yuvarlanmış halini ekranda gösteren bir C programını yazalım. 56 #include <stdio.h> #include <math.h> int main (void) { double x = 2 .5 ; x m nound(x); p rin tf(" % f" , x ); g etc h a r(); re tu rn (0 ); > Yukarıdaki programda öncelikle 2.5 değerinin saklanması amacıyla bir x değişkeni tanımlanmıştır. Daha sonra bu değişkenin değeri matematik kütüphanesinde tanımlı olan round() fonksiyonu yardımıyla yuvarlan mış ve p r i n t f ( ) fonksiyonu ile x değişkeninin son değeri ekranda gös terilmiştir. Bu program çalıştırıldığında bilgisayarınızın ekranında 2.5 sayısının yuvarlanmış hali aşağıdaki gibi gösterilecektir. Bu değeri tam sayı olarak göstermek isterseniz, diğer bir tamsayı değişkenine ataya rak ekranda gösterebilirsiniz. C:\Docum ents Scratch ile operatörleri programdaki ihtiyaçlara göre değişik şekillerde kullanmak mümkündür. Şekil 3.13’de verilen örneği inceleyerek bu iş lemlerin nasıl kullanıldığını daha iyi anlamaya çalışalım. t ı k l a n d ı ğ ı n d a 1 11 a d ım g id in . t ık la n d ığ ın d a J| can - Q jJ k o n u m u n a g id in t ık la n d ığ ın d a £ D a d ım g id in i konumuna gidin Şekil 3.13 Tıklandığında ve Matematiksel Operatörler 57 Bu örnekte, hareket grubuna bağlanmış olan işlem operatörlerimiz, toplama işleminde gideceğimiz adım sayısını 10+10 olarak belirtir. Yani karakter 20 adım gidecektir. Çıkartma operatörümüzde x konumu sabit olarak belirtilmişken y konumu can değişkeninin sahip olduğu değer den 10 birim eksik olarak tanımlanmıştır. Bölme işleminde ise can de ğişkenimizin 10’a bölümünden elde edilecek değer kadar yol alacak ka rakterimiz, bu hareketi bölme operatörümüz sayesinde yapmaktadır. Son olarak çarpma işlemimizde karakterimizin y konumu can değişke nimizin karesi ile belirtilmektedir. 3.3 Tuşu basıldığında tuşu basıldığında kod grubunun simgesi Şekil 3.14’de görüldüğü gibidir. Bu kod, karakterin veya bir olayın başlaması için gereken komu tun boşluk tuşuna basılması olduğunu işaret eder. s b o ş lu k *?. t u ş u b a s ı ld ı ğ ı n d a ' s», c*- a lıl !!!!g§ ıstı h Şekil 3.14 Tuşuna Basıldığında Kod Grubu Böylece kullanıcı boşluk tuşuna bastığında, olay ya da karakter, bu ko dun altındaki komutları yerine getirmeye başlar. Şekil 3.15’de gösterilen örnekte “boşluk” tuşu seçilmişse de, burada programcı sayılar, yön tuş ları, harfler gibi seçeneklerle kodu kendisine göre değiştirebilir. Yani “boşluk” yazan yerdeki açılır listeden “2” tuşunu seçersek, buraya ya zacağımız kod bloğu kullanıcının “2” tuşuna basmasıyla aktif hale gele cektir. Örneğin, kullanıcı programı çalıştırdıktan sonra, boşluk tuşuna bastığında “Merhaba N asılsın?” mesajının verilmesi için, Şekil 3.15’de görüldüğü gibi bir tanımlama yapabiliriz. 58 Şekil 3.15 Boşuk Tuşu Kod Grubu ö rn e k Kodu Bu durumda kullanıcı klavyesindeki “boşluk” tuşuna bastığında sahne deki karakter “Merhaba N a s ıls ın ? ” konuşma balonuyla Şekil 3.16’daki gibi kullanıcıya soru soracaktır. M erhaba nasılsın? i Şekil 3.16 Boşuk Tuşu Kod Grubu Örneği 3.4 Karakter Tıklandığında Bu kontrol grubu kodu Şekil 3.17’de görülen biçimde kullanılır. Bu kod lar, en sık kullanılan kontrol kodlarından biri olacaktır. K a r a k te r i tık la n d ığ ın d a Şekil 3.17 Karakter Tıklandığında Kod Grubu Bu kod kullanıcının karakteri tıklamasıyla aktif hale gelir. Bu tanımlama nın altında başka kodlar varsa, onların da başlatılması sağlanır. Örneğin kullanıcının karaktere tıklamasıyla “B in g o !!” mesajının verilmesi için, bu kod bloğunu Şekil 3.18’deki gibi tanımlayabiliriz. K a r a lit e r l paklandığında Şekil 3.18 Karakter Tıklandığında Kod Grubu Örnek Kod Bu durumda, kullanıcının karaktere tıklamasıyla aktif hale gelen kod grubuna bağlı konuşma balonu çalışır ve karakterin konuşma balonun da Şekil 3.19’daki gibi “Bingo ! ! ” mesajı verilir. ; Bingo!! I Şekil 3.19 Karakter Tıklandığında Kod Grubu Örneği 3.5 Saniye Bekleyin Bu kontrol grubu Şekil 3.20’de görülen biçimde kullanılır. Bu kod grubu nun içeriğini oluşturan kod bloklarında, kullandığınız kodların birbirleri arasındaki geçişlerde zaman farkı oluşturmanızı sağlar. Şekil 3.20 Saniye Bekleyin Kod Grubu Yani eğer iki kod arasında istediğiniz kadar bir süre beklemenin sağ lanmasını istiyorsanız, bu koda ihtiyacınız vardır. Örneğin, kullanıcının k a r a k t e r l’e tıkladığında k a r a k te r lin önce “Merhaba” konuşma balo nunu göstermesini ve 1 saniye bekledikten sonra diğer konuşma balo- 60 nunu aktif hale getirerek “Bingo” demesini sağlamak için Şekil 3.21’de görüldüğü gibi bir kod bloğunu hazırlamamız gerekir. Şekil 3.21 Saniye Bekleyin Kod Grubu Örnek Kodu Bu koda sahip programımız çalıştığında Şekil 3.22’de görüldüğü gibi karakterimizin konuşma balonunda “Merhaba” kelimesi gösterildikten 1 saniye sonra karakterimizin konuşma balonunda “Bingo” yazısı görül mektedir. Bingo M erhab a! » 1 saniye sonra » Şekil 3.22 Saniye Bekleyin Kod Grubu Örneği Eğer biz iki konuşma balonu kodunun arasındaki “1 saniye b e k le y in ” komutuyla “1” yerine “60” yazsaydık, kullanıcı karaktere tıkladığında k a r a k t e r i önce “Merhaba” deyip, 60 saniye bekledikten sonra “Bingo” diyecekti. 3.6 Sürekli S ü r e k li kontrol kod grubu, Şekil 3.23’de görülen biçimde kullanılır. Bu kontrol kodu belkide kullanırken en fazla zorlanacağınız kontrol kodu dur. 61 Şekil 3.23 Sürekli Kod Grubu Bu kod bloğu, içerisine yerleştirdiğiniz komutları sonsuz bir döngüde tekrar, tekrar çalıştıracaktır. Örneğin Şekil 3.24’de, S ü r e k li kodunun içine bir önceki örneğimizde kullandığımız kod grubunu yerleştirelim ve geçişleri daha iyi görebilmemiz için “Bingo” yazdığımız konuşma balonu kodunun altına da “0 ,5 ” saniyelik bir bekleme süresi koyalım. Şekil 3.24 Sürekli Kod Grubu Örnek Kodu Bu durumda kullanıcı programı çalıştırdığında ve k a r a k t e r l’e tıklandı ğında k a r a k te r i önce “Merhaba” konuşma balonunu ardından “Bingo” konuşma balonunu gösterecektir. | Merhaba! f f Bingo j | Merhaba! Şekil 3.25 Sürekli Kod Grubu Örneği 62 [ ^ n9° Bu programı durdurmadığınız sürece bu durum, Şekil 3.25’deki gibi tek rarlayacaktır. O sİB un u C Dili ile Nasıl Yaparım? C programlama dili ile belli bir işin sürekli olarak yapılmasını sağlamak için döngü komutları [1: sa. 118-166] kullanılarak bir döngü yapısını kurmak gerekir. Döngü yapısı içinde çeşitli C döngü komutları ile sürekli benzer işlerin gerçekleştirilmesi sağlanır. Örneğin yukarıda yapılan işe benzer bir yapıyı C dilinde while komutunu [1: sa. 123-135] kullanarak aşağıdaki gibi gerçekleştirebiliriz. Burada birkaç saniye beklemek yerine kullanıcının enter tuşuna basması ile program sürekli olarak belirtilen işi tekrarlar. #include <stdio.h> in t main (vo id ) { w hile (1 ){ printf("M erhaba Dünya"); g e tc h a r(); p rin tf(" B in g o " ); g e tc h a r(); > r e tu rn (0 ); } Bu programı çalıştırdığınızda aşağıda görüldüğü gibi, kullanıcının her enter tuşuna basması ile sürekli olarak ekranda “Merhaba Dünya” ve “Bingo” yazıları görülecektir. Bu programın sonlandırılması ancak programın kapatılması ile mümkün olur. Çünkü program sürekli olarak bu belirlenen işi tekrarlamak üzere kodlanmıştır. Kullanıcı programımızı çalıştırdığında değişken değerinin sürekli olarak 1 birim aratırılması için Şekil 3.26’daki gibi bir tanımlama yapmak mümkündür. Şekil 3.26 Değişken Değerini Değiştir Bu tür bir tanımlama genellikle bir zamanlayıcı yapmak için kullanılır. Program çalıştığında aktif olan bu kod, programımızın akış hızıyla Sü r e k l i kodunun her tekrarında 1 birim arttığı için program durdurulana kadar aktif olur. Bu durum bize program çalışmaya başladığı andan iti baren, durduruluncaya kadar geçen zaman ile ilgili sayısal bir değer ve rir. Burada dikkat etmemiz gereken durum, sürekli değişimin hesaplan dığı bu değerin, bizim zaman kavramımız üzerinden değil, programımı zın çalışma hızıyla bağıntılı olarak hesaplanmış olmasıdır. 3.6.1 Sürekli ve Operatörler S ü r e k li ve o p e r a tö r le r tanımlamalarını daha iyi anlayabilmek için Şekil 3.27’deki örneği birlikte inceleyelim. Bu örnekte, program çalıştı ğında sürekli çalışacak olan kod grubumuzda kod bloğumuz her tekra rında 1 saniye bekleyerek hareket edecektir. Hareket kodumuza bağla dığımız can değişkenin değer,i s ü r e k li kodunun içerisinde en altta bu lunan can değişkeninin değeri, “1 i l e y a p ın ” tanımlaması ile belirlenmektedir. 64 10 a ra s ı ra s tg e le seçin Şekil 3.27 Sürekli ve Rastgele Değer Seçin Bu değişimin nasıl gerçekleştiğini daha iyi anlayabilmek için, ra s tg e le kodunu bir değişkene atadık. Değişken değerini sahnede görerek, ra s tg e le komutunun nasıl çalıştığını inceleyebilirsiniz. Şekil 3.28’de verilen örnekte ise (<) küçüktür operatörü yardımıyla, sürekli olarak iki değişken arasındaki büyüklük kontrolü yapılmaktadır. Şekil 3.28 Sürekli ve Koşul İfadesi (<) Böylece karakterimizin, x konumu ve y konumu sürekli olarak sınan maktadır. Eğer karakterimizin x konumu y konumundan küçük ise, ka rakterimiz x konumunun y konumundan büyük veya eşit olduğu konuma kadar ilerleyecek ve ardından duracaktır. Aşağıdaki büyüklük karşılaş tırma örneğinde de, yine aynı şekilde karakterimizin x ve y konumları sınamaktadır. Şekil 3.29 Sürekli ve Koşul İfadesi {>) Burada dikkat etmemiz gereken nokta, bu kod bloğumuzun bir önceki örneğimizin tam tersi bir sınama yapmasıdır. Karakterimizin bu sefer, x konumu y konumundan büyük ise kodumuz aktif olacak ve bu koşul sağlandığı sürece aktif olması durumu devam edecektir. Şekil 3.30’da verilen örnekte ise, konumlarımızın eşit olma durumuna bakılmaktadır. Eğer karakterimizin x konumu y konumuna eşit ise, kodumuz aktif hale gelecektir. Şekil 3.30 Sürekli ve Koşul İfadesi (=) Şekil 3.31’de verilen kodumuz operatörler arasında iki veya daha fazla koşul kontrolü yapar. Şekil 3.31 Sürekli ve B irleşik Koşul İfadesi (ve) 66 Bu örnekte karakterimizin “merhaba” demesi için iki koşullu bir tanımla ma yapılmıştır. İlk şartımız karakterimizin x konumunun y konumundan küçük olması, ikinci koşulumuz ise y konumunun 10’a eşit olma duru mudur. Bu iki koşul “ve” mantıksal operatörü ile birleştirilmiştir. Bu du rumda kodumuzun aktif hale geçebilmesi için, bu iki koşulun da aynı anda sağlanması gerekmektedir. Benzer bir kontrolün “veya” mantıksal operatörü ile yapıldığı Şekil 3.32’deki örneği inceleyelim. | andığında B p '; ■BHBBHBBBBBBşHHHpBBBHI^^ fikon um u I 1 < y k o n u m u l v e y a f y kon um u = BEJ ise sürekli söyleyin Şekil 3.32 Sürekli ve Koşul İfadesi (veya) Bir önceki örneğimizden yola çıkarsak, burada dikkat edilmesi gereken nokta, bu örnekte tanımlanmış olan iki koşuldan herhangi birinin doğru olması durumunda, kod bloğumuzun aktif olacağıdır. Genellikle dene yimli programlayıcıların bile sıklıkla yaptığı bir hata “ve” ve “veya” man tıksal operatörlerinin birbirleri ile karıştırılmasıdır. Bu nedenle birden faz la koşul ile çalışırken uygun olan operatörün kullanılması son derece önemlidir, “d e ğ il” mantıksal operatörü ise, doğru olan bir sonucu yan lış, yanlış olan bir sonucu doğru yaparak değilini alır. Bu operatör “ve” ve “veya” kodlarıyla da kullanılabilir, d e ğ il mantıksal operatörünün na sıl çalıştığını anlayabilmek için Şekil 3.33’deki örneği birlikte inceleyelim. 67 Şekil 3.33 Sürekli ve Koşul İfadesi (değil) Bu örneğimiz “veya“ mantıksal operatörü ile, iki ayrı koşulu sınamakta dır. Bunlardan ilki x konumunun y konumundan küçük olması, İkincisi ise karakterimizin yönünün 90’a eşit olmaması durumudur. Yani kod bloğumuz x konumu y konumundan küçük değilse, veya yönümüz 90’a eşit değilse çalışacaktır. C İB u n u C Dili ile Nasıl Yaparım? C programlama dili ile benzer işi yapan bir programı aşağıdaki gibi ya zabiliriz. C programı ile karakter hareketlerini takip edebilmek daha zor olacağından biz konum ve yön değerlerini her seferinde kullanıcıdan okutarak programımızı yazdık. #include <stdio.h> in t main (vo id ) { in t x ,y,yo n ; printf("Xj y , yon değerlerini giriniz: " ); scanf ("%d%d%d"J &x, &y, &yon); while ((x < y) || (!(y o n == 9 0 ) ) ) { printf("\nMerhabaI\n"); printf("x, y , yon değerlerini giriniz: "); scanf (,,%d%d%d"J &x, &y} &yon); } / / end o f while re tu r n (0 ); } / / end o f program 68 Bu programı çalıştırdığınızda kullanıcıya x, y ve yon değerleri sorulur. Kullanıcının girdiği değerlere göre, while döngüsünün koşulu olarak tanımlanmış olan, ((x < y) II ( i (yon == 9 0 ) » koşul ifadesi doğru olduğu sürece, ekranda Merhaba! mesajı gösterilir ve tekrar x, y ve yon değişkenlerinin değerleri kullanıcıya sorulur. Alı nan bu değerler while döngüsünün koşulunu yanlış yaptığında ise program sonlanır. Bu şekilde program çalıştırıldığında sadece en son girilen değerler while koşulunu yanlış yapacağından, bu aşamadan sonra while döngüsü sonlanır. ^c, y , yon dege r 1er in i g i r i n i z : 40 30 60 Herhaba! x , y , yon d e ğ e r l e r i n i g i r i n i z : 30 40 90 Merhaba? x , y , yon d e ğ e r l e r i n i g i r i n i z : 30 40 50 Merhaba? x , y , yon d e ğ e r le r in i g i r i n i z : 40 30 50 Merhaba? y , yon d e ğ e r l e r i n i g i r i n i z : 40 30 90 3.7 Defa Tekrarlayın Bu komut, tıpkı bir önceki “s ü re k li” komutu gibi çalışır ve Şekil 3.34’deki biçimde kullanılır. Ancak bu komutun döngü içindeki çalışma sayısını siz bir öncekinden farklı olarak istediğiniz gibi belirleyebilirsiniz. İD defa, tekrarlayanı Şekil 3.34 Defa Tekrarlayın Kod Grubu 69 Örneğin, Şekil 3.33’deki örneğimizde kullandığımız konuşma balonları ve bekleme sürelerini bu kez “10 defa te k r a rla y ın ” kodunun içerisi ne Şekil 3.35’deki gibi yerleştirelim. Şekil 3.35 Defa Tekrarlayın Kod Grubu Örnek Kodu Bu durumda, önceki örneğimizden farklı olarak kullanıcı k a ra k te r l’e tıkladığında karakterimiz Şekil 3.36’daki gibi konuşma balonlarını “10” kez tekrarlayıp duracaktır. Eğer kod bloğunda “10” yazan yere “20” yazsaydık, k a ra k te ri tıklandığında, konuşma balonlarını 20 kez tekrarla yacaktı. f Merhaba! S 0,5 sn. sonra f Bingo i 0,5 sn. sonra I Merhaba! ' 0,5 sn. sonra Bingo 0,5 sn. sonra Şekil 3.36 Defa Tekrarlayın Kod Grubu Örneği 70 0=3Bunu C Dili ile Nasıl Yaparım? Benzer bir kodu C programlama dili ile yazabilmek için, döngü komutla rından birisini kullanabiliriz. Şimdi for döngü komutunu [1: sa. 136142] kullanarak benzer işi yapan bir C programı yazalım. #include <stdio.h> int main (void) { int i; for (i=0; i<10; i++) { printf("Merhaba Dünya"); getchar(); printf("Bingo"); getchar(); } //for döngüsü sonu return(0); } Bu kodu yazarak çalıştırdığınızda, aşağıdaki gibi her Enter tuşuna bas tığınızda devam eden bir ekran görüntüsü elde edilir. Bu programın bir önceki while döngüsü ile yazılan programdan farkı, döngü içindeki ko mutlar 10 kez tekrarlandıktan sonra programın kendiliğinden sonlanmasıdır. C:\Documents and Settings\Admin\W> Merhaba Bingo Merhaba Bingo Merhaba Bingo Merhaba B in g o . Dünya Dünya Dünya Dünya 3.7.1 Defa tekrarlayın ve Operatörler defa te k ra rla y ın tanımlaması ile operatörlerin kullanımlarını daha iyi anlayabilmek için Şekil 3.37’deki örneği birlikte inceleyelim. Bu örneği mizde kod bloğumuz programımız çalıştığında aktif olacaktır. Kod blo 71 ğumuzda “3 defa tek ra rlayın * komutuyla tekrarlanacak olan kodla rımız, “Adın ne?” soru koduyla kullanıcıdan bir değer alacak ve onu “black” adlı listeye ekleyecektir. tık la n d ığ ın d a @ defa tekrarlayın B EEB3GE0 s o r v e î® ■ V a n ,t e b la ck b e k le i e k le y in s ö y le y i n : ’î B E S C S E R •I0 b la c k d a h il o l caniye bekleyin Şekil 3.37 Defa Tekrarlayın ve Listeye Ekle Daha sonra eklediğimiz “söyleyin” komutu içerisine yerleştirdiğimiz “d ahil o l” kodu, önce ilk aktif bölgesine yazdığımız mesajı daha sonra black listesine eklediğimiz değerleri konuşma balonunda gösterecektir. lO^Bunu C Dili ile Nasıl Yaparım? Benzer işi yapan bir C programını aşağıdaki gibi yazabiliriz. #include <stdio.h> in t main (void) { char ad[3 ][3 0 ]; in t i , j ; fo r (i= 0; i<3; i++) { p r in t f ("\nAdin ne? " ); g e ts (a d [i])j p r in tf( "VnListemiz: "); fo r (j= 0 ; j< = i; j++) printf("% s ", a d [j] ); } / / end o f fo r i retu rn (0 ); } / / end of program 72 Bu programdaki yapıları daha iyi anlayabilmek için C programlama di lindeki diziler ve dizgiler [1: sa. 226-293] konularını inceleyebilirsiniz. Bu programı çalıştırdığınızda, aşağıdaki gibi bir ekran görüntüsü oluşa caktır. Adin ne? N erg iz L i s t e n i z : N erg iz Adin ne? Ere i l L i s t e n i z :: N e rg iz E r e i l Adin ne? C a g ilta y L i s t e n i z :■ N erg iz E r e i l C a g ilt a y _ “defa te k ra rla y ın ” tanımlamasının operatörlerle kullanımını daha iyi anlayabilmek için Şekil 3.38’deki örneği birlikte inceleyelim. Şekil 3.38 Defa Tekrarlayın ve Listeye Elemanını Göster Bu örnekteki ilk kodumuz olan değişkene değer atama kodu can değiş keninin değerini 1 yapmaktadır. Daha sonra defa te k ra rla y ın kodu nun defa değeri “dünya” kelimesinin uzunluğu kadar (harf sayısı kadar) tekrar sağlamaktadır. Tekrar kodunun içerisine yerleştirdiğimiz “Söyle” koduna eklediğimiz kod parçacığımız “dünya” kelimesinin can değişke nin değerine göre belirtilen sıradaki harfini işaret etmektedir. Bu kod bloğumuz “dünya” kelimesinin harflerini son kod parçacığımızın can de 73 ğişkenini her tekrarda 1 birim değiştirdiği için, sırayla dünya kelimesinin harflerini söylemektedir. m Bunu C Dili ile Nasıl Yaparım? C programlama dili ile benzer işi yapan bir programı aşağıdaki gibi ya zabiliriz. Bu programdaki yapıları daha iyi anlayabilmek için C program lama dilindeki diziler ve dizgiler [1: sa. 226-293] konularını inceleyebi lirsiniz. #include <stdio,h> #include <stning.h> int main (void) î char can[] = "Dünya"; int sayaç = 1; for (sayac=0; sayac< strlen(can); sayac++) printf("%c", can[sayac]); return(0); } / / end of program 3.7.2 Defa tekrarlayın ve dizgi uzunluğu defa te k ra rla y ın yapısının diğer tanımlamalar ile birlikte kullanımını daha iyi anlayabilmek için Şekil 3.39’da verilen örneği inceleyelim. Bu örnekte, listemiz içerisinde bulunan değerleri, konuşma balonu ile gös terecek bir karakterin kod bloğu bulunmaktadır. Öncelikle, sayaç olarak tanımladığımız değişkene program çalıştırıldığında 1 değeri atanır. Da ha sonra “defa te k ra rla y ın ” komutuna iliştirdiğimiz l i s t e uzunluğu değerimiz, döngümüzü liste uzunluğu kadar çalıştırır, defa te k r a r la yın komutu içerisine yerleştirdiğimiz konuşma balonu kodumuz, sayaç değişkenimizin değerini liste sıra sayısı olarak alacak olan, can listesinin içerisindeki değerleri, o anki sayaç değişkenimize ait olan değeri baz alarak kullanıcıya gösterecektir. 74 Q d efa te kra rla yın G0EE53 sorve 1 B y a n ıt 'e bekle can__|ekleyin ş,;, ' İ 1'i'1'. sayaç j "i 0 yapın E can i"ki uzun lu ğu B 1 S öyle: I saya; sa yaç 'in can !Q e fa te k ra ria y ır H |:p arçası sü re : 9 saniye k a d a r değiştirin Şekil 3.39 Defa Tekrarlayın ve Dizgi Uzunluğu Yani sayaç değişkenimizin program çalıştırıldığında sahip olduğu 1 de ğeri, listemizde bulunan 1. sıradaki değerin konuşma balonu içerisinde gösterilmesine neden olacaktır. Daha sonra değişken değerimizi bir artı rarak “defa te k ra rla y ın ” kodumuzun içerisinde bulunan “söyleyin” komutuna dönecektir. Bu kez 1 artırıldığından dolayı değişen sayaç de ğişkenimiz 2. sırada bulunan liste değerimizi konuşma balonunda kulla nıcıya gösterecektir. Bu döngü liste uzunluğumuz kadar tekrarlanarak son bulacaktır. O sİBunu C Dili ile Nasıl Yaparım? C programlama dili ile benzer işi yapan bir programı aşağıdaki gibi ya zabiliriz. Bu programdaki yapıları daha iyi anlayabilmek için C program lama dilindeki diziler ve dizgiler [1: sa. 226-293] konularını inceleyebi lirsiniz. ____ #include <stdio.h> #include <string.h> int main (void) { char can[3][30]; int sayaç; for (sayac=0; sayaç < 3; sayac++) { printf("\n Adin ne? "); gets(can[sayac]); > for (sayaç = 0; sayaç < 3; sayac++) puts(can[sayac]); return(0); }// end of program Bu programı çalıştırdığınında aşağıdaki gibi bir ekran görüntüsü oluşa caktır. 3.8 Yayınlayın yayınlayın komutu, üzerine yazdığınız mesajı tüm karakterlerin algıla yabileceği şekilde geniş bant olarak yayınlar. Şekil 3.40’daki gibi kullanı- 001 I y a y ı n la y ı n Şekil 3.40 Yayınlayın Kod Grubu 76 Yayınladığınız mesajın içeriği, kullanılan karakter ve diğer karakterlerde bulunan “alg ılad ığ ım d a” kodunun içeriğinde varsa, bu kodun altındaki kod bloğu aktif hale gelecektir. Yani bu kodun kullanımı yalnız olarak bir şey ifade etmez. Bir sonraki kısımda tanıtacağımız diğer yapılar ile bir likte kullanılır. Bu komut ile çalışan diğer komutun ismi yukarıda da be lirttiğimiz gibi “a lg ılad ığ ım d a” komutudur. 3.9 Algıladığımda alg ılad ığ ım da komutu y a y ın la y ın komutuyla birlikte çalışır. Aslında bu komut bir başlangıç komutudur. Yukarıda bahsettiğimiz y a y ın la y ın komutundan gelen mesajları algılayarak, eğer bünyesinde yayınlanan mesajı taşıyor ise, bu kod grubuna ait kodların aktif hale getirilmesini sağlar. Bu kod grubu Şekil 3.41’de görülen biçimde kullanılır. Şekil 3.41 Algıladığımda Kod Grubu Örneğin, iki karakterimiz olsun. Bu amaçla daha önce anlattığımız, ka rakter çoğaltma ya da yeni karakter seçme işlemlerini uygulayabilirsiz. İkinci karakterimizi de projemize ekledikten sonra, Şekil 3.42-a ve Şekil 3.42-b kod bloklarındaki k a ra k te r l’e ait kodları y a z ıla n kısmında oluşturalım. Daha sonra Şekil 3.42-c kod bloğunu 2. karakterin y a z ı la r kısmında oluşturalım. Bu şekilde hazırlayacağımız programı çalış tırdığımızda, karakterlerimiz sırasıyla birbirlerine sorular soracak ve ce vaplar vereceklerdir. Şimdi bu kodları daha detaylı olarak inceleyelim. Kullanıcımız karakt e r l ’e tıkladığında k a ra k te rlin Şekil 3.42-a kod bloğundaki ilk komu tu, 1 saniye beklemek olacaktır. Daha sonra bir alttaki komuta geçip di 77 ğer karakterlerin de duyabileceği “001” mesajını yollar. Ardından “Nere desin?” konuşma balonu komutu aktif hale gelecektir. Şekil 3.42-a Algıladığımda Kod Grubu Örnek Kodu Bu kısımdaki Şekil 3.42-b kodumuz “002” mesajını beklemektedir ve böyle bir mesajın gelmemesi durumunda çalışmayacaktır. Şekil 3.42-b Algıladığımda Kod Grubu Örnek Kodu Şimdi Şekil 3.42-c kod bloğumuzu inceleyelim. İlk parçanın (Şekil 3.42a) yolladığı “00i ” mesajını algılayan Şekil 3.42-c kod bloğumuz çalış maya başlar ve 1 saniye bekler. Daha sonra konuşma balonu aktif olur ve karakter2 “Buradayım" konuşma balonunu gösterir. Yine 1 saniye bekleyerek “002” mesajını yayınlayıp “Nerdesin?” konuşma balonunu aktif hale getirir ve görevini tamamlar. Bu noktadan sonra “002” mesajını bekleyen Şekil 3.42-b kod bloğu çalışmaya başlar ve “1 saniye bek le y in ” komutundan sonra “Bende buradayım ...” konuşma balonu devreye girer. 78 Şekil 3.42-c Algıladığımda Kod Grubu Örnek Kodu Bu program çalıştırıldığında, sahnedeki görüntüler soldan sağa sırasıyla Şekil 3.43’deki gibi gerçekleşecektir. Neredesin ? Buradayım! karakter 1 Karakter 2 (a) 1. Olay (b) i Sen neredesin 2. Olay j i Karakter 2 (c) 3. Olay Bende buradayım. V - -------- karakter 1 (d) 4. Olay Şekil 3.43 Algıladığımda Kod Grubu Örneği 3.10 İse sürekli Kontrol grubunun bir parçası olan ise s ü re k li kod grubu, daha önce tanıttığımız sürekli kodundan farklı olarak, bir koşula bağlı olarak kontrol grubuna ait komutların sürekli olarak çalıştırılmasını sağlar. Bu kod gru bu Şekil 3.44’deki biçimde kullanılır. Şekil 3.44 ise Sürekli Kod Grubu Bir başka deyişle, bu kodun içerisine yerleştirdiğiniz komutlar, bu kod bloğu için tanımlanan koşul sağlandığı anda, sürekli olarak çalışacaktır. Bu komutu kullanırken daha önce belirttiğimiz gibi bir koşul tanımını yapmamız gerekir. Belirleyeceğiniz bu koşulu “is e s ü re k li” yazan iba renin solundaki boşluğa yerleştirmeniz gerekmektedir. G ü l Bunu C Dili ite Nasıl Yaparım? “ise s ü re k li” işlemine benzer bir kodu C programlama dilinde, if [1: sa. 87-88] ve döngü komutlarından birisini kullanarak yazabiliriz. Şimdi aşağıdaki örnek programı inceleyelim. #include <stdio.h> int main (void) { if (getchar()) { while (1){ printf("Merhaba Dunya")j getchar(); printf("Bingo ") ; getchar(); } // while dongu sonu } // if komutu sonu return(0); 80 Bu C program çalıştırıldığında, öncelikle kullanıcının ekranda bir tuşa basmasını bekler, örneğin kullanıcı enter tuşuna bastığında sürekli ola rak çalışmak üzere tanımlanan w hile döngüsü böylece başlatılır. Bu noktadan sonra w hile döngüsü içinde tanımlanan komutlar sürekli ola rak devam eder. Bu noktada program sonsuz bir döngüye gireceğinden, ancak kullanıcının programı durdurması ile sonlanacaktır. Aksi durumda sürekli olarak döngü içinde tanımlanmış olan işler aşağıda görüldüğü gibi tekrarlanır. P y C:\Documents and Settin; leph aba Bingo 1erKaba Bingo 1erKaba Bingo lerK aba Dünya Dünya Dünya Dunya_ Şekil 3.45’den de görüldüğü gibi, koşul boşluğuna yerleştirilebilecek olan koşulların şekli kendine özeldir. can |, I3B !B i ç e r m e k t e d i r M o u s e b a s ılı? : ya k laşıyo r m u? boşluk tuşu basılı? iMiİS rengine y aklaşıyor m u 7 ; •' :'r -‘ ‘ ■.' •:i" *!feifc 1.1* Sensör düğmeye b a s ıld ıC l5* Jriv ren k • %'M ı m m " « B llM ,: ' renge y aklaşıyor mu? Şekil 3.45 Koşui Tanımları 81 Koşullar genellikle başlangıç seviyesinde çok basit oluşturulsa da, Scratch’i kullandıkça karmaşıklık seviyesi de gittikçe artacaktır. Şekil 3.46’da görüldüğü gibi çeşitli koşullar oluşturmak için gerekli olan farklı tanımlamalar bulunmaktadır. Şekil 3.46 Koşul Tanımlan Dikkat ederseniz bu tanımlamaların şekilleri kendine özgüdür. Bir başka deyişle, bu koşul cümleleri Şekil 3.44’de görülen koşul komutları içine yerleştirilebilecek şekildedir. Ayrıca renkleri onların hangi gruba ait ol duğunu belirtmektedir. İlerideki bölümlerde değişik kod gruplarına ait olan bu farklı koşul tanımlamalarını daha ayrıntılı olarak kullanacağız. GOİBunu C Dili ile Nasıl Yaparım? Koşul ifadesi [1: sa. 78-86] C dilinde de benzer şekilde tanımlanır. Bu amaçla && (ve), 11 (veya), I (değil), == (eşit), < (küçük), > (büyük) gibi ifadeleri C programlama dili için kullanabilirsiniz. Şimdi, “ise s ü re k li” kodunu anlatan bir koşul ifadesine sahip bir ör nek yapalım. Şekil 3.47’de “tık la n d ığ ın d a ” komutunun altına yerleş tirdiğimiz “Mouse b a s ılı? ” ibaresini içeren kodun hemen altında bulu nan “x ' i 10 d e ğ iş tir in ” kodu bulunmaktadır. Bu durumda Mouse’a 82 basılmış olması koşulu doğru olduğu süre boyunca x koordinatının 10 birim değitirilmesi sağlanacaktır. Bir başka deyişle, programı çalıştırdı ğınızda x koordinatının 10 birim değişmesini söylediğimiz karakter, bu kodu devreye sokmak için mouse’a tıklamanızı bekleyecektir. Şekil 3.47 Koşul Tanımları Örnek Kodu Bu örnekte dikkat etmeniz gereken “x 3i 10 d e ğ iş tir in ” komutu, sü reklilik kodu içerisinde bulunduğu için ve süreklilik “Mouse b a s ılı? ” komutunu beklemektedir. Bu nedenle, programı çalıştırdığınızda Mouse bir kere tıklandığında sürekliliği, sonsuz kere aktif edecektir. Bu durum ancak siz programı durdurduğunuzda sona erecektir. Eğer biz bu sürek lilik kodunu, belli bir sayıyla sınırlandırmak istersek, bir tekrar koduyla bu durumu kontrol edebiliriz. Bu durumda, gireceğimiz her tekrar sayı sından sonra mouse’a bir kere tıklanması gerekecekti. 3.11 Eğer ise Bu kontrol grubu komutu en sık kullanılan ve belli koşullarda yerine geti rilmesi gereken görevlerin tanımlanmasını sağlayan bir komuttur. Şekil 3.48’deki biçimde kullanılır. Belli bir şartın yerine getirilmiş olması duru munda bu kod bloğu ile tanımlanan komutlar aktif hale gelir. Bir önceki kısımda belirttiğimiz gibi, “Eğer . . . is e ” kelimelerinin arasındaki boş luğun şekli bir koşul ifadesini beklemektedir. Şekil 3.48 Eğer ise Kod Bloğu Bu kodda ve diğer koşullu kodlarda, koşulları bir ya da ardışık olarak birden fazla koşul ifadesi içerecek şekilde tanımlamak mümkündür. Ko şul ifadesi mantıksal olarak doğru ya da yanlış bir sonuç oluşturacak bir ifadedir. Örneğin Şekil 3.49’da verilen kod grubu aktif olmak için boşluk tuşuna basılmasını beklemektedir. | b o ş ltJg Q | tu ş u b a sıld ığ ın d a Eğer ■'!' x kon um u < y kon um u ;jjjl ise K x ‘i f £ > değiştirin Şekil 3.49 Eğer ise Kod Bioğu Örnek Kodu Kullanıcı boşluk tuşuna bastığında aktif olan “E ğ e r.. . is e ” kodu bağlı olduğu karakterin x ve y konumunu karşılaştırır. Karakterin x konumu y konumundan küçük ise karakterin yerini 10 birim değiştirir. Eğer karak terin x konumu y konumundan küçük değil ise karakter hareket etme yecektir. 0 3 Bunu C Dili ile Nasıl Yaparım? Scratch içindeki “Eğer is e ” yapısına benzer komutları C programlama dilinde i f komutunu kullanarak yazabiliriz. Bu komut, kendisi için tanım lanmış olan koşul ifadesi doğru olduğunda, kendisi için tanımlanmış olan komut ya da kod bloklarının aktif hale geçmesini sağlar. Şimdi 84 aşağıda verilen ve Scratch için tanımlanmış Eğer ise yapısına benzer şekilde çalışan C kodunu birlikte inceleyelim. #include <stdio.h> in t main (void) { in t x = 10, y = 200; p r in t f C ’X=%d, Y=%d\n"> x ,y ); i f (x < y) { x = x + 10; p r in t f ("X in değeri a r t i r i l d i : X=%d, Y=%d\n", x ,y ); } / / I f komutu sonu g etc h a r(); re tu rn (0 ); > Bu C programında öncelikle x ve y olmak üzere iki değişken (variable) [1: sa.31-33], tanımlanmış (defined)’t\r. Bu değişkenlerin ilk değerleri 10 ve 200 olarak atama komutları (assignment statement) [1: sa.3641] ile tanımlanmıştır. Daha sonra tanımlanan p r in t f ("X=%d, Y=%d\n", x ,y ); çıktı fonksiyonu [1: sa. 50-67] ise, x ve y değişkenle rinin son değerlerini ekranda gösterir. Program ilk çalıştırıldığında, x de ğişkeninin değeri y değişkeninin değerinden küçük olacağından, i f ko mutuna ait koşul ifadesi (x<y) doğru değerini alır ve i f komutu için ta nımlanmış diğer komutlar aktif hale geçer. Böylece değişkenlerin aldığı son değerler de ekranda gösterilerek program sonlanır. Bu program ça lıştırıldığında aşağıdaki gibi bir ekran çıktısı oluşur. Eğer ise yapısını iç-içe (nested) olacak şekilde de kullanmak müm kündür. Şekil 3.50 Birden Çok Eğer Koşulu örneğin Şekil 3.50’de verilen tanımlamaları inceleyelim. Bo program parçası aktif olduğunda, “ise s ü re k li” yapısı öncelikle çalışacaktır. Buna göre tim e değişkeninin aldığı değer kontrol edilir, time değişke nin değeri 100’den büyük olduğu durumda aktif olan kodumuz içerisine yerleştirdiğimiz, iç-içe Eğer kodları sayesinde alt sorguları çalıştırılır. Buradaki 3 sorgu döngüsü puan değişkenimizi kontrol eder. Eğer pua nımız 5 ise kullanıcının başarılı olduğunu söyleyen konuşma balonu ko dunu çalıştıran “E ğ e r.. . is e ” kodumuz aktif olur. İkinci sırada bulunan “E ğ e r ...is e ” kodu, kullanıcının kazandığı puanın 5’den küçük olduğu durumda çalışır ve içindeki “Başaramadınız” yazılı söyleyin komutu aktif hale getirir. Son olarak puanımızın 5’den yüksek olduğu durumda devreye girecek olan kodumuz kullanıcımıza “Çok iy i s i n i z ” mesajını konuşma balonu içerisinde iletir. 86 1 = 0 Bunu C Dili ile Nasıl Yaparım? Scratch içindeki “Eğer is e ” yapısının iç-içe kullanımının C programla ma dilinde uygulanmasını iç-içe if (nested if) komutunu kullanarak ya zabiliriz [1: sa. 94-99], Şimdi yukarda yazdığımız örneğe benzer işi ya pan C programını birlikte yazalım. int main (void) { int time = 111; int puan =2; while (time > 100) { if (puan == 5) printf ("Basardiniz\n"); if (puan < 5) printf ("Basaramadiniz\n"); if (puan > 5) printf ("Çok iyisiniz\n"); getchar(); return(0); } Şimdi bu programı iç-içe koşul ifadeleri [1: sa. 94-102] ile hem Scratch da hem de C programlama dili ile yeniden yazalım. int time =1 1 1' int puan v/hile (time > if (puan == 5) printf ("Basardinîzln"); else if (puan < 5) printf ( “Basaram adiniz\n"); else printf ("Çok iyısınizVn”); getcharO; retum(P); Şekil 3.51 İç-İçe Eğer Koşulu 87 Eğer is e yapısını daha iyi anlayabilmek için, Şekil 3.52’de verilen ör neği birlikte inceleyelim. Şekil 3.52 Eğer ve Söyleyin Bu program çalıştırıldığında, Eğer komutunda tanımlanan koşul, can listesindeki elemanların bravo değerini içerip içermediğini kontrol eder. Listemiz bravo değeri içeriyor ise Eğer komutu aktif hale gelir ve içeri sindeki söyleyin komutu ile karakterimiz “Bravo” konuşma balonunu kullanıcımıza iletir. 3.12 Eğer ise Başka Bu kod bloğu, “Eğer is e ” kontrol grubu kodundan farklı olarak koşullu olarak çalıştırmak istediğiniz kodu iki ayrı parça halinde tanımlamanızı sağlar. Şekil 3.53’de görüldüğü gibi, Eğer tanımlamasının altına yazılan kod bloğu, koşulun doğru olduğu durumda çalışır. Başka tanımlaması nın altına yazılan kod bloğu ise, koşulun yanlış olması durumunda çalı şır. Şekil 3.53 Eğer ise Başka Kod Bloğu 88 Örneğin Şekil 3.54’de verilen tanımlamalara göre, kullanıcı boşluk tuşu na bastığında, kodu bağladığımız karakterin x konumu y konumundan küçükse, karakterin x konumu 10 birim artırılacaktır. Şekil 3.54 Eğer ise Başka Kod Bloğu Örnek Kodu Eğer karakterin x konumu y konumundan küçük değil ise (y konumu x konumundan büyük ya da eşit ise) karakterin y konumu 10 birim artırıla caktır. Bu örnekte, boşluk tuşuna bastığınızda eğer karakterinizin ilk x konumu y konumundan küçük ise, kendini sürekli yenileyen bir döngü içinde x değeri değiştirilecektir. Q = l Bunu C Dili ile Nasıl Yapanm? Scratch içindeki “Eğer is e başka” yapısına benzer komutları C prog ramlama dilinde çift yönlü if komutu [1: sa. 89-91]’nu kullanarak ya zabiliriz. Bu komut, kendisi için tanımlanmış olan koşul ifadesi doğru olduğunda, kendisi için tanımlanmış olan komut ya da komutların aktif hale geçmesini sağlar. Ancak koşul ifadesinin sonucunun yanlış olması durumunda else ile belirtilmiş olan komut ya da komutların aktif hale geçmesi sağlanır. Şimdi aşağıda verilen ve Scratch için tanımlanmış Eğer ise başka yapısına benzer şekilde çalışan C kodunu birlikte in celeyelim. Bu C programında öncelikle x ve y olmak üzere iki değişken tanımlan mış ve bu değişkenlerin ilk değerleri 10 ve 200 olarak atanmıştır. Daha sonra tanımlanan p r in t f ("X=%d, Y=%d\n", x ,y ); çıktı fonksiyonu ise, x ve y değişkenlerinin son değerlerini ekranda gösterir. Program ilk çalıştırıldığında, x değişkeninin değeri y değişkeninin değerinden küçük olmayacağından, i f komutuna ait koşul ifadesi (x<y) yanlış değerini alır ve i f komutuna ait else ifadesi için tanımlanmış diğer komutlar aktif hale geçer. #include <stdio|h> in t main (void) { in t x İ 10, y = 2; p r in t f ("X=%d, Y=%d\n", x ,y ); i f (x < y) { x = x + 10; p r in t f ("X in değeri a r t i r i l d i : X=%d, Y=%d\n", X , y ) ; } else { y *= y + 10; p r in t f ("Y in değeri a r t i r i l d i : X=%d, Y=%d\n", x ,y ); > re tu rn (0 ); > Böylece y değişkeninin değeri artırılır ve değişkenlerin aldığı son değer ler de ekranda gösterilerek program sonlanır. Bu program çalıştırıldı ğında aşağıdaki gibi bir ekran çıktısı oluşur. ™ C:\Document5 and Settings\Admin\My Do K=İ0, V=2 pf in d e ğ e r i a r t i r i l d i : X=İ0, V=12 Eğer ise yapısının kullanımını daha iyi anlayabilmek için şimdi Şekil 3.55’de verilen örneği inceleyelim. 90 Şekil 3.55 Eğer ve Liste Bu örnek basit bir puan tabelası kod bloğudur. Burada büyük (>) opera törü kullanılarak bir sınama yapılmaktadır. Böylece puan değişkenine ait olan değerin, can listesinde bulunan herhangi bir değerden büyük olma sı durumunda, eğer kod parçacığımız içerisinde bulunan söyleyin ko dumuz çalıştırılacaktır. Böylece karakterimiz konuşma balonu içerisinde “Sen En İy i s in ” cümlesini gösterecektir. Bu kodumuzda dikkat etme miz gereken nokta, orjinal program dilinin İngilizce olması nedeniyle ya pılan bir tercüme problemidir. Kodumuzun soldaki çoklu seçim kutusun da bulunan, herhangi b i r i seçeneği (İngilizce “any”) bizim dilimize hiç olarak çevrilmiştir. 3.13 Olana Kadar Bekleyin Bu kontrol grubu kodu, altına yerleştirdiğiniz tüm kodları çalıştırmak için bir koşulun gerçekleşmesini beklemektedir. Daha önce yine kontrol gru buna ait olan “... Saniye Bekleyin” kodunu hatırlarsanız, bu “olana kadar bekleyin” komutu da aynı mantıkla çalışmaktadır. Ancak bura da saniye yerine kod bir olay ya da bir değişken nedeni mantıksal olarak doğru bir sonuç ile gerçekleşmesi koşulu sağlanıncaya kadar beklemek tedir. Bu kod grubu Şekil 3.56’da verilen biçimde kullanılır. Şimdi bu kod grubuna ait tanımlamaları daha iyi anlayabilmek için Şekil 3.57’de veri len örneği inceleyelim. Burada tanımlanan kod iki parçadan oluşmakta 91 dır. Bu kod grubundaki her parçasının ayrı bir görevi vardır. Ancak bu kod blokları birbirlerine bağlı durumdadır. Şekil 3.56 Olana Kadar Bekleyin Kod Bloğu Çünkü “olana kadar b ekleyin” komutunu içeren yapı da koşul içeren “olana kadar bekleyin” komutunu aktif hale getirecek olan koşul, “boşluk tuşu b as ıld ığ ın d a ” komutunu içeren yapıda gerçekleşecek tir. Şekil 3.57 Olana Kadar Bekleyin Kod Bloğu Örnek Kodu Kullanıcı programı çalıştırdığında devreye giren “ca n l= l olana kadar b ekleyin” koşulu, altındaki mor renkli “söyleyin” kodunu aktif hale ge tirmek için, koşulun gerçekleşmesini beklemektedir. Öte yandan, alttaki yapıda koşulu gerçekleştirecek olan canl’in l olma durumu, boşluk tu şuna basılmasını beklemektedir. Kullanıcı programı çalıştırıp boşluk tu şuna bastığında, önce “söyleyin” ibaresi devreye girecek ve kendin den sonra gelecek olan iki portakal renkli kodun çalışacağını haber ve 92 recektir. Portakal renkli kodlarda üstte bulunan “c a n lJi 0 yapın” kodu aslında, değişkenlerin kullanımında başlangıç işlemi olarak yapılan ola ğan bir işlemdir. Yani her değişken kullanılmadan önce bir ilk değer ataması ile tanımlanmalıdır (initialization). Böylece bu değişkenlerin de ğerleriyle ilgili olarak yapılan işlemlerde sorun yaşanması engellenmiş olur. İkinci portakal renkli olan değişken kodumuz, “c a n i'i 1 yapın” komutu, aslında bizim için koşulumuzu yerine getirecek olan komuttur, canl’in değeri 1 olduğunda, üst bloktaki kodun koşulu gerçekleşmiş olacaktır ve üst bloktaki söyleyin komutu çalışacaktır. Portakal renkli kodlar değişken kod grubuna ait olan kodlardır ve bu kodları siz tanım layarak kullanırsınız. 3.14 Olana Kadar Tekrarlayın “Olana kadar te k r a rla y ın ” kontrol kodu, belirttiğiniz koşul gerçekleşene kadar içerisine yerleştirdiğiniz komutları çalıştırır. Koşul gerçekleş tiğinde ise durur. Bu kod grubunun kullanım biçimi Şekil 3.58’deki gibi dir. Şekil 3.58 Olana Kadar Tekrarlayın Kod Bloğu Bu kod grubunun kullanım biçimini daha iyi anlayabilmek için Şekil 3.59’da verilen örneği inceleyelim. Bu örnek kod, iki bloktan oluşmakta dır. Birincisi boşluk tuşu ile çalışan kodumuzdur. Diğeri ise program ça lıştığında devreye girer, tık la n d ığ ın d a komutuyla aktif hale gelen ko mutlar, bu kez koşulu yerine getirecek olan komutlardır. Burada yine değişkenimizi “0” olarak tanımlayacak olan ilk değişken kodumuz daha sonra 5 saniye bekleyip değişkenimize “1” değerini atar. Bir başka de93 V yişle, alttaki koşul için hazırlanmış olan kod bloğumuz üstte hazırladığı mız kod bloğunun 5 saniye süresince çalışmasına izin vermektedir. “canlJi 1 yap“ kodu aktif olduğunda, cani değişkeni 1 değerini alır ve üstteki kod bloğumuzun koşul ifadesi bozulur. Şekil 3.59 Olana Kadar Tekrarlayın Kod Bloğu Örnek Kodu Üstteki kod bloğumuz cani değişkeni 1 olduğunda içerisindeki tanımla maları tekrar etmeyi durduracaktır. 3.15 Programı Durdurun Kontrol grubundaki son iki kodumuz, Şekil 3.60’da da görüldüğü gibi “durdurun” kodlarıdır. “Programı durdurun” kodu sadece bağlı oldu ğu kod bloğunu durdururken “Tümünü durdurun”, karaktere atanmış olan tüm kod bloklarını durdurmaktadır. Bu^kf kodun anlatımının bera ber olmasının sebebi farkı daha iyi anlatabilmektir. 94 Şekil 3.60 Programı Durdurun Kod Bloğu Bu kod bloklarını daha iyi anlayabilmek için Şekil 3.61’de verilen örneği inceleyelim. Buradaki örneği karakterimize uyguladığınızda, programın çalıştırılmasıyla birlikte soldaki ilk kod bloğundan dolayı karakterin x ko ordinatını 10 birim ileri ve 1 saniye bekledikten sonra 10 birim geri hare ket ettiğini görürüz. Şekii 3.61 Programı Durdurun Kod Bloğu Örnek Kod-1 Şekil 3.62’de verilen kod bloğu karaktere 10 kere tekrarlamak koşuluyla önce “a”, 1 saniye bekledikten sonra “b” s ö y le y in komutunu çalıştırır. Burada dikkat etmemiz gereken durum, Şekil 3.62’deki kod, 20 tekrar yapıp duracakken, Şekil 3.62’deki kodun en altındaki “Tümünü durdu run” komutu nedeniyle 10 tekrardan sonra duracak olmasıdır. Şekil 3.62 Tümünü Durdurun Kod Bloğu Örnek Kod-2 Ancak eğer Şekil 3.62’deki kod bloğundan “Tümünü durdurun” ibaresini çıkartırsak, her iki kodun da benzer şekilde çalıştığını ve karakterin sola sağa hareketinin 20 tekrardan sonra durduğunu, ancak Şekil 3.62’deki kodun durmadan işleme devam ettiğini göreceğiz. ^ A lış tırm a la r 1. Aşağıdaki kod parçalarından hangisi kullanıcı programı başlattığın da, altına eklenmiş kod parçalarını çalıştırır? a) c) 2, Aşağıdakilerden hangisi kontrol grubudaki kodların görevlerinden değildir? a) Karakterin rengini değiştirmek b) Karakterler için tasarladığımız program parçalarının aktif olmalarını sağlamak c) Bütün karakterlerin duyacağı bir mesaj iletmek d) Karakterlere bağlanmış kod parçacıklarının çalışmalarını koşullara bağlamak 3. Aşağıdaki bilgilerden hangisi doğrudur? a) Tümünü durdurun kod parçacığı karaktere ait tüm kodları durdurur b) Programı durdurun kod parçacığı tüm programı durdurur c) Yayınladığımda kod parçacığı radyo frekanslarını yakalar d) Algıladığımda kod parçacığının yayınlayın kod\ parçacığına ihtiyacı vardır 4. Aşağıdaki kod parçalarından hangisi bize sonsuz tekrar fırsatı su nar? 5. Aşağıdaki kod bloklarından hangisi sürekli olarak koşullu bir sorgu içerir? 6. Aşağıdaki kontrol kod parçalarından hangisi bir olay gerçekleşene kadar, kod parçalarımızın çalışmasını bekletir? 7. Bir koşul altında bir olay gerçekleştirmek için istenen koşul gerçek leşmediği durumda, olayı çalıştıran kod, aşağıdakilerden hangisidir? 9. Aşağıdaki kod parçacıklarımızdan hangisi belli bir koşul gerçek- leşene kadar bize tekrar olanağı sağlar? 10. Aşağıdaki kod parçacıklarından hangisi bize klavye üzerindeki tuşları kullanarak kod aktivitasyonu sağlar? 11. Aşağıdakilerden hangi kod bloğu bizim için programımızın çalışma hızında ilerleyen bir zaman ayarlayıcı görevi yapar? 100 B €L l)/U 4 Derece Dönün Adım Yönüne Dönün Gidin Hareket Komutları E Gidin Doğru Dönün Konumuna Gidin X ve Y Değiştirin Sn.de Konumuna Gidin Hareket Komutları XY Konumu/ Yön Kenarda ise Zıplatın 4.1 Giriş Hareket grubuna ait komutlar, karakterimize istediğimiz hareketleri yaptırabilmemizi sağlayan Şekil 4.1’de görüldüğü gibi bir dizi kod grubunu içermektedir. Bu kısımda bu kod gruplarını örneklerle inceleyeceğiz. £ £ } a d ım gidin £ 5 ( V d e re ce d ön ün € B 1'; d e re ce d ö n ü n 1 yö n ü n e d ö n ü n | i I d o ğ ru d ö n ü n x: Q y: Q ,-,v; *1 k o n u m u n a g id in J "e gidin O sa n iye d e x : Q y: Q konum una i x - . c s değ iştirin x ‘i 0 ya p ın y*y« m d eğ iştirin y y> u i yaPfn K e n a rd a ise p zıplatın | x konum u m ykonum u Şekil 4.1 Hareket Grubu Kodları 102 4.2 Adım gidin Hareket grubuna ait ilk kodumuz, karakterimizi koordinat sisteminde, x ekseninde istenilen birim değeri kadar ilerletir. Örneğin, Şekil 4.2’de gö rülen tanımlama ile, karakterin soldan sağa doğru 50 birim ilerlemesi sağlanır. f|g| a d ım gidin . teiiıliIlİlIBlİlılIıl Şekil 4.2 Hareket Grubu Kod Bloğu Burada kaç adım gidilmesi gerektiği ile ilgili ölçütü programlayıcı belirler. "... adım g id in ” ibaresindeki boş alana karakterin ne kadar ilerletilmesi istenirse ona göre bir değer yazılmalıdır. Hareket grubu kodlarında pozi tif değerler eğer hareket doğrusal ise soldan sağa, negatif değerler ise sağdan sola doğru ilerlemeyi ifade eder. Bu nedenle özellikle hareket doğrusal ise, yön ayarlanırken mutlaka belirlenen değerin pozitif ya da negatif değerlerden hangisini alması gerektiğine dikkat edilmelidir. Ör neğin “-5 0 ” değeri, karakterin sağdan sola doğru hareket etmesini sağ lar. Şimdi bu durumu daha iyi anlayabilmek için Şekil 4.3’deki örneği inceleyelim. Şekil 4.3 Hareket Grubu Kod Bloğu Örnek Kodu Bu örnek basit olarak, kullanıcı programı çalıştırdığında karakterimizin soldan sağa doğru 50 birim hareket etmesini sağlar. Burada dikkat et memiz gereken durum, hareketin soldan sağa doğru, görsel bir akış şeklinde değil, yer değiştirme şeklinde olacağıdır. Başka bir deyişle, ka- 103 rakterimiz komutu aldığında, bulunduğu yerden kaybolup gitmesini iste diğiniz yerde tekrar belirecektir. 4.3 Derece dönün Hareket grubuna ait bu kodlar karaktere dönüş yaptırmayı sağlar. Bu tanımlamalar, Şekil 4.4’de verilen biçimde kullanılırlar. Şekil 4.4 Derece Dönün Kod Bloğu Ancak şunu tekrar hatırlamamızda yarar vardır ki, buradaki dönüşler 2 boyuttadır (2B). Karakter bu kodlarla belirtilen duruma göre, saat yö nünde hareket edecektir. Başka bir deyişle, bu kodların atandığı karak ter, belirtilen yöne ve dereceye göre yer değiştirecektir. Ancak buradaki hareket akış şeklinde değil, yer değiştirme şeklinde olacaktır. Bu duru mu daha iyi anlayabilmek için Şekil 4.5’de verilen örneği inceleyelim. Şekil 4.5 Derece Dönün Kod Bloğu Örnek Kodu-1 Bu örnekte kullanıcı programı başlattığında, karakter kodun üzerindeki yöne doğru, saat yönünde 15 derecelik yer değiştirme şeklinde bir dö nüş yapacaktır. 104 Şekil 4.6 Derece Dönün Kod Bloğu Örnek Kodu-2 Eğer dönüşün akıcı, yani hareket şeklinde olmasını isterseniz, Şekil 4.6’daki gibi örneğin 60 derecelik bir dönüş için, kontrol grubu kodların dan defa te k r a r la y ın ” kodunun altına “derece dönün” kodunu ekleyip açı olarak da 1 derece seçebilirsiniz. Bu durumda karakterimiz akıcı bir şekilde animasyon mantığı ile dönme işlemini gerçekleştirecek tir. 4.4 Yönüne dönün “Yönüne dönün” kod bloğu da tıpkı “derece dönün” kod bloğu gibi çalı şır ve benzer bir işi gerçekleştirir. Ancak burada dönüş açısı programlayıcı tarafından seçimli olarak tanımlanır. Bu kod bloğunun kullanım bi çimi Şekil 4.7’de görüldüğü biçimdedir. Şekil 4.7 Yönüne Dönün Kod Bloğu Bu tanımlamaları yaparken, karakterin dönmesi istenilen açının çoklu seçim kutusundan seçilmesi gerekir. Seçim kutusunda 90, -90, 0, 180 derecelik seçenekler mevcuttur. Şimdi bu kod bloğunun kullanımını daha iyi anlayabilmek için Şekil 4.8’de verilen örneği birlikte inceleyelim. Şekil 4.8 Yönüne Dönün Kod Bloğu Örnek Kodu Bu örnekte, “yönüne dönün” ve “derece dönün” kodları arasındaki farkı daha iyi anlayabiliriz. Bu kod bloklarını karakterimize atadığımızda, sol daki kod “tık la n d ığ ın d a ” seçeneği ile aktif olacağı için, programın ça lıştırılmasıyla karakterimiz kendi etrafında dönmeye başlayacaktır. An cak sağ taraftaki “boşluk tuşuna b a s ıld ığ ın d a ” komutuyla aktif olan kod bloğunda ise, karakterimiz sürekli olarak 90 derece yönüne doğru dönecektir. Ancak sürekli olarak aynı yöne dönen bir karakter hareketsiz gibi bir görüntü verecektir. Bu farkı anlamanın en kolay yolu, kodları oluşturup karakterinizin hareketlerini incelemektir. 4.5 Doğru dönün Bu hareket kodumuz karakterimizin sahnedeki diğer karakterlerden her hangi birine ya da işaretçiye doğru dönmesini sağlar. Bu kod bloğunun kullanım biçimi Şekil 4.9’daki gibidir. Çoklu Seçim Kutusu Şekil 4.9 Doğru Dönün Kod Bloğu Kodumuzun çoklu seçim kutusunu açtığınızda eğer sahnede tek bir ka rakter var ise “Mouse i ş a r e t ç i s i ” ibaresini göreceksiniz. Eğer sahne- 106 nizde başka bir ya da birçok karakter olsaydı, bu karakterlerin isimleri “çoklu seçim kutusu”nda görülebilecekti. Şekil 4.10’da verilen örnek te, sol tarafta bulunan kodlarımız, sahnede eğer başka karakter varsa çoklu seçim kutusuna bu durumun nasıl yansıdığını göstermektedir. Şekil 4.10 Doğru Dönün Kod Bloğu Örnek Kodu Sağ taraftaki kodumuz ise kullanıcının programı çalıştırmasıyla aktif olan bir kod bloğudur ve gördüğünüz gibi sürekli bir döngünün içerisin dedir. Bu kod bloğumuz karakterimizin sürekli olarak dönmesini sağla maktadır. 4.6 Konumuna gidin Bu hareket komutu, karakterimizin yerini değiştirmek için kullanılır. Ge nellikle bu komut, karakterlerin sahnede başlangıç yerlerini belirlemek için kullanılır. Bu komutun kullanım biçimi Şekil 4.11’de görüldüğü gibi dir. Şekil 4.11 Konumuna Gidin Kod Bioğu Kodumuzun x ve y ibarelerinin sağ tarafındaki boşluklara, karakterimizin gideceği noktaları sahne koordinat sisteminde x ve y ekseni cinsinden yazmamız gerekmektedir. Örneğin (-1 3 2 ,5 6 ). İlk başta, kodun üzerin de bulunan (0 ,0 ) noktası sahnemizin tam orta noktasını gösterir. Şimdi 107 bu kod bloğunun kullanımını daha iyi anlayabilmek için Şekil 4.12’de verilen örneği birlikte inceleyelim. Şekil 4.12 Konumuna Gidin Kod Bloğu Örnek Kodu Bu örnekte kullanıcımız programı başlattığında, kod bloğumuz çalışma ya başlamaktadır. İlk komutumuz “g iz le y in ”, karakteri sahnede gizler. “1 saniye b e k le y in ” komutu onu 1 saniye boyunca gizli tutar. Daha sonra konum bildiren kodumuz devreye girer ve karakterimiz sahnenin neresinde olursa olsun ( 0 , 0 ) noktasına geri dönmesini sağlar. Böylece son komutumuz ile karakterimiz sahnede gözükür. Aslında tipik bir baş langıç kod bloğu olan bu örneği ileride projelerinizde sıklıkla kullanacak sınız. Karakterimizin gitmesini istediğimiz noktanın can değişkenimiz tarafından belirlenmesi için ise, Şekil 4.13’deki gibi bir tanımlama yap mak mümkündür. Şekil 4.13 Konumuna Gidin Kod Bloğu Örnek Kodu Böylece o anda can değişkenimizin değeri ne ise, karakterimiz x ve y konumu olarak değişkenimizin değerini alacak ve program çalıştığında o konuma gidecektir. 108 4.7 E gidin Bu kod bloğu, karakterin sahne içerisindeki diğer karakterlere ya da işa retçiye doğru gitmesini sağlar. Bu kod grubunun kullanım biçimi Şekil 4.14’deki gibidir. 'e g id in Şekii 4.14 E Gidin Kod Bloğu Eğer sahnede sadece kod atadığınız karakteriniz var ise çoklu seçim kutusunda sadece “mouse iş a r e t ç is i” seçeneğini göreceksiniz. Bir önceki çoklu seçim kutusu örneğinde olduğu gibi, siz sahnenize karak ter ekledikçe bu karakterlerin isimleri çoklu seçim kutumuza yansıyacak tır. Şekil 4.15’de bu kod bloğunun kullanımı bir örnekle anlatılmaktadır. Şekil 4.15 E Gidin Kod Bloğu Örnek Kodu Bu örneğimiz, kullanıcımızın projemizi başlatmasıyla aktif olur. S ü re k li komutumuz nedeniyle “Mouse iş a re tç is in e g id in ” komutu sonsuz bir döngüyle tekrarlanır. Sonuç olarak karakterimiz programımız çalıştığı sürece Mouse işaretçimizi takip edecektir. 4.8 Saniyede Konumuna Gidin Bu hareket grubu, karakterimizin yerini akıcı bir şekilde değiştirmemizi sağlar. Bu kod grubunun kullanım biçimi Şekil 4.16’daki gibidir. Şekil 4.16 Saniyede Konumuna Gidin Kod Bloğu Belirlediğimiz süre boyunca, karakterimizin bulunduğu noktadan belirtti ğimiz koordinatlara gitmesini sağlayan bu kod, oyun tasarlarken belkide en çok kullanacağımız kodlardan biri olacaktır. Burada dikkat etmemiz gereken kısım, çok uzun ya da çok kısa belirlenmiş sürelerin karakteri mizin hareketini akıcılıktan uzaklaştıracağıdır. Yer değişimi yaparken, karakterin sahnede değiştireceği yerin uzunluğu ve zaman göz önünde bulundurulmalıdır. Şimdi bu kod grubunun nasıl çalıştığını Şekil 4.17’de verilen örnek ile inceleyelim. Şekil 4.17 Saniyede Konumuna Gidin Kod Bloğu Örnek Kodu Bu örnek, kullanıcının programı çalıştırmasıyla başlar. “S ü re k li” komu tu sonsuz bir döngü sağlarken, içerisine eklediğimiz zamanlı yer deği şim kodları, karakterimizin sürekli olarak yer değiştirmesini sağlar. Biz örneğimizde karakterimize 1 saniyede gitmesi için sahnemizin sol üst köşesi ve sağ alt köşesinin koordinatlarını verdik. 4.9 X ve Y Değiştirin Hareket grubunun bu kodları karakterimizin x ve y eksenlerindeki değer lerini değiştirerek hareket etmesini sağlar. Bu kod bloğunun kullanım biçimi Şekil 4.18’deki gibidir. 110 Şekii 4.18 X ve Y Değiştirin Kod Bloğu Bu kod bloğunun nasıl çalıştığını daha iyi anlayabilmek için Şekil 4.19’da verilen örneği birlikte inceleyelim. | boşluk 3 tuşu basıldığında *<G D d e ğ iş tirin y'yî cm d e ğ iş tirin ‘ ' r ’ vi:*' - Şekii 4.19 X ve Y Değiştirin Kod Bioğu Örnek Kodu Bu örnekte kullanıcı programı çalıştırıp, boşluk tuşuna bastığında, ka rakterimiz x ve y eksenlerinde 10 birim ilerleyecektir. 4.10 X ve Y Yapın Bu kodlarımız karakterimizin belirlediğimiz bir noktaya gitmesini sağlar. Bu kod bloğunun kullanım biçimi Şekil 4.20’de verildiği gibidir. Şekil 4.20 X ve Y Yapın Kod Bloğu Bu kod bloğu aslında, daha önce tanıttığımız x ve y değerleri vererek yer değiştiren kodumuzun parçalara bölünmüş halidir. Bu kod bloğunun nasıl kullanıldığını Şekil 4.21’de verilen örneği inceleyerek anlamaya çalışalım. 111 Şekil 4.21 X ve Y Yapın Kod Bloğu Örnek Kodu Bu örneğimizde solda daha önce tanıttığımız yer değiştirme kodumuz görülmektedir. Bu tanımlamada x ve y koordinatlarını sol taraftaki ko dumuzdan ayırmamız imkânsızdır. Bu tanımlamada x ve y koordinatla rından birine değer verirken diğerine değer atamama gibi bir seçeneği miz yoktur. Bu nedenle sağ taraftaki kodu geliştiren Scratch sistemi, bu şekilde bize sadece bir eksen değerini değiştirme olanağı sunmaktadır. Bu örnekte, her iki program parçasının da yaptığı iş açısından birbirin den fârkı yoktur. 4.11 Kenarda ise Zıplatın Bu kodumuz karakterimizin sahne sınırları içerisinde sağa ve sola doğru hareketini sağlar. Bu kod bloğunun kullanım biçimi Şekil 4.22’de görül düğü gibidir. Şekil 4.22 Kenarda ise Zıplatın Kod Bloğu Şekil 4.23’de verilen örnek kod, bu durum ile ilgili açıklayıcı bilgi içer mektedir. Bu örnekte karakterimiz sürekli olarak 10 birim ilerleme koduy la hareket ettirilmektedir. Şekil 4.23 Kenarda ise Zıplatın Kod Bloğu Örnek 10 birimlik hareketler sonucu sahne sınırlarına gelen karakter “kenarda is e z ıp la t ın ” kodu ile ters yöne döndürülerek hareketi diğer yöne, karşı sınıra ulaştığında ise tekrar aynı yöne doğru yapması sağlanır. 4.12 XY Konumu ve Yön Bu hareket kodları kullanıldığı karakterin yer ve yönüyle ilgili bilgiyi tem sil eder. Bu kod bloğunun kullanım biçimi Şekil 4.24’de görüldüğü gibi dir. X konum u y konum u I Yön « B il Şekii 4.24 XY Konumu ve Yön Kod Bloğu Genellikle değişkenlerle ve operatörlerle kullanılan bu bilgi kodları, kod bloklarımız için büyük kullanım kolaylıkları sağlar. Bu kod bloğunun kul lanımını daha iyi anlayabilmek için Şekil 4.25’de verilen örneği hep bir likte inceleyelim. Bu örnekte “x konumu”, “y konumu” ve “yön” komutla rının kullanımları anlatılmaktadır. Daha önce belirttiğimiz gibi genel ola rak değişken, operatör ve koşul kodlarıyla kullanılan bu tanımlamalar, mantıksal sınamalar için çok elverişlidir. Şekil 4.25’de tanımlanan “Eğen” kodunda karakterimize bağladığımız “can” değişkeninin değişim şartları 113 görülmektedir. Karakterimizin x konumu, y konumundan büyükse, “can” değişkeninin değeri, karakterimizin x konum uzaklığı ve zamanlayıcının değerinin toplamına eşit olacaktır. bklandığında Eğer İB x konumu 1< f y konumu is< konumu uzaklığı + Zamanlayıcı kadar değiştirin H can^ 'i Yön yapın Şekil 4.25 XY Konumu ve Yön Kod Bloğu Örnek Kodu İkinci satırdaki değişken ise, bu kez karakterimize atanan “can” değiş keninin değerini “yön” değişkeninin değerine eşitleyecektir. Örneğimizi uygularken dikkat etmemiz gereken diğer bir nokta, karakterimizin yeri ve oluşturduğumuz değişkenin ekranda görünüp görünmediğidir. Karak terin sahnede durduğu yer önemlidir. Çünkü karakterin x değeri, y değe rinden küçük değil ise kodumuz “Eğen... is e ” tanımı nedeniyle çalışma yacaktır. Değişkenin görülmesi de sizin değişkendeki değişimleri göz lemeniz açısından önemlidir. 114 O C LLM 5 Sonraki Karakter Kostümüne Geçin Efektini İle Değiştirin Kostüm Görünüm Komutları Süre Sn. Düşünün Söyle Süre Saniye Söyleyin Grafik Efektini Temizle Boyu Değiştir Yap Efektini Yapın Görünüm Komutları Öne Geriye Gidin Göster Gizleyin 5.1 Giriş Bu grupta bulunan kodlar genel olarak karakterimizin görüntü değişiklik leri için kullanılır. Görünüm kodları, kod grupları arasında Şekil 5.1’de görüldüğü gibi mor renkle sembolize edilirler. Şekil 5.1 Görünüm Komutları 120 Bu kodlar, kullanıcıyla sizin tarafınızdan oluşturulan karakterin yazılı olarak iletişimini sağlayan iki kod grubundan biridir. Şimdi bu gruptaki kodlarımızı sırayla tanıyalım. 5.2 Kostüm üne geçin Bu gruptaki ilk kodumuz olan "... Kostümüne g e ç in ” komutu karakteri mizin tanımlanmış diğer kostümler arasında geçiş yapmasını sağlar. Bu komutun kullanım biçimi Şekil 5.2’de gösterildiği gibidir. Şekil 5.2 Kostümüne Geçin Karakterinize yeni kostümleri nasıl sağlayacağımızı, kitabımızın ilk bö lümünde detaylı olarak anlatmıştık. Eğer karakterinize sadece bir kos tüm tanımlamış iseniz, bu kod çalışmayacaktır. Şimdi bu komutun nasıl çalıştığını bir örnek ile inceleyelim. Şekil 5.3 Kostüm üne Geçin Kod Bloğu Örnek Kodu Şekil 5.3’de verilen örnekte, kullanıcının programımızı çalıştırdığında aktif hale gelen bir kod bloğu görülmektedir. “S ü r e k li” komutumuzla sonsuz bir döngüye sahip olan bu kod grubumuz, “S ü r e k li” kodunun 121 içerisinde tanımladığımız, ilk “b asketb all kostümüne geçin” koduyla ilk kostümünü göstermektedir. Ardından yarım saniyelik bekleme süre sinden sonra, daha önce tanımladığımız b a s k e tb a lll kostümüne geçmesini sağlayan “b a s k e tb a lll kostümüne geçin” kodu devreye girer ve ikinci yarım saniyelik bekleme süresinden sonra tekrar “bas k e tb a ll” kostümüne geçilir. Bu sürekli bir kod bloğu olduğu için, kulla nıcı programı durdurmadığı sürece karakterimizin kostümü sürekli ola rak değişecektir. 5.3 Sonraki Karakter Görünüm grubuna ait olan bu komut, yukarıda verdiğimiz örneğin işini yapan basitleştirilmiş bir komuttur. Bu komutun kullanım biçimi Şekil 5.4’de gösterildiği gibidir. Şekil 5.4 Sonraki Karakter Kod Bloğu Bu komut, karakterimizin tanımlı kostümleri arasında geçiş yapmasını sağlar. Şimdi bu komutun kullanım şeklini daha iyi anlayabilmek için Şekil 5.5’de verilen örneği birlikte inceleyelim. Şekil 5.5 Sonraki Karakter Kod Bloğu Örnek Kodu Bu örneğimizin bir önceki örneğimizle çalışması açısından hiçbir farkı yoktur. Ekran çıktıları aynı olsa da, bu örneğimizin kullanımının daha 122 kolay olduğunu görüyoruz. Ancak tekrar belirtilmelidir ki, kostümler ara sında geçiş yapabilmeniz için karakterinize ait en az iki kostümün tanım lı olması gerekmektedir. 5.4 Kostüm Bu görünüm grubuna bağlı-olan kostüm numarası kodumuz şeklinden de anlaşılacağı üzere, mantıksal sınamalarda, kostüm numarası vere rek yapılacak geçişler için hazırlanmış bir- komuttur. Kullanımı Şekil 5.6’da görüldüğü biçimdedir. K o s tü m # Şekil 5.6 Kostüm Şimdi bu tanımlamanın kullanım biçimini daha iyi anlayabilmek için, Şe kil 5.6’da verilen örneği birlikte inceleyelim. Bu örnekteki kod bloğu kul lanıcının programı çalıştırmasıyla aktif hale geçer. Kodumuzun ilk par çası bu grubun tanıtılmış ilk kodudur. Bu kodumuzun, çoklu seçim kutu su diye adlandırdığımız yerine iliştirdiğimiz, rastgele sayı seçen komut operatörler kısmından aldığımız bir komuttur. İkinci kodumuz kontrol grubuna ait olan “Eğer” kodudur. Bildiğiniz gibi mantıksal sınama yapan “Eğer” komutu ilk “kostümüne geçin” komutuna iliştirdiğimiz “ra s tg e le s a y ı seçin ” operatörünün atadığı sayıyı sınamaktadır. Ardından gelen her'“Eğer” komuta, aynı sınamayı kendi için yapmaktadır. 123 Şekil 5,6 Kostüm Örnek Kodu Sonuç olarak ilk kodumuzun atadığı sayıya göre, altındaki “Eğen” sına maları kendine bağlı olan kodu çalıştırmaktadır. “1 i l e n a s tg ele 3 anasında seçin ” “kostümüne g eçin ” kodu ile bir kostüm numarası atanır. Daha sonra, “Eğen” sınamasındaki operatör devreye girer ve hangi kostümün atandığına bakar. Bu tanımlamalardaki “#” işareti nu mara anlamına gelmektedir. 5.5 Söyle Süre Saniye Bu komut, karakterimizin yazılı olarak, tanımladığımız belli bir saniye değeri içinde kullanıcıya, bir mesajı iletir. Bu tanımlamaların kullanım biçimi Şekil 5.7’de gösterildiği gibidir. Şekii 5.7 Söyie Süre Saniye 124 Bu komutun kullanımını daha iyi anlayabilmek için, Şekil 5.8’de verilen örneği birlikte inceleyelim. Bu örnekteki kodu bağladığımız karakter, ko nuşma balonu ile kodumuzun “Merhaba” yazan kısmına yazdığımız me sajı iletir. Şekil 5.8 Söyle Süre Saniye Örnek Kodu Kullanıcının programımızı çalıştırmasıyla aktif hale gelecek olan kodu muz, kullanıcıya konuşma balonu içerisinde 2 saniye boyunca “Merha ba” mesajını içeren bir konuşma balonunu gösterecektir. Burada dikkat edilmesi gereken durum, saniyenin istenilen şekilde ayarlanabileceğidir. 5.6 Söyleyin Bu komutun bir öncekinden tek farkı, vereceğimiz yazılı mesajda her hangi bir iletim süresinin tanımlanmamış olmasıdır. Bu komutun kulla nım biçimi Şekil 5.9’da görüldüğü gibidir. Şekii 5.9 Söyleyin Bu kod ile oluşturduğunuz konuşma balonu, eğer ardına eklenmiş bir kod yok ise, kullanıcı programı durdurana kadar kaybolmayacaktır. 5.7 Süre Saniye Düşünün Bu görünüm kodlarımızın kullanımı ve işlevi bir önceki konuşma balo nuna çok benzemektedir. Bu tanımlamaların kullanım biçimi Şekil 5.10’da görüldüğü gibidir. Önceki tanımlamalar ile arasındaki fark, me sajları kullanıcıya ilettikleri balonlarda oluşmaktadır. Bir önceki kodda konuşma balonu oluşturan karakter, bu kodlarımızda düşünme balonu oluşturmaktadır. Şekil 5.10 Süre Saniye Düşünün Örnek olarak tıklama düğmesinin altına konuşma ve düşünme balonla rını yerleştirip programı çalıştırın aralarındaki fark açıkça görülecektir. 5.8 Efektini ite değiştirin Görünüm grubundaki bu kodumuz karakterimizin renk diyagramında tanımlanmış olan renk değerlerini, belirlediğiniz sayı kadar değiştirir. Böylece karakterimizin renginin değişmesi sağlanır. Bu tanımlamanın kullanım biçimi Şekil 5.11'deki gibidir. Şekil 5.11 Söyle Süre Saniye Bu yapının kullanım biçimini daha iyi anlayabilmek için, Şekil 5.12’de verilen örneği birlikte inceleyelim. 126 Şekil 5.12 Söyle Süre Saniye Örnek Kodu Bu örnekde, kullanıcı programı çalıştırdığında çalışan kod bloğumuz, bağlandığı karakterin rengini, “S ü r e k li” kodunun içine yerleştirdiğimiz “renk e f e k t in i 25 i l e d e ğ i ş t i r in ” komutu nedeniyle sürekli ola rak değiştirecektir. Görüldüğü gibi, karakterimizin sahip olduğu rengi, renk skalasındaki sayısal renk değerlerini 25 birim artırarak, sürekli ola rak değiştirmek mümkün olmaktadır. 5.9 Efektini Yapın Bu kodumuz yine renk efektini değiştirirken, programcının verdiği değeri temel alarak bir değişim yapar. Kullanım biçimi Şekil 5.13’de görüldüğü şekildedir. r e n k ^ i e fe k tin i Q y a p ın Şekil 5.13 Efektini Yapın Bu tanımlamanın nasıl kullanıldığını daha iyi anlayabilmek için, Şekil 5.14’de verilen örneği birlikte inceleyelim. Bu örnekte verilen kodu, bir önce verdiğimiz örnekteki “S ü r e k li” komutunun içerisinde tanımlasaydık, sürekli bir değişim söz konusu olmayacaktı. Çünkü düzenli olarak noktasal bir değere giden bir sürekliliğimiz söz konusu olacaktı. Şekil 5.14 Efektini Yapın Örnek Kodu Bu örnekte, verilen kod, süreklilik kodu içerisinde yalnız olarak hiçbir değişim göstermeyeceğinden, bu kodu süreklilik içerisinde tanımlama dık. Burada kullanıcı programı çalıştırdığında, karakterimizin rengi renk skalasında 10 birim değiştirilerek, gösterilecektir. 5.10 G rafik Efektini Temizleyin Bu görünüm kodumuz, karakterimizin grafiği üzerinde yaptığımız deği şiklikleri geri alır ve karakterimizi ilk haline döndürür. Bu tanımlamanın kullanım biçimi Şekil 5.15’deki gibidir. G ra fik e f e k tle r in i t e m iz le y in Şekil 5.15 Grafik Efektini Temizleyin Bu tanımlamanın nasıl kullanıldığını daha iyi anlayabilmek için Şekil 5.16’da verilen örneği birlikte inceleyelim. Bu örnekte kullanıcı programı çalıştırdığında, kodlarımız aktif olmaktadır. Karakterimizin ilk kodu bir “Merhaba!” konuşma balonudur. Şekil 5.16 Grafik Efektini Temizleyin Örnek Kodu Sonraki kodumuz karakterimizin rengini 25 birim değiştirir. Daha sonra kullanıcımızın boşluk tuşuna basmasıyla, sol taraftaki kodumuz çalışa- 128 cak ve “g ra fik e f e k t le r in i te m iz le y in ” komutunu aktif hale geti recektir. Eğer dikkat ederseniz, karakterimizin üzerindeki renk değişikliği boşluk tuşuna basılmasıyla kaybolacak, ancak konuşma balonu kay bolmayacaktır. 5.11 Boyu Değiştirin ve Yapın Görünüm grubuna ait bu iki komut, karakterimizin boyutlarını değiştir mek için kullanılır. Kullanım biçimi Şekil 5.17’de görüldüğü gibidir. Şekil 5.17 Boyu Değiştirin ve Yapın Bu programda üst kısımda görülen kodumuz karakterimizin boyunu bi rim olarak, alt kısımda görülen kodumuz ise yüzdesel olarak değiştir mektedir. Burada dikkat etmeniz gereken durum, boyu % 100 ile değiş tirmek, karakterimizin üzerinde yaptığınız boyut değişikliklerini geri alır. Başka bir deyişle, bu tanımlama, bir önceki kodda anlattığımız grafik efektlerini temizleyen kodumuzla aynı görevi yapar. Tabii ki “boyu . . . d e ğ iş tir in “ ibaresindeki kısmına % 200 yazarsak karakterimi zin boyu iki katına çıkacaktır. Şekii 5.18 Boyu Yapın Örnek Kodu Şekil 5.18’de verdiğimiz örnekte kullanıcı programımızı çalıştırdığında, sağ taraftaki kodumuz karakterimizin boyunu iki katına çıkartırken, sol- daki kodumuz karakterimizin boyunu eski haline yani % 100’lük görün tüsüne geri döndürecektir. Şekil 5,19 Boyu D eğiştirin Örnek Kodu Böylece, kullanıcı programı çalıştırdığında karakterin boyu iki katına çı karken, kullanıcı boşluk tuşuna bastığında tekrar eski haline dönecektir. Şekil 5.19’da verilen örnekte ise, kullanıcı boşluk tuşuna bastığında ka rakterimizin boyu 10 birim artacaktır. 5.12 Ebat Ebat görünüm komutu, mantıksal işlemlerimizde ya da operatörlerimiz de kullanmamız için tasarlanmıştır. Kullanım biçimi Şekil 5.20’de göste rildiği gibidir. Şekii 5,20 Ebat Bu tanımlamanın nasıl kullanıldığını daha iyi anlayabilmek için, Şekil 5.21’de verilen örneği birlikte inceleyelim. Bu örnekte, Ebat kullanımının mantıksal işlemlerde nasıl kullanıldığı gösterilmektedir. Şekii 5.21 Ebat Örnek Kodu Örneğimizin sol tarafındaki kod bloğu, program çalıştırıldığında aktif ha le gelmektedir. Kod bloğumuz “is e s ü r e k li” komutuna iliştirilen opera- 130 törümüz sayesinde, karakterimizin boyutunu sürekli olarak denetlemek tedir. Eğer karakterimizin boyutu 200 birimi geçerse “boyu 100 % ya pın” kodu karakterimizin boyunu eski haline döndürmektedir. Sağ taraf taki kodlarımız ise, kullanıcı boşluk tuşuna bastığında aktif hale gelmek tedir. “S ü re k li” kodumuzun içerisindeki “boyu 10 d e ğ iş tir in ” tanımı ile karakterimizin boyu sürekli olarak 10 birim artmaktadır. Ancak sol taraftaki komut karakterimizin boyunu denetlediği için, karakterimizin boyu 200 birimi geçtiğinde, tekrar eski haline döndürmektedir. 5,13 Göster ve Gizleyin Bu komutlar, görünüm grubumuzdaki belkide en fazla kullanacağımız komutlardır. Kullanım biçimleri Şekil 5.22’de görüldüğü gibidir. G ö s te r ‘ G iz le y in Şekil 5.22 Göster ve Gizleyin Genellikle programlarımızda karakterlerimizin sahneye giriş ve çıkışla rında kullanacağımız bu kodların temel görevi, karakterlerimizi görünür veya görünmez kılmaktır. Bu kodların kullanımlarını daha iyi anlayabil mek için, Şekil 5.23’de verilen örneği birlikte inceleyelim. 131 b o ş lu k fl tu ş u ba sıld ığınd a S ü re k li • ( , V !" "î j G ö s te r Q Q M M s a n îy e b e k le y in G iz le y in i saniye bekleyin fclİj' : i İ8 H 6 P 6 Şekil 5.23 Göster ve Gizleyin Örnek Kodu Bu örneğimizde kodlarımız “boşluk tuşuna b a s tığ ım ız d a ” komutu ile aktif hale gelmektedir. Sonrasında, “S ü r e k li” komutumuz içine yerleşti rilen “G öster”, “0 ,5 saniye saniye b e k le y in ”, “G iz le y in ” ve tekrar “0 ,5 b e k le y in ” komutları karakterimizin ekranda yanıp söner gibi görünmesini sağlar. En baştaki “G öster” komutu karakterimizi görünür kılarken en sona yerleştirdiğimiz “G iz le y in ” komutu karakterimizi giz lemektedir. 5.14 Öne Gidin ve Katman Geriye Gidin Bu kodlar, görünüm grubu kodlarımızın son iki üyesidir. Kullanım biçim leri Şekil 5.24’de görüldüğü gibidir. Ö n e g id in Kffi-'î’ Q k a t m a n g e r iy e g id in W ■ ■İn Şekii 5.24 Öne Gidin ve Katman Geriye Gidin Bu iki kodumuz karakterler sahnede birbirlerinin önüne geçtiklerinde ih tiyaç duyulan kodlardır. Soldaki “Öne g id in ” kodu bağlı olduğu karak teri üstüne geldiği karakterin önüne taşıyacaktır. Sağ taraftaki kodumuz ise, karakterimizi diğer karakterin arkasına taşıyacaktır. Bu kodların kul- 132 lanımlarını daha iyi anlayabilmek için, Şekil 5.25’de verilen örneği birlik te inceleyelim. Şekil 5.25 Öne Gidin ve Katman Geriye Gidin Örnek Kodu Bu örneğimiz mantık olarak “Göster” ve “G iz le y in ” örneğimizin aynısı dır. Ancak bu örneğimizde amaç, karakterimizin sahnede bulunan diğer karakterin önüne veya arkasına geçmesini sağlamaktır. Burada dikkat edilmesi gereken konu, eğer sahnede birçok üst üste gelmiş karakter varsa, “Öne g id in ” komutunun karakterimizi en öne getireceğidir. Ayrı ca, . Katman geriye g id in ” komutu da, önde bulunan karakterin kaç karakter arkaya gitmesi isteniyorsa ona göre bir ayarlama yapmak için kullanılır. 133 BCLİJM e 6.1 Giriş Kalem grubumuza ait bu kodlar, Şekil 6.1’de görüldüğü gibi karakterimi ze sahnede çizim yaptırabilmek ve işaretler ya da izler bırakmasını sağ lamak için tasarlanmıştır. T e m iz le y in K a l e m i b a s t ır ı n K a l e m i k a ld ı r ı n K a le m r e n g in i S K a le m re n g in i y a p ın m ; K a le m re n g in i Q d e ğ iş tirin H y a p ın K a le m g ö lg e s in i £ D d e ğ iş tirin ; K a le m g ö lg e s in i E B I y a p ın K a le m b o y u n u R d e ğ iş tirin K a le m b o y u n u Q y a p ın Şekil 6.1 Kalem Komutları Kitabımızın bu bölümüde, bu kod grubunda tanımlanmış olan komutla rın kullanımlarını örnekler ile inceleyeceğiz. 6.2 Temizleyin Kalem grubuna ait bu ilk kodumuz, kalem kodlarıyla yaptığımız tüm işleri sahnemizden temizlemek için tasarlanmıştır. Bu komutun kullanım biçi mi Şekil 6.2’deki gibidir. 140 Şekil 6.2 Temizleyin Bu komutun kullanımını daha iyi anlayabilmek için Şekil 6.3’deki örneği birlikte inceleyelim. | h b n ;iu l> t u ş u b a s ıld ığ ın d a T e m iz le y in ■Uf 1 Şekil 6.3 Temizleyin Örnek Kodu Bu örnekte hazırlanmış olan kod bloğu, kullanıcı boşluk tuşuna bastı ğında aktif hale geçer. Bu kodumuz sahnede herhangi bir kalem koduy la yapılmış değişiklik var ise, bu değişiklikleri temizleyecektir. 6.3 Kalemi Bastırın ya da Kaldırın Bu kodlar karakterimizin çizime başlaması ya da çizimi durdurması için kullanılmaktadır. Kullanım biçimi Şekil 6.4’deki gibidir. K a l e m i b a s t ır ı n K a l e m i k a ld ı r ı n Şekii 6.4 Kalemi Batırın ya da Kaldırın Bu kodlardan sol taraftaki tanımlama, karakterimizin çizime başlaması nı, sağ taraftaki tanımlama ise, çizimi durdurmasını sağlar. Bu kodların nasıl kullanıldığını anlamak için Şekil 6.5’de verilen örneği birlikte ince leyelim. 141 t u ş u b a s ıld ığ ın d a T e m iz le y in S ü r e k li S ' i x : 6 Ü H Ü y : ü l k o n u m u n a g id in H H x konum u E K a le m i b a s t ır ın ■ x 'i ( J 5 3 d e ğ iş t ir in I y 'y i f V j m B * K a le m i k a ld ır ın sin o la n a k a d a r t e k r a r la y ı n !da x konum u | y a p ın H K a le m r e n g in i £ J j J d e ğ iş t ir in BBhifaâtıja Şekil 6.5 Kalemi Bastırın ya da Kaldırın Örnek Kodu Bu örneğimiz size 100 piksellik bir sinüs eğrisi çizdirecektir. Boşluk tu şuna basıldığında aktif olan örneğimiz, “S ü r e k li” kodumuzun içerisine yerleştirdiğimiz “konumuna g id in ” komutu ile, karakterimizi sürekli ola rak sahnemizin belirttiğimiz noktasına taşıyacaktır. Bu örnek kodda bu lunan ilk komut T em izleyin , sahnede programın daha önceki çalıştırıl ması sırasında ekranda bulunan tüm çizimleri öncelikle ekrandan temiz ler. İç tarafta tanımlanan “olana kadar t e k r a r la y ın ” kodunun koşul boşluğuna yerleştirdiğimiz koşul operatörü x konumumuzun değerini ölçmektedir. Eğer x konumumuz 235’den küçük ise, iç taraftaki koşul bloğumuz çalışmaktadır. Koşul bloğumuzda koşulumuz sağlanıyor ise, (mantıksal olarak doğru bir sonuç üretiyorsa) ilk kodumuz kalemi bastı racak ve ikinci kodumuz karakterimizin yerini x konumunda 0 .5 birim değiştirecektir. Kalem bastırılmış durumda olduğu için, karakterimiz çi zime başlayacaktır. Bir sonraki kodumuz karakterimizin y koordinatını 100 birimlik bir sinüs eğrisi çizerek değiştirmektedir. Bu işlem, x koordi- 142 natının koşuluna uymadığı zaman bitip “kalemi k a ld ır ın ” koduna ulaşmaktadır. Bu program çalıştırıldıktan sonra, ekranda Şekil 6.6’da görüldüğü gibi bir sinüs eğrisi çizilecektir. 6.4 Kalem Rengini Yapın Bu kod kullandığımız kalemin rengini değiştirmektedir. Kullanım biçimi Şekil 6.7’de görüldüğü gibidir. Şekil 6.7 Kalemin Rengini Yapın Bu komutun kullanımını daha iyi anlayabilmek için Şekil 6.8’de verilen örneği birlikte inceleyelim. 143 Şekil 6.8 Kalemin Rengini Yapın Örnek Kod Bu örneğimiz bir önceki örneğimizle benzerdir. Tek fark, en sona ekle diğimiz “kalem ren g in i ... yapın” kısmındaki renkli bölümünü tıkladı ğınızda açılan renk skalasından istediğiniz rengi seçebilmenizdir. Böy lece, ekranda yaptığınız çizimin istediğiniz bir renkte olmasını sağlaya bilirsiniz. 6.5 Kalemin Rengini Değiştirin Bu kalem grubu kodumuz, kalem renginizi renk skalasında sayısal ola rak değiştirmeyi sağlar. Kullanım biçimi Şekil 6.9’da görüldüğü gibidir. Şekil 6.9 Kalemin Rengini Değiştirin Bu tanımlamaya göre, kalem renginin, renk skalasında sayısal olarak 10 birim değiştirilmesi sağlanır. Eğer sürekli bir değişim isterseniz, Şekil 6.10’da verilen örnekdeki gibi bir tanımlama yapabilirsiniz. Şekil 6.10 Kalemin Rengini Değiştirin Örnek Kodu Bu örneğimizde dikkat etmeniz gereken nokta kalem rengimizin, her ko şullu döngüden sonra 10 birim değiştirilmesidir. 6.6 Kalem Rengini Değer Yapın Kalem rengini kalem rengine sayısal bir değer atayarak değiştirmek için, Şekil 6.11’de verilen örneğe benzer bir tanımlama yapılabilir. Şekii 6.11 Kalem Rengini Değer Yapın Kalem grubundaki her rengin bir sayısal değer karşılığı bulunmaktadır. Bu değerleri kullanarak renk değişimlerini gerçekleştirebiliriz. Örneğin “0” değeri kırmızı rengi temsil etmektedir. Şimdi bu komutun kullanım biçimini daha iyi anlayabilmek için, Şekil 6.12’de verilen örneği birlikte inceleyelim. 145 Şekii 6.12 Kalem Rengini Yapın Örnek Kodu Bu örnekte, en sona eklediğimiz “kalem re n g in i 0 y a p ın ” tanımla ması, kalem rengini kırmızıya sabitlemektedir. Bu komutun kullanımını daha iyi anlayabilmek için, Şekil 6.5’de verilen örnek ile bu örneği karşı laştırarak farklı olan durumları belirleyiniz. 6.7 Kaiem Gölgesini Değiştirin Bu iki kalem grubu kodumuz, karakterimizin çizdiği çizgilerin görüntüsü nü saydamlaştırmak veya koyulaştırmak için kullanılır. Kullanım biçimle ri, Şekil 6.13’de görüldüğü gibidir. Şekil 6.13 Kalem Gölgesini Değiştirin Burada üst kısımdaki kod, saydamlık derecesini artırmak için kullanılır ken, alt kısımdaki kod, saydamlık derecesini istediğimiz dereceye sabitlemek için kullanılır. Her yazılabilir alanda kullanabileceğimiz bir yön im- 146 leci bulunmaktadır. ifadesiyle verdiğimiz değerlerin normal artışın ters yönünde olmasını sağlayabiliriz. Bu durumun daha iyi anlaşılabil mesi için Şekil 6.14’de verilen örneği birlikte inceleyelim. Şekil 6.14 Kalem Gölgesini Değiştirin Örnek Kodu Bu örnekte “kalemin g ö lg esin i d e ğ iş tir ” kodunun kullanımı için örneği uygulayıp kalem gölgesinin nasıl değiştiğini görebilirsiniz. Prog ram çalıştırıldığında, burada tanımlı olan kodlar, boşluk tuşuna basılma sıyla aktif hale geçecektir. Tanımlamalar içindeki “S ü re k li” kod bloğu na kadar ayrılmış olan bölümde, kalemin hangi pozisyonda olacağı “b a s tırılm ış /b a s tırılm a m ış ”, kalemin rengi ve kalemin ucu için ge rekli kodlar yazılmıştır. “S ü re k li” kodumuzun içinde yer alan kodlar ise, kalemin gölge özelliğini nasıl değiştirdiğimizi ve daha önce hareket gru bunda öğrendiğimiz “Kenarda is e , z ıp la t ın ” kodu ile birlikte bu ta nımlamaları nasıl kullandığımızı göstermektedir. Burada dikkat edilmesi gereken nokta kalemin gölgesinin “kalemin g ö lg esin i komutuyla değil, “kalem g ö lg esin i . . . ... yapın” d e ğ iş tir in ” koduyla çalış masıdır. Çünkü buradaki “kalem g ö lg esin i 1 d e ğ iş tir in ” ibaresi 147 sürekli kodunun içerisinde gölgemizi artırıp azalmaktadır. Unutmayın ki . . yapın” ifadesinde seçtiğiniz değer sabit kalacaktır. 6.8 Kalem Boyunu Değiştirin Bu kalem grubu kodları kullanım özellikleri açısından bir önce tanıttığı mız gölge değiştirme kodlarıyla aynıdır. Bu tanımlamalar Şekil 6.15’de görüldüğü gibi kullanılır. p Û e m boyunu S i K a le m b o y u n u y a p ın d e ğ iş tirin Şekil 6.15 Kalem Boyunu Değiştirin Ancak kodun yaptığı iş farklıdır. Bu kodlar kalem ucu kalınlığı için ya sabit bir ayarlama yapmak ya da değişen bir kalem ucu boyu tanımla mak için kullanılır. Bu tanımlamaların nasıl kullanıldığını daha iyi anla yabilmek için Şekil 6.16’da verilen örneği birlikte inceleyelim. Kalem bo yutunu değiştirme ve sabitleme için hazırladığımız bu örnekteki kod blo ğu, kalem kodlarının tamamını kapsamaktadır. Kullanıcı boşluk tuşuna bastığında aktif hale geçen bu kod bloğunun ilk üç satırı sırayla, ekranı temizlemek, kalem boyunu “0”’a sabitlemek ve can adındaki değişkeni mizi “0”‘a sabitlemek için hazırlanmıştır. Koşullu tekrar kodumuzun ko şulu, can değişkenimiz 100 değerine ulaşıncaya kadar, ilk bloğumuzun içerisine yerleştirdiğimiz kodları uygulamak için hazırlanmıştır. Koşulun sağlanması için bu bloğa ilk tanımladığımız kod, can değişkenini 1 ar tırmaktır ki, değişken değerimiz “100” değerine ulaşınca alt bloğa geçe bilsin. Daha sonraki kodumuz kalemi bastırmak, rengi değiştirmek ve kalem boyunu “1” değerine sabitlemek için tanımlanmıştır. Gördüğünüz 148 gibi, programımızın başında “0” değeri verdiğimiz kalem boyu, burada “1” ile değişmektedir. T e m iz le y in K a le m b o y u n u f f l v a m n can ya p ın K a le m i b a s t ır ın K a le m re n g in i y a p ın K a le m b o y u n u Ş Ş ya n ın m a d ım gidin K e n a rd a is e , z ıp la b n m a d ım g id in , K e n a rd a is e , zıpla tın K a le m gölg e sini j Q y Q d eğ iş tirin K a le m b o y u n u f j d e ğ i ş t i r i n : Şekil 6.16 Kalem Boyunu Değiştirin Örnek Kodu Bunun ardında karakterimizin 10’aradım gitmesi için, “10 adım g id in ” ve sahne kenarına ulaştığında geri dönmesi için “Kenarda is e z ıp la t ı n ” komutları tanımlanmıştır, can değişkenimize ait olan değer “l0 0 ”‘e ulaştığında, alt bloğa geçen akışımız, “S ü re k li” kod bloğunun içine yer leştirdiğimiz “10 adım g id in ” komutu ve “kenarda ise z ıp l a t ” ko mutu ile ilk bloktaki hareketini sürdürür. Burada “kalem g ö lg esin i . . . d e ğ iş tir in ” komutu, kalemdeki renk geçişlerini sağlar. Son olarak “kalem boyunu 1 d e ğ iş tir in ” komutu ile, kalem boyunun yavaş ya vaş artırılması ve tüm ekranı kaplaması sağlanmaktadır. Bu program 149 çalıştırıldığında, Şekil 6.17’de görüldüğü gibi, karakterimizin ekran üze rinde gidip gelme süreçlerinde kalem boyutu sürekli olarak genişleyecek ve en sonunda tüm ekranı kaplayacaktır. a) b) Şekil 6.17 Kalem Boyunu Değiştirin Örneği 6.9 Damga Bu komut karakterimizin sahnede resminin çıkmasını sağlamaktadır. Kullanım biçimi Şekil 6.18’de görüldüğü gibidir. Şekil 6.18 Damga Bu komutun nasıl kullanıldığını daha iyi anlayabilmek için şimdi, Scratch yazılımı ile ilk oyunumuzu yazalım. Şekil 6.19’da verilen bu örnek oyunu birlikte inceleyelim. Bu örnek iki bloktan oluşmaktadır. İlk kod bloğu ka raktere tıklandığında çalışmaktadır. İkinci parça ise, programı çalıştırdı ğınızda başlamaktadır. Oyunumuza “Y akalayabilirsen beni yaka l a ! ” adını verelim. İkinci blokta tanımlanan komutlar ile kullanıcı, “Sü r e k l i” hareket eden karakterimizi tıklayarak yakalamaya çalışır. Karak tere hareket esnasında tıklayabilirseniz karakterin sahne üzerinde “dam ga” kodundan dolayı bir resmi çıkacaktır. Bu da sizin onu yakalayabildi ğiniz anlamına gelmektedir. Hadi bu kodu uygulayalım ve değişkenler kullanarak ona bir skor tabelası ekleyelim. 150 Şekil 6.19 Damga Örnek Kodu Değişkenler ile ilgili bölümden bilgi alarak yarım kalan oyunumuzu ta mamlayabilirsiniz. '^ A lış tırm a la r 1. Aşağıdaki kodlardan hangisi, karakterimizin çizim yapabilmesi için gereken koddur? 2. Aşağıdaki kodlardan hangisi, karakterimizin sahnede oluşturduğu izleri siler? 151 DCLİJM7 Rengine Yaklaşıyor mu? r Renk Renge Yaklaşıyor mu? Yaklaşıyor mu? Algılama Komutları Tuşu Basılı? Mouse Basılı? Sor ve Bekle Mouse X ve Y Sayacı Sıfırlayın Zaman layıcı Uzaklığı Algılama Komutları Sensör Değeri Sensör Ses Yüksekliği Yüksek Sesle? 7.1 Giriş Şekil 7.1’de görülen algılama komut grubu genellikle mantıksal sınama larda ya da insan program iletişiminizde kullanılmak üzere tasarlanmış kodlardan oluşmaktadır. Şekil 7.1 Algılama Komutları Scratch ile hazırlayacağınız programların LEGO Robot [3] sisteminin programlanması amacıyla da kullanılması mümkündür. Özellikle LEGO 156 Robot yazılımlarında kullanılan algılayıcılarla iş birliği içerisinde çalışan bu kodlar, sadece bilgisayar üzerinde kullanılacak programlar için de çok kullanışlıdır. Bu kod grubuna ait ilk komutumuz “yaklaşıyo r mu?”dur. 7.2 Yaklaşıyor mu? Bu komut, tanımlandığı karakterin diğer karakterlerle veya sahne kena rıyla ya da Mouse işaretçisiyle olan yakınlığına bakarak, ardından gelen komutları çalıştırır. Bu komutun kullanım biçimi Şekil 7.2’de görüldüğü gibidir. Şekil 7.2 Yaklaşıyor mu? Bu komutun kullanımını daha iyi anlayabilmek için, Şekil 7.3’de verilen örneği birlikte inceleyelim. Bu örnek iki kod parçasından oluşmaktadır. Şekil 7.3 Yaklaşıyor mu? Örnek Kodu 157 İlk parçamız 1. karakterimize bağlanırken, 2. parçamız ikinci karakter içindir. Öncelikle “sü rp riz karakter g e t ir ” düğmesine basarak, ko layca bir karakter seçin. Gelen karaktere, 2. kod bloğumuzu uyguladık tan sonra, bizim ilk karakterimiz olan ünlü Scratch kedimize geri dönün ve ilk kod bloğumuzu da ona bağlayın. İlk kod bloğumuz program çalı şınca aktif olur. Bu kod bloğu, karakterimize belli bir koşul altında sü rekli çalışma durumu için tanımlanmıştır. Öncelikle koşulumuzdan bah sedersek, bu koşul . Yaklaşıyor mu?” kodunun karakter2 seçil miş halidir (Eğer 2. karakteri oluşturmamış olsaydınız bu karakter açılır listede görünmeyecekti). Yani karakter2, bizim meşhur kedimize yak laştıkça kedimiz hareket edip ondan uzaklaşacaktır. Koşullu sürekli kod bloğumuzun içerisindeki ilk kod, “50 adım g id in ”, ikinci kod ise “ke narda is e z ıp la t ın ” tanımlamaları bunun için hazırlanmıştır. Alttaki kod bloğumuzun görevi ise, sürekli olarak 20 adım ilerlemek ve her l saniyede rastgele bir x ve y noktasına ulaşmaktır. İkinci karaktere bağ ladığımız kodların aktif olması durumunda, eğer 2. karakterimiz kedimi zin bulunduğu noktadan geçerse, kedimiz aktif olacak ve karak t e r d e n kaçacaktır. 7.3 Rengine Yaklaşıyor mu? Algılama grubuna ait bu ikinci kodumuz, bir önce gördüğümüz Mouse işaretçisi ya da karakter algılayıcı gibi çalışmaktadır ve sahnedeki renk lere duyarlıdır. Bu algılayıcının kullanımı, Şekil 7.4’de görüldüğü gibidir. Şekii 7.4 Rengine Yaklaşıyor mu? Bu durumu Şekil 7.6’da verilen örnekte inceleyelim. Bu örneğe başla madan önce, lütfen sahne arka planını Şekil 7.5’de verilen biçimde ha- 158 zırlayınız. Bunun için sahneyi seçip, “arka p la n la r ” sekmesinden “dü z e n le ” seçeneğini kullanabilirsiniz. Şekil 7.5 Rengine Yaklaşıyor mu? Örnek Yukarıdaki Japonya bayrağına benzeyen arka planımızın ortasındaki kırmızı noktayı, sıcak nokta olarak adlandıracağız. Bir önceki örneğe ekleyeceğimiz kodlarla k a ra k te r2 ’den kaçan kedimizin kırmızı noktada durduğu zaman sıcak, beyaz bölgede olduğu zaman ise soğuk, konuş ma balonlarını göstermesini sağlayacağız. Şekil 7.6 Rengine Yaklaşıyor mu? Örnek Kodu Bu kod bloğumuzu anlatmadan önce belirtmeliyiz ki, k a ra k te r2 kodla rında hiçbir değişiklik yoktur. Bu nedenle bundan önceki örnekteki ka- ra k te r2 kodlarını kullanabilirsiniz. K a ra k te ri için tanımladığımız ko mutlara iki koşul bloğu ekleyeceğiz. Bunlardan ilki " . . . rengine yak la ş ıy o r mu?” komutunda belirttiğimiz ve yaklaşıyor ise sıcak kodunu aktif hale getiren kod grubudur. Diğeri ise " . . . rengine yaklaşmadı ğ ı” koşulunda soğuk kodunu aktif hale getiren koşul kodlarıdır. Burada renk koşulunu belirtmek için kullandığımız algılama kodunda renk deği şikliği yapmak istersek, kodun üzerindeki renk kısmına tıkladığımız za man açılacak olan renk yelpazesinden bir renk seçmemiz yeterli olacak tır. “S ü re k li” kod bloğumuz için, “karakter2 ya k la ş ıy o r mu?” koşulu tanımlı olduğu için, kedimiz kara k te r2 ’den kaçmaya devam edecek ve aynı zamanda kırmızı bölgede “sıcak”, beyaz bölgelerde ise “soğuk” diyecektir. 7.4 Renk Renge Yaklaşıyor mu? Bu algılayıcı kodumuz, iki renk birbirine yaklaştığı zaman, bağlı olduğu kontrol grubu kodlarını çalıştırmayı sağlar. Bu algılayıcının kullanım bi çimi Şekil 7.7’de gösterildiği gibidir. re n k | re n g e y a k la ş ıy o r m u ? | Şekil 7.7 Renk Renge Yaklaşıyor mu? Şekil 7.8’de verilen örneği inceleyerek bu algılayıcının nasıl kullanıldığı nı daha iyi anlamaya çalışalım. Bu örneğimizde yine Japonya bayrağına benzeyen sahnemizi kullanacağız. Karakter olarak bu kez meşhur ke dimiz yerine, mavi bir top seçeceğiz. Mavi topu seçmek için “yeni b ir k ara k te r y a ra t” seçeneğini kullanınız. 160 Şekil 7.8 Renk Renge Yaklaşıyor mu? Örnek Kodu Mavi topumuzu oluşturduktan sonra, yukarıda gördüğünüz kod grubunu topumuza bağlamamız gerekmektedir. Boşluk tuşuna bastığımızda aktif olacak kod grubumuz, topumuza sürekli, ilk kodumuz olan “0^1” saniye de x ve y koordinatları belirten kodumuz sayesinde, sahnemizde yer değiştirme olanağı verecektir. “Eğer” koşullarına bağladığımız “renk., renge yaklaşıyo r muF kodları ise, mavi topumuzun sahnenin orta sındaki kırmızı bölgede mi? yoksa beyaz kalan bölgelerde mi? olduğunu sınamaktadır. Her hareketinden sonra 1 saniye bekleyecek olan mavi topumuz, bulunduğu bölgeyi “sıcak” veya “soğuk” olarak belirtecektir. 7.5 Sor ve Bekle Yukarıda anlattığımız iki algılama kod grubu birbirinden ayrı çalışmaz lar. Ayrı ayrı çalıştırıldığında genellikle bir anlam ifade etmezler. Soru sorarak cevaplar alabileceğiniz ve bu cevaplara göre koşullar oluştura bileceğiniz ya da verilen cevapları sınayabileceğiniz ortamlar oluştur manıza yardımcı olur. Ayrıca, çeşitli listeler oluşturmak için kullanabile ceğiniz bu iki komut, özellikle kullanıcı ve program arasında daha fazla etkileşime neden olacağından, programın kullanıcılar tarafından daha 161 ilgi çekici bir hale gelmesini sağlar. “Son ve b e k le " kod grubu, soru cümlenizi kullanıcıya sorar ve bir iletişim kutusunun açılmasını sağlar. Genel kullanım biçimi Şekil 7.9’da görüldüğü şekildedir. Şekil 7.9 Sor ve Bekle Bu iletişim kutusuna verilecek cevap, altta bulunan “y a n ıt ” koduna kar şılık olarak gelir. Şekil 7.10’da verilen örnekte, basit bir soru cevap man tıksal sınamasının yapılışını görebilirsiniz. Kullanıcımızın programı ça lıştırmasıyla aktif hale gelecek olan bu kod bloğumuzun ilk kısmı, anlat tığımız gibi soru cümlemizi soracak ve sahnenin altında bir iletişim kutu su açacaktır. Bu iletişim kutusuna kullanıcının verdiği cevap saklanacak ve yanıt adlı değişkene değer olarak atanacaktır. Soru cümlemizden sonraki kodlarımız bildiğimiz gibi, koşullu aktivasyon kodlarımızdır. Bu radaki ilk “eğen” kod bloğumuz kullanıcının verdiği yanıtın, yani “y a n ıt ” değişkeninin, değerine bakmaktadır. Eğer bu değer “iy iy im ” ise hemen altındaki kod bloğu aktif hale gelecek ve “Bende iy i y im .” konuşma balonunun gösterilmesini sağlayacaktır. 162 Şekil 7.10 Sor ve Bekle Örnek Kodu Diğer “eğer” kod bloğumuz ise, yanıtın “iy iy im ” olmadığı durumları kontrol etmektedir. Eğer kullanıcımızın verdiği yanıt “iy iy im ” harici bir değere sahipse, bu kez alttaki “eğer” kod bloğumuz devreye girecek ve kullanıcıya “Bende kötüyüm” konuşma balonunu gösterecektir. m Bunu C Dili ile Nasıl Yaparım? Scratch ile tanımlanan “Sor ve bekle” yapısına benzer programları C dilinde yazabilmek için girdi fonksiyonunu [1: sa. 67-71] kullanabiliriz. #include <stdio.h> #include <string.h> int main (void) { char yanit[20]; printf ("Nasilsin? "); gets(yanit); if (Istrcmp (yanit, "iyiyim")) printf ("Ben de iyiyim"); if (strcmp (yanit, "iyiyim")) printf ("Ben de kotuyum"); getchar(); return(0); > 163 Ancak burada karşılaştırma yapmak istediğimiz şey aslında bir dizgi [1: sa. 264-290] olacağı için, ilgili kütüphaneyi [1: sa. 22-23], #include <strin g .h > komutu ile kullanabiliriz. Böylece bu kütüphanede tanımlı olan strcmp() [1: sa. 279-280], gibi fonksiyonları kullanmamız mümkün olur. Bu program kodu ile öncelikle y a n it isimli ve en fazla 20 karakter saklayabilen bir dizgi değişkeni [1: sa. 264-267] değişkeni tanımlan mıştır. Daha sonra, kullanıcıya N asilsin? sorusu yönlendirilir ve kulla nıcının bir cevap vermesi beklenir. Buna göre kullanıcının cevabı y a n it değişkenine atanır ve kullanıcının cevabı strcmp() fonksiyonu ile kont rol edilir. Kullanıcının cevabının iy iy im olduğu durumda ekranda Ben de iy iy im mesajı gösterilir. Kullanıcının iy iy im dışında bir yanıt ver mesi durumunda ise Ben de kotuyum cevabı ekranda gösterilir. Bu program çalıştığında aşağıdaki gibi bir ekran çıktısı oluşur. C:\Documents and Settinf N a s i l s i n ? iy iy im Ben de iy i y im .. 7.6 Mouse x v e y Algılama grubunun bu iki üyesi, Mouse işaretçimizin x ve y konumunu algılamak için tasarlanmıştır. Mouse işaretçimizin sahne üzerindeki ko numunu değer olarak kullanan bu kodlar, mantıksal işlemlerde çok kul lanışlıdır. Kullanım biçimi Şekil 7.11’de gösterildiği gibidir. M ousex M ouse y Şekil 7.11 Mouse x ve y 164 Şekil 7.12’de verilen örnekte, sahne üzerindeki Mouse işaretçimizin ko numuna göre bize mesaj ileten iki koşul kod bloğu bulunmaktadır. “Boş lu k ” tuşuna basıldığında aktif olan bu kod bloğumuz, “Eğer” Mouse işa retçimizin x konumu y konumundan küçük ise ilk koşul bloğumuzu dev reye sokar. boşlukEğer tuşu basıldığında s||fe Mouse x < Mouse y ise M ouse x ise İÜ r^ l„._ Eğeı* M ouse y < Şekii 7.12 Mouse x ve y Örnek Kodu Eğer y konumumuz x konumumuzdan küçük ise, ikinci koşul kod bloğu devreye girip “söyleyin” kodunu çalıştıracaktır. 7.7 Mouse Basılı? Bu algılama grubu üyesi Mouse işaretçimizin sol tuşuna basılıp basılmadığını kontrol eder. Kullanım biçimi Şekil 7.13’deki gibidir. Şekil 7.13 Mouse Basılı? Mouse işaretçimizin basılı olması durumunu kontrol eden bu kod genel likle koşul kodları oluşturmak için kullanılır. Bu kontrol komutunun nasıl kullanıldığını daha iyi anlayabilmek için Şekil 7.14’de verilen örneği bir likte inceleyelim. 165 Şekil 7.14 Mouse Basılı? Örnek Kodu Kullanıcının programı çalıştırmasıyla aktif olan bu kod bloğu, Mouse işa retçisinin sol tuşunun basılı olup olmama durumunu kontrol eder. Mouse işaretçisinin sol tuşunun basılı olması durumunda, alt kısımdaki “48 ba t e r i y i 0 .2 defa çalın " komutu aktif hale gelir. 7.8 Tuşu Basılı? Bu komut, bir önceki komutumuzun kullanım özelliklerine çok benzer bir şekilde çalışır. Burada bir öncekinden farklı olarak klavyedeki herhangi bir tuşun basılıp basılmadığını kontrol edilir. Kullanım biçimi Şekil 7.15’deki gibidir. Şekil 7.15 Tuşu Basılı? Bu tanımlamada “boşluk” ibaresine tıkladığınızda, geniş bir çoklu seçim kutusu karşınıza çıkar. Bu seçenekler ile, “A” dan “Z” ye tüm tuşları, yön tuşlarını ve sayıları bu kod bloğunda tanımlamanız mümkündür. Böyle ce, yazacağınız programda kullanıcı için birçok tuş seçeneği sağlayabilir ve bu tuşları kontrol edebilirsiniz. Şekil 7.16’da verilen örneğimiz koşul kodu haricinde bir önceki örneğimizle çalışma açısından aynıdır. 166 Şekil 7.16 Tuşu Basılı? Örnek Kodu Kullanılan koşul bir öncekinden farklı olarak Mouse tuşu değil boşluk tuşu olarak tanımlanmıştır. 7.9 Uzaklığı Algılama grubu komutlarından olan bu komut, bağlandığı karakterin Mouse işaretçisine ya da sahnede bulunan diğer bir karaktere olan uzaklığını kontrol eder. Eklendiği operatör grubu komutlarında mantıksal işlemler için bir değer sağlar. Kullanım biçimi Şekil 7.17’de görüldüğü gibidir. m o u s e işaretçisi I u z a k lığ ı Şekil 7.17 Uzaklığı Şekil 7.18’de verilen örnekde, programın çalışmasıyla aktif olacak kod bloğumuz, Mouse işaretçimizin, karakterimize olan uzaklığını denetle mektedir. Şekil 7.18 Uzaklığı Örnek Kodu Yeşil renkteki operatör grubu komutuna yerleştirdiğimiz Mouse işaretçisi uzaklığı algılayıcısı işaretçinin, karakterden uzaklığının 100’den küçük olma durumuna bakmaktadır. Eğer işaretçinin uzaklığı 100’den küçükse, komutumuz aktif olup bateri adlı ses dosyasını 0 .2 defa çalacaktır. 7.10 Sayacı Sıfırlayın ve Zamanlayıcı Algılayıcı grubu komutlarından olan sayaç sıfırlama ve zamanlayıcı ko mutları sahnede görünen ya da görünmeyen bir zamanlayıcıyı aktif hale getirir. Kullanım biçimi Şekil 7.19’da görüldüğü gibidir. Şekil 7.19 Sayacı Sıfırlayın ve Zamanlayıcı Zamanla ilişkili olan olaylar, ölçümler veya karakter konuşmaları yap mak istendiğinde bu komutlar kullanılır. Örneğin zaman çizelgesinde ilerleyen iki karakterin konuşmasında kullanılabilecek en uygun komut lar zamanlayıcı bileşenleridir. Bu komutların kullanımını Şekil 7.20’de verilen örneği inceleyerek anlamaya çalışalım. [Merhaba!! a) b) Şekii 7.20 Sayacı Sıfırlayın ve Zamanlayıcı Örnek Kodu Bu örnek için iki karaktere ihtiyacımız vardır. Şekil 7.20-a kod bloğu 1. karakter için oluşturulmuştur. Şekil 7.20-b kod bloğu ise, ikinci karakter için tanımlanmıştır. Görüldüğü gibi Şekil 7.20-a kod bloğunda programın 168 açılmasıyla çalışan komutlarımız, “sayacı s ıf ır l a y ın ” komutuyla zamanlayıcıyı sıfırlamaktadır. “Olana kadar bekleyin” komutuna iliş tirdiğimiz operatöre bağladığımız zamanlayıcı komutunu büyüklük sem bolüyle kontrol etmekteyiz. Zamanlayıcının değeri 5’i geçtiğinde bir alt taki konuşma balonuna ait komut aktif olacak ve ilk karakterimiz “mer haba” konuşma balonunu gösterecektir. Şekil 7.20-b’deki kod bloğunda ise, ikinci karakterimiz için hazırladığımız ve programın çalışmasıyla ak tif olacak olan komutlar bulunmaktadır. Burada da ilk komut sayacı sıfır lar. Bu bloktaki “sayacı s ı f ı r l a ” komutu aslında gereksizdir. Çünkü sadece bir karakterde sayacı sıfırlamanız yeterlidir. Bu karakterimizin bloğunda da zamanlayıcı büyüklük operatörü ile kullanılmıştır. Zaman layıcı değerinin 7 olmasını bekler. Daha sonra, konuşma balonuna ait komut aktif olur. Böylece karakterimiz diğer karakteri “Sana da merha ba” cümlesiyle selamlayacaktır. Burada görüldüğü gibi 7 saniyelik bir akış ile zamanlayıcı kullanarak karakterleri konuşturduk. Bu şekilde oluşturulacak karakter diyalogları, hem oyunlarınızı zenginleştirir hem de oyunun hikâyesini anlatırken size kolaylık sağlar. 7.11 İn Sı Bu komut, karakterler ve sahnelerin bazı özelliklerini operatörlerde kul lanmak için, konumlarıyla ve kostümleriyle ilgili işlemleri gerçekleştire bilmek için kullanılır. Kullanım biçimi Şekil 7.21’deki gibidir. Karakter2 "in x konum u *sı Şekil 7.21 İn Sı örneğin bu tanımlamaları kullanarak, karakterlerin x ve y koordinatlarını sürekli olarak Şekil 7.22’deki gibi birbirlerine eşitleyebiliriz. Bu örneği mizde yine iki karakter kullanacağız. Şekil 7.22-a ile tanımlanan prog 169 ram parçası, takipçi olacak karakterimiz için, Şekil 7.22-b ile tanımlanan kod bloğu ise takip edilecek karakter için verilmiştir. Şekil 7.22-a kıs mındaki program parçası, görüldüğü gibi program başladığında sürekli olarak aktif olarak çalışır. a) b) Şekil 7.22 İn Sı Örnek Kodu “S ü re k li” komutunun içine yerleştirilen eşleştirme kontrolü sayesinde hareket eden ikinci karakterin x ve y konumları sabitlenecektir. Dolayı sıyla, bu örnekte verilen tanımlamalar, sadece diğer karakterimizin takip edilmesi için oluşturulmuş bir kod bloğudur. 7.12 Ses Yüksekliği Bu algılama grubu komutu, bilgisayarınızdaki mikrofonun yakaladığı sesleri sayısal değerlere dönüştürmek amacıyla kullanılır. Genel kulla nım biçimi, Şekil 7.23’deki gibidir. Şekil 7.23 Ses Yüksekliği Bu komutu kullanarak gelen ses yüksekliğiyle karakterleri hareket ettir mek ve çeşitli sınamalar yapmak mümkündür. Şimdi bu komutun nasıl çalıştığını daha iyi anlayabilmek için, Şekil 7.24’de verilen örneği birlikte inceleyelim. 170 tıklandığında Kalemi bastırın Kalemi bastınn Kalem rengini Kalem rengini yapın | Kalem renginiW | değiştirin J Kalem boyunu <30 adım gidin | Kalem boyunu yapın I '^Kİİıllf|j^ ||llP İ|f|l^ l f Ses yüksekliği ■ .-^itMİllaMİ yapın <30 adım gidin | ilSİM&lî Kenarda ise, zıplatın | Kenarda ise, zıplatın | y*yi yapın | Kalem rengini | Q değiştirin I m değiştirin y*yi -! Ses yüksekliği * E T değiştirin y a p ın yapın Te m izle y in Şekil 7.24 Ses Yüksekliği Örnek Kodu Bu örnek kod bloklarının sol taraftaki bölümü, yapacağımız ses yüksek liği analizi programının y koordinatının üst “+” yönüne doğru çizim yapa cak olan karaktere aittir. Sağ taraftaki kod bloğu ise, y koordinatının tarafına, yani aşağı tarafına doğru çizim yapacak olan kod bloğumuzdur. “S ü re k li” komutunun içerisine iliştirilmiş olan kodlarımızın kalem grubu tarafından oluşturulan kısmı görüldüğü gibi kalemin yazım prose dürü içindir. Hareket grubu komutları, sağa ve sola hareket için kullanı lır. “y” koordinatının değişmesi için eklediğimiz komutlardan ilki ses yük sekliğiyle değişmektedir. Diğeri ise, karakterimizi yine sıfır konumuna indirmektedir. Bu sayede ekolayzır görüntülerine benzeyen çizimler ya pacak olan programımız, oldukça ilgi çekici bir hal alır. Son olarak boş luk tuşu, bildiğiniz gibi sahnenizi temizleyecek olan “te m iz le y in ” komu tunu aktif hale getirmek için tanımlanmıştır. 7.13 Yüksek Sesle? Bu algılayıcı komut yüksek sesle aktif olan bir komuttur. Bilgisayarınızın mikrofonuna gelen yüksek sesleri algılayan bu komut, bağlı olduğu ko şul ifadesini aktif hale getirir. Kullanım biçimi Şekil 7.25’deki gibidir. Şekil 7.25 Yüksek Sesle? Şekil 7.26’da verilen örnek kod, yüksek sesin algılanması için hazırlan mış basit bir kod bloğudur. Şekil 7.26 Yüksek Sesle? Örnek Kodu Yüksek sesi hisseden bilgisayarınızın mikrofonu böylece, bağlı olduğu “is e s ü re k li” komutunu aktif hale getirir ve koşul tanımlamasına bağlı olan “10 adım g id in ” komutu da bu sayede aktif olur. 7.14 Sensör Değeri ve Sensör Bu iki algılayıcı grubu komutları genel olarak LEGO Robot setleriyle kul lanılan komutlardır. Bu nedenle bu komutları yapacağımız programlarda kullanmayacağız. Bu tanımlamaların genel kullanım biçimi Şekil 7.27’de görüldüğü gibidir. 172 Şekil 7.27 Sensör Değeri ve Sensör ^^Alıştırm alar 1. Mause işaretçisinin veya sahne kenarlarının karaktere olan pozis yonlarını sınayabileceğimiz komut aşağıdakilerden hangisidir? b) a) c) 2. d) re n g in e y a k la ş ıy o r m u ? Aşağıdaki tanımlamalardan hangisi, komu- tuyla beraber çalışır? a) b) c) d) 3. Aşağıdaki tanımlamalardan hangisi, Mouse işaretçimizin pozisyo nunu sınamak için veya ilgili işlemler yapabilmemiz için tasarlanmıştır? 4. Aşağıdaki komutlardan hangisinin, karakterlerimizi Dir zaman çizel gesinde aktif etmek istediğimizde kullanılması gerekir? a) C) b) |ya k la ş ıyo r m u ? sayacı sıfırlayın d) Zam anlayıcı 5. Aşağıdaki komut parçası için hangi doğrudur? a) b) c) d) 6. seçenekte verilen açıklama Boşluk tuşunun basılı olduğu durumda algılama kodları aktif olur Boşluk tuşu basılı iken karakterler birbirini algılar Boşluk tuşunun basılı olma durumunu kontrol eder Boşluk tuşu basılı ise karakter hareket eder Karakterin koordinat bilgisiyle sınama yapmamız için ihtiyacımız olan komut, aşağıdakilerden hangisidir? b) d) 7. K a r a k te r i |“in x k o n u m u 3 *sı Aşağıdaki algılama grubu komutlarından hangisi, dışarıdaki ses yüksekliğini sayısal değerlere dönüştürür? a) Y üksek sesle? b) c) Ses yüksekliği:! d) 174 Sensör değeri s ü r g ü ]3 ingine y a k la ş ıy o r mu? re n k m j efektini Q Q ile değiştirin adım gidin Kenarda ise. zıplatın renk İD | efektini f i adım gidin Kenarda ise. zu ■ r a adım gidin Kenarda i s e , zıplatın ıge yaklaşıyor mu? BÖ LÜ M 8 8.1 Giriş Ses grubu komutları, Şekil 8.1’de de görüldüğü gibi, karakterlere atanan sesleri çalıştırmak için kullanılırlar. Genel olarak bahsetmek gerekirse bu komutlar, Scratch üzerinde bulunan sesleri veya dış ortamdan çağrı lan sesleri veya kaydettiğiniz sesleri karakterlere atamanız ve kontrol edebilmeniz için oluşturulmuştur. T ü m s e s le r i d u r d u r u n b a t e r i y i u K p d e f a ç a lın v u r u ş u n u b e k le y i n G jB n o t a s ı n ı ( j £ ) d e f a ç a lın E n s trü m a n ı Sesi m d e ğ iş tirin S e s y ü k s e k l iğ i n i ■ Ses y a p ın % y a p ın ililfllSSitaHBİS Şekil 8.1 Ses Komutları 178 8.2 Ses Çal Ses çal grubuna ait olan ilk komut “s e s in i ç a lın ” komutudur. Bu ko mutun kullanım biçimi Şekil 8.2’de görüldüğü gibidir. Şekil 8.2 Ses Çal Çoklu seçim kutusundan Scratch’a ait olan seslerimizi, dışardan yükle yeceğimiz diğer ses dosyalarını ya da kendimizin kaydedeceği sesleri seçerek, bu komut ile birlikte kullanmak mümkündür. Bu komutun kulla nım biçimini daha iyi anlayabilmek için Şekil 8.3’de verilen tanımlamayı inceleyelim. Şekil 8.3 Tıklandığında Ses Çal Bu tanımlama, program çalıştırıldığında, miyav sesinin bir birimlik bir zaman diliminde çalmasını sağlayacaktır. 8.3 Bitene Kadar Çal Seçilen bir ses dosyası içeriğini, sonuna kadar çalmak için, “s e s in i bitene kadar ç a lın ” komutu kullanılabilir. Bu komutun kullanım bi çimi Şekil 8.4’deki gibidir. miyav j s e s in i b i t e n e k a d a r ç a lın ilkte saaamg*s-ismstl Şekil 8.4 Sesini Bitene Kadar Çal Bu program, kullanıcı tarafından çalıştırıldığında aktif olacak ve Scratch’a ait olan miyav sesini çalacaktır. Daha önce ana ekran tanıtı 179 mını yaptığımız bölümde ses kayıtlarını nasıl yapacağımızı anlatmıştık. Burada anlatıldığı gibi hazırlanacak olan bir ses dosyasını, çoklu seçim kutusundan bularak, istendiğinde ya da örnekteki gibi program çalıştırıl dığında aktif olabilecek şekilde tanımlamak mümkündür. Yukarıda ses grubuna ait olan miyav sesini çalan programımız Şekil 8.3’dekinden farklı olarak, seçtiğiniz sesi sonuna kadar çalmasıdır. Şekil 8.3’deki ör nek, programımızın çalışma hızında, sadece programımıza ait olan za man biriminde, bir birimlik bir süre için çalacak iken, Şekil 8.4’de verilen örnekte, sesimiz sonuna kadar çalınacaktır. Kullanıcımız programı çalış tırdığında miyav sesini sonuna kadar çalabilmek amacıyla, Şekil 8.5’deki gibi bir tanımlama yapmak mümkündür. Şekil 8.5 Tıklandığında Sesini Bitene Kadar Çal 8.4 Tüm Sesleri Durdurun Program içerisinde hali hazırda çalan tüm sesleri durdurmak için ise, Şekil 8.6’da görüldüğü gibi “Tüm s e s le ri durdurun” komutu kullanıla bilir. T ü m s e s le r i d u r d u r u n Şekii 8.6 Sesleri Durdurun Şimdi bu komutların kullanım biçimini Şekil 8.7’de verilen programı ince leyerek daha iyi anlamaya çalışalım. 180 Şekii 8.7 Tüm Sesleri Durdur Örnek Kodu Program çalıştırıldığında aktif olacak ses kodumuz, miyav sesimizi aktif edecektir. Bu tanımlama ile, koşul komutu içinde tanımlanan ve karakte rimizin pozisyonunu belirten x değerinin, y değerinden büyük olması durumunda, program içinde aktif olan tüm seslerin durdurulması sağla nır. Böylece daha önce aktif hale getirilmiş olan miyav sesi durdurula caktır. Burada dikkat edilmesi gereken nokta, miyav sesinin kısa bir ses dosyası olması nedeniyle, “Tüm s e s le ri durdurun” komutunun nasıl çalıştığını daha iyi anlayabilmek için daha uzun bir ses dosyasının seçilmesinde yarar olacağıdır. 8.5 Enstrüman Sesleri Ses grubuna ait olan Şekil 8.8’de verilen komutlar, “s e s in i ç a lın ” ko mutundan farklı olarak, enstrüman sesleri için tasarlanmış olan komut lardır. Şekil 8.8 Enstrüman Sesi Sol üstteki komut, davul sesleri için tasarlanmıştır. Soldaki çoklu seçim kutusundan davul sesinin, sağdaki seçim kutusundan ise, seçilen sesin kaç defa çalınacağının tanımlanması mümkün olur. Sol alttaki ses ko mutu, soldaki çoklu seçim kutusundan nota atamak için tanımlanmıştır. Sağdaki aktif bölge ile kaç defa bu sesin çalınacağını tanımlamak müm kündür. Sağ alttaki komut, enstrümanımızı değiştirmek için tasarlanmış tır. Sağ üstteki komut ise, sesler arası zaman farkı oluşturmak için ta sarlanmıştır. Şekil 8.9’da verilen örneği inceleyerek bu komutların nasıl kullanıldığını daha iyi anlamaya çalışalım. Bu örnekte, kullanıcının prog ramı başlatmasıyla çalışacak olan program bloğumuz, yukarıda tanıttı ğımız kodların basit bir bileşimini göstermektedir. t ı k l a n d ı ğ ın d a B|Eh D n b a t e r i y i |M g ) j d e f a ç a lın -i v u r u ş u n u b e k le y in | m b a te riy i G H d e f a ç a lın H g g S n o ta s ın ı d e f a ç a lın fSRjjS v u r u ş u n u b e k le y i n b a t e r i y i ( j J J J d e f a ç a lın M S I v u r u ş u n u b e k le y in mm b a te riy i E n s trü m a n ı mm d e f a ç a lın y a p ın Şekil 8.9 Enstrüman Sesleri Örneği Basit bir müzik alt yapısı gibi çalışan bu programımızda, bateri komutu davul seslerini oluşturmak, “vuruşunu b ekleyin” komutu zaman fark ları oluşturmak, 4. sırada kullandığımız nota komutu bir akor oluşturmak ve en altta bulunan komutumuz ise enstrüman sesini değiştirmek için kullanılmıştır. 8.6 Ses Ayarı Şekil 8.9’da verilen ses komutları, programlarınızda kullanacağınız ses leri artırmak, azaltmak ya da sınamak için tasarlanmıştır. Sol tarafta bu lunan ses komutu, ses yüksekliğini değiştirmek için kullanılır. Şekil 8.9 Ses Ayarı Ortada bulunan ses tanımı operatörlerde kullanıldığı için, sınamalarda ve mantıksal işlemlerde çok işinize yarayacaktır. Sağ tarafta gördüğü nüz komut ise, ses yüksekliğini yüzdesel birimde değiştirmek için kulla nılır. Ses ayarlama komutlarının kullanımını daha iyi anlayabilmek için, Şekil 8.10’da verilen örneği birlikte inceleyelim. d) e) Şekil 8.10 Ses Ayarı Örneği Bu örnekde sonsuz bir döngüde çalışan Şekil 8.10-b kod bloğunda, ses azaltma ve yükselme durumu söz konusudur. Bu kod bloğu bize kulla nıcının programı çalıştırmasıyla sürekli olarak miyav sesini sağlıyacaktır. Şekil 8.10-a, d ve e kod parçacıklarımız birbirleriyle uyumlu halde çalışan kod parçacıklarıdır ve sonsuza dek sırayla çalışmaktadırlar. Şe 183 kil 8.10-a’da görülen kod parçacığımız görevini programın çalıştırılma sıyla yapar ve ortamdan çekilir. Çünkü onun görevi başla komutunu vermektir, başla komutunu alan Şekil 8.10-d’de verilen kod parçacığı mız, ses yüksekliğini kontrol eder ve ses yüksekliği 2 olana kadar ses yüksekliğimizi -1 birim azaltır. Ses yüksekliğimiz 2 birime ulaşınca b i t t i komutunu yayınlar. Şekil 8.10-e’de verilen kod parçacığımız, Şekil 8.10-d’de verilen kod parçacığımızdan gelen b i t t i komutunu algıladı ğında çalışmaya başlar. Ses yüksekliğimiz 99 birimden fazla oluncaya kadar ses yüksekliğimizi l ’er birim artırır. Ses yüksekliğimiz 99 birimden fazla olduğunda döngüden çıkar ve başla komutunu yollar, başla komu tunu alan Şekil 8.10-d’deki kod parçacığımız çalışmaya başlar ve bu döngü bilgisayarımız çalıştığı sürece devam eder. Şekil 8.10-c’de ses yüksekliğinin yüzdesel birimler halinde değiştirilme örneği gösterilmek tedir. Bu kod parçası, programımız çalışmaya başladığında 30 saniye bekleyecek, ses yüksekliğini % 0 yaptıktan sonra tüm programımızı dur duracaktır. 8.7 Ses Tempo Ayarı Şekil 8.11’de görülen komutlar, bir müzisyen gibi düşünürsek, kullandı ğımız seslerin çalışma hızlarını değiştirmek için, yani metronom hızını artırmak ya da azaltmak için kullanılır. T e m p o y u ^ H | d e ğ iş tirin Tem po Tem poyu m b p m y a p ın Şekil 8.11 Ses Tempo Ayarı Diğer bir deyişle, iki ses arasındaki zaman farkını, vuruş cinsinden da raltmak ya da genişletmek, bu komutlar ile mümkündür.. Şimdi Şekil 8.12’de verilen örneği birlikte inceleyelim. 184 d) e) Şekil 8.12 Ses Tempo Ayarı Örneği Bu örneğimiz ses yüksekliği örneğimizle aynı yapıya sahiptir. Ses kodla rımızı kullanırken takip etmemiz gereken ses tekrar hızı (Metronom ( Bpm)) bu örneğimizde sonsuz döngü içerisinde 20 birime düşüp 99 bi rim üzerine çıkana kadar değişecektir. 30 saniye süresince gerçekleşe cek sonsuz döngümüz, tempo hızını değiştirmek konusunda gayet açık ve kolay anlaşılabilir bir örnek olacaktır. Örneğimizde Şekil 8.12-a’daki kod parçacığımız döngümüzü başlatacak başla komutunu verip ortam dan çekilecektir. Şekil 8.12-b’de verilen kod parçacığımız başla komu tunu aldığında tempo değerimiz 20 olana kadar tempo değerimizi -1 bi rim artıracak, 20 birime ulaştığında döngüden kurtulup bitti komutunu yollayacaktır, bitti komutunu alan Şekil 8.12-d’deki kod parçacığımız tempo değerimiz 99 birimin üzerine çıkana kadar tempo değerimizi 1 birim artıracak ve 99 birimin üzerine çıktığında döngüden kurtulup başla komutunu yollayacaktır, başla komutunu alan Şekil 8.12-b’ de verilen kod parçacığı görevini yapıp, Şekil 8.12-b’deki koda geçecektir. Bu döngü 30 saniye boyunca devam edecektir. Şekil 8.12-c’de verilen kod parçacığımız tempo değerimizi 60 (Bpm)’e ayarlayıp tüm programı dur 185 duracaktır, tempo değerimiz 20’den küçük olamadığı için döngümüzde alt birim 20‘ye ayarlanmıştır. Alıştırmalar 1. Karakterimiz için bir ses kaydetmek istersek, aşağıdakilerden hangi işlem sırasını izlemeliyiz? a) b) c) d) Herhangi bir sesi çalın kodunda bulunan çoklu seçim kutusundan kayıt edin seçeneğini kullanırız. Sesi bilgisayarda kayıt edip, Scratch’e aktarırız. Sesler sekmesinden kayıt düğmesine basar ve kayıt yaparız. Hepsi. 2. Projemizin içerisine aktardığımız bir ses dosyasının çalışma hızını aşağıdaki kodlardan hangisi ile değiştirebiliriz? b p m y a p ın E n s trü m a n ı 0 3 3. y a p ın Ses yüksekliğinin sayısal değerini sahnede görebilmek için hangi seçim kutusunu işaretlememiz gerekir? a) b) c) d) Sesler kısmında ses kodunun yanındaki seçim kutusu Tempo kodunun yanındaki seçim kutusu Seçim kendiliğinden olur Herhangi bir ses yüksekliği kod kullandığımızda ses yüksekliği sayısal değeri sahnede belirir. 4. Sahnemizde bulunan ses değerini gösteren imlecin üzerinde ses yüksekliğini değiştirmemiz için gereken sürgü fonksiyonunu nasıl oluştu rabiliriz? a) b) c) d) 186 İmleci çift tıklayarak imlecin üzerinde işaretçinin sağ tuşuna basarak sürgü seçimi yaparız a ve b Hiçbiri B C L IIA İ 9 9.1 Giriş Oyun programları birçok farklı programlama dili ya da ortamı kullanıla rak geliştirilebilir. Oyunlar yaşamın eğlenceli ve eğitici unsurlarıdır. Bu nedenle oyun programlarını geliştirmek de, bu oyunları oynamak da çok zevklidir. Oyunlar ile zevkli zaman geçirirken aynı zamanda birçok şeyi de bu süreçte hiç farketmeden öğreniriz. Örneğin bir oyun programı ge liştirirken öncelikle yazılım mühendisliği ile ilgili program yazma ve yazı lım geliştirme süreçlerini öğrenme konularında pratik yapmak mümkün dür. Bunun yanısıra, geliştirilen oyunun ihtiyaçlarına göre, birçok konuyu araştırıp oyunlarımıza yansıtmamız gerekir, örneğin oyunda kullanaca ğınız bir topun gerçek yaşamdaki gibi zıplamasını sağlamak için gerekli fizik kurallarını araştırmak, matematiksel hesaplamaları yapmak ve bazı durumlarda özel algoritmaları araştırarak oyunlarımıza uygulamak ge rekir. Bu şekilde, yazılım mühendisliği sürecinde öğretilen birçok konu ile ilgili bir pekiştirme yapmak ya da bu eğitim öncesinde bu konular hakkında farkında olmadan bir fikir sahibi olmak, başka bir deyişle bu konulara aşina olmak, mümkün olur. Benzer şekilde, geliştirilecek olan oyunun içeriği ile ilgili de araştırmalar yapmak, hikayeler yazmak ve bir akış oluşturmak gerekecektir. Bu durumda daha önceki eğitimlerimiz sürecinde öğrendiğimiz konuları oyunlarımıza uygulayabilme ve bilme diğimiz diğer konuları ise araştırarak öğrenme gereksinimi duyarız. Böy lece oyun programlan, oyun geliştiricilere birçok/farklı yeteneği farkına bile varmadan kazandıran ve aynı zamanda yaratıcılıklarını artıran, zevkli bir üretimin içine çeken araçlar haline gelir. Oyunlar sadece oyun programlarını geliştirenler için değil, aynı zaman da bu oyunları oynayan kişiler için de farkına varmadan, bir eğlence ve bir akış içinde öğrenme olanakları sunar. İngilizceyi aksam ile konuşa bilmek, konuşulanları anlayabilmek, sosyal iletişim ortamlarında daha 188 başarılı olabilmek ve hatta tarih, sosyal bilgiler, matematik gibi birçok konuda pekiştirme yapabilmek, oyunlar sayesinde mümkündür. Günü müzde sadece eğlence amacıyla değil aynı zamanda ciddi bir amaca da hizmet edebilecek şekilde hazırlanmış bu tür oyunlara ciddi oyunlar (serious games) ismi verilmektedir. Ciddi oyunlar, çeşitli hastalıkların tedavi süreçlerinin daha etkin ve verimli olthab'mı sağlamak, çeşitli eği tim süreçlerini desleklemek gibi birçok alanda da yaygın olarak kullanıl maya başlanmıştır. Yakın gelecekte>oyurilaMn b r t i y ü ^ çok daha fazla dikkat çekecek ve oyunlar önemli bir sektör olarak sosyal yaşantımızı etkileyecektir. Oyun programlarınîrf geliştiriTmesif^malîyeti yüksek ve son derece profeS^bVıîef bir ekip Çalışmasını'gerektirir. Senaristler oyunların senaryolaM t hazırlarlar. Grafik tasarımcıları oyun ortamı ve karakterleri ile ilgili gerekli grafik tasarımlarını ve modelleri geliştirirler. Animatörler bu Ü » tamlardaki nesnelerin ve karakterlerin animasyonlarını hazırlarlar. Oyun progTamlayıcıları ise, tüm bu çalışmaları birleştirerek oyunların gelişti rilmesini ve yaşama geçirilmesini-sağlarlar. Bu'süreçte birçok araç kul lanılır, örneğin oyun motorları ,bu araçlardan bibidir. Profesyonel oyun geliştirme, çalışmaları bu nedenle uzmanlık gerektiren, pahalı ve zah metli bir. süreci kapsar. Ancak Scratch, program geliştirmek için gerekli temel kavramları öğre tirken, etkin ve etkileşimli güzel amatör oyunları geliştirebilmeye de ola nak tanır. Scratch’ın görsel programlama yetenekleri sizierin de,oynadığ-tnız oyunlara benzer oyunlar geliştirebilmenizi sağlar. Bu bölümde daha etkili oyunlar- geliştirebilmek için nelere dikkat etmek gerektiği, oyunlarımızı nasıl* tasarlamamız gerektiği ve oyunlarımızı geliştirirken izlememiz gerek yöntemler özetlenmektedir. Oyun programlama ile ilgili daha detaylı bilgiye, Atılım- Üniversitesi Açık Ders Kaynakları, Oyun Programlama web sayfasından [5] ulaşabilirsiniz. Scratch ile geliştirilen bazı örnek oyunlara ise, Atılım Üniversitesi Açık Ders Kaynakları, Scratch ile Programlamayı Öğreniyorum web sayfasından [6] ulaşabi lirsiniz. 9.2 Oyunlarda Bulunması Gereken Temel Unsurlar Oyunlarda bulunması gereken en temel özelliklerden birisi oyundaki eğ lenceli ve sürükleyici boyuttur. Oyun oynayan kişiler genellikle oyun oy nama sürecinde bulundukları dış dünya ile olan iletişimini koparırlar. Kendilerini oynadıkları oyuna kaptırırlar. Buna neden olan en öenemli iki unsur oyunların eğlenceli ve sürükleyici özellikllikleridir. Bu durumda, geliştireceğimiz oyunda bu iki unsurun en üst seviyede bulunmasını sağlamamız gereklidir. Oyunlardaki sürükleyiciliği sağlayan unsurlardan birisi oyunlardaki sevi ye (/eve/) oluşumudur. Oyun oynayan kişiler genelde bir seviyeden di ğer seviyeye geçtiklerinde bir merak içinde olurlar. Bu yeni seviyede ne ler olacağını merak ederler ve bir heyecan duyarlar. Oyunlardaki sürekliliği ve eğlenceyi dolayısıyla heyecanı artıran unsur lardan birisi de oyun oynayan kişilerin kendileri ile ya da aynı oyunu oy nayan diğer kişiler ile bir yarış (competition) ortamına girmeleridir. Bu yarış ortamında kişiler daha başarılı olabilmek için bir çaba içine girerler ve böylece oyunun akışına ve heyecanına kendilerini daha fazla kaptı rırlar. Bu süreçte insanlar önceden edinmiş oldukları bilgi ve becerilerini kullanarak ya da diğer kişilerden farklı olabilmek ve başarıyı elde ede bilmek, yarış ortamında farklı olabilmek için araştırmalar yaparlar. Bu durum da oyunların eğitici (education) boyutunu ortaya çıkarır. Her oyun ortamında açık ya da gizli birçok eğitici mesaj farkında olarak ya da hiç farketmeden oyun oynayan kişiye iletilir. Bu durum oyunlardan 190 elde edilecek olan kazanımları artırırken, oyunların daha eğlenceli ve daha sürükleyici olmasını sağlar. Oyun geliştirme süreci birçok farklı aşamadan oluşur. Şimdi başarılı bir oyun projesini geliştirirken dikkat edilmesi gereken noktaları inceleyelim. 9.3 Oyun Geliştirm e Süreci Öncelikle geliştireceğimiz oyunu kimlerin oynamasını istiyorsak ve hangi amaçla oyunumuzun oynanmasını istiyorsak buna yönelik olarak bir araştırma yapmamız gerekir. Oyunlar her yaş grubundaki insanlar tarafından oynanırlar. Bebekler, çocuklar yetişkinler ve yaşlılar, her yaş grubundaki kişiler farkına varmadan ya da bilinçli bir şekilde oyun oynar. Aynı şekilde her kültürden kişiler, kadınlar ve erkekler, farklı dili-'konuşan ve farklı alışkanlıkları olan kişiler de oyun oynarlar. Bu nedenle bir oyun tasarlanırken öncelikle hangi yaş grubuna ve hangi hedef oyuncu kitle* sine yönelik olarak oyunun hazırlanacağı belirlenmelidir. Bu durum oyun tasarımındaki iik ve olmazsa olmaz bir aşamadır. Bu kararı aldıktan sonra oyunumuzu geliştirmeye başlayabiliriz. Oyun geliştirme süreci de aslında bir yazılım geliştirme sürecinden farklı değildir. Şekil 1.1 ’de veri len yazılım geliştirme aşamalarının, oyun geliştirme sürecinde de takip edilmesi gerekir. 9.4 G ereksinim lerin Tanımlanması Daha sonra bu hed#f’kullanıcı kitlesinin, geliştireceğimiz oyundan bek lentileri bizim için önemli bir unsur olacaktır. Biz buna gereksinimlerin tanımlanması süreci diyoruz. Genellikle, örneğin okul öncesi çocuklar ile ortaöğretim Sürecindeki kişilerin, gençlerin, orta yaştaki kişilerin ve yaşlı ların oyunlardan beklentileri, oyun ortamında heyecan duymalarına ne den olabilecek unsurlar ve oyun oynama amaçları birbirinden farklı olur. Bu nedenle oyunumuzu oynaması hedeflenen kullanıcı kitlesinin fiziksel ve zihinsel yetenekleri hakkında, beklentileri ve davranışları hakkında 191 yeterince bilgi sahibiolmamız gerekir. Bu amaçla bu kişiler ile görüşme ler yapabiliriz. bUiMşiteri fafkiı ortamlarda belli sürelerde gözlemleyebili riz ve bu gruptaki kişiler için yapılmış olan diğer araştırmaları inceleyebi liriz. 9.5 Oyunun Amacı Oyunlar farklı amaçlar için farklı biçimlerde tasarlanabilir. Bu nedenle oyunumuzu tasarlamadan önce ne tip bir oyun geliştireceğimize karar vermemiz gerekir. Bu kapsamda geliştirilecek olan oyunları üç temel kategoride gruplamak mümkündür: beceri ve hareket oyunları, strateji oyunları ve benzetim ve sanal gerçeklik, arttırılmış gerçeklik oyunları. Beceri ve hareket oyunları (s/c/// and action games) (Şekil 9.1), oyun cuların belli yeteneklerini kullanmalarına ve geliştirebilmelerine yönelik oyunlardır^ Şekil 9.1 Örnek Beceri Oyunu (Pac-Man) Bu. oyunlarda genellikle klavye yerine özel pedal, joistik ya da oyun or tamı için özel olarak geliştirilmiş olan iletişim araçları kullanılır. Bu oyunlarda oyuncuların hızlı bir şekilde tepki vermesi beklenir, yüksek seviyede el ve göz koordinasyonu gereklidir. Yarış oyunları, dövüş oyunları ve labirent oyunları bu gruba girer. 192 Strateji oyunları (strategy games) ise (Şekil 9.2) el ve göz koordinas yonundan çok bilişsel seviyede işlemleri gerektiren türdeki oyunlardır. Şekil 9.2 Örnek Strateji Oyunu Bütün beceri ve hareket oyunları motor yeteneklerine yönelikken, strate ji oyunları için bu gerekli değildir. Strateji oyunları daha fazla zaman ve düşünmeyi gerektirir.' Rol oynama oyunları, savaş oyunları, şans oyun ları, eğitsel oyunlar ve topluluk oyunları bu gruba girer. Benzetim ve sanal gerçeklik/arttırılmış gerçeklik oyunları (simulation andVirtualreality/augmented reality games) işe (Şekil 9.3) daha çok üç boyutlu (3B) oyunlardır. Benzetim ( simuiation), gerçek yaşam daki olaylgrm ve davranışların bilgisayar ortamında taklit edlitrteşi hali dir. Benzetimler günümüzde eğitim amaçlı ve oyun hikayelerinin birer parçası olarak çok yaygın olarak kullanılmaya başlamıştır. C) Şekil 9.3 Arttırılmış Gerçeklik Oyunları Örneğin Şekil 9.3-a’da görülen resim, gerçek bir otobüs ortamına ait bir benzetime aittir. Bu benzetim ortamı, gerçek otobüs ile ilgili tüm fonksiyonellikleri ve etki-tepki sonuçlarını modellemektedir. Böyle bir benzetim ortamı, gerçek bir otobüsün kullanımı ile ilgili çeşitli eğitimlerin alınması nı mümkün kılar. Sanal gerçeklik (Virtual reality) ise, gerçekte var olan ya da hayal gücümüzün bir eseri olarak geliştirdiğimiz bir ortamın bilgi sayar ortamındaki benzetimine verilen addır. Aslında sanal gerçeklik de bir anlamda bir benzetim ortamıdır. Arttırılmış gerçeklik (augmented reality) ortamları ise, gerçek ortam bilgileri ile sanal ortam bilgilerini bü tünleştirerek etkileşimli benzetim ortamları sunar. Örneğin Şekil 9.3-b’de görülen artırılmış gerçeklik ortamı, oyunu oynayan kişinin el hareketleri ni fark ederek, benzetim ortamındaki top ile temasını anlamakta, bu iki farklı ortamdaki etkileşim sonucu el topa çarptığında, topların bir sepette 194 toplanması sağlanmaktadır. Bu tür ortamlar bazı durumlarda özel şap ka, gözlük gibi ek aksesuarları gerekli kılar. Örneğin eğitici araç simulatörleri, özel amaçla geliştirilmiş eğitim simulatörleri, Şekil 9.3-c’de görül düğü gibi Wii oyunları da bu gruba girerler. 9.6 Genei Tasarım Oyunların tasarım süreci farklı çalışmaları gerektirir. Bunlardan en önemlisi oyun hikayesinin tasarımıdır. Oyun hikayesinin tasarımı aynı zamanda oyun arayüzünün tasarımını, oyuncular ve oyun ortamındaki etkileşimlerin tasarımını ve oyun akışının ve seviyelerinin tasarımını da kapsar. Bu tasarımın ardından, oyun hikayesi kapsamında bulunan di ğer oyun unsurlarının tasarlanması gerekir. Bunun yanısıra oyun geliştiriminde kullanılacak olan teknolojik araçların kararlaştırılması ve bunla rın birbirleri ile bütünleşik olarak nasıl kullanılacağının belirlenmesi, oyunda kullanılacak olan teknolojilerin tasarımını gerektirir. Bu bölümde oyun hikayesinin tasarımı ile ilgili detaylar verilecek diğer taraşım detay larına girilmeyecektir. 9.7 Seviye Tasarımı Oyun içindeki merakı ve heyecanı artırabilmek için oyun birkaç seviye (/eve/)’den oluşabilir. Oyun seviyeleri daha sonra anlamlı bir şekilde bir birleri ile bağlanır. Oyuncunun bir alt seviyeyi başarı ile tamamladığında ve bu seviye için tanımlı olan hedeflere ulaştığında bir sonraki seviye den oyuna devam etmesi sağlanır. 9.8 Sahne Tasarımı Oyun hikayesi (game story) oyunun en temel kaynağıdır. Oyun hikaye si oyun içindeki tüm akışları ve etkileşimi belirler. Oyun hikayesi çeşitli oyun sahne (scene)’lerinden oluşur. 195 Bir oyun sahnesi, genel oyun hikayesinin belli bir zaman diliminde ve belli bir yerde geçen parçacığıdır. Bu nedenle bir oyun tasarımında oyun sahnelerinin tasarlanması ve bunların uygun bir şekilde birbirleri ile bağlanması son derece önemlidir. Bir oyun sahnesi tasarlanırken, oyun sahnesinin ne zaman, nerde, han gi bağlamda, hangi karakterler ile, hangi oyuncular için, hangi bakış açı sı ile hangi hareketin sonucunda, ne tür etkileşim ve iletişim ortamlarını destekleyecek şekilde tasarlandığı ile ilgili unsurların mutlaka detaylı olarak belirtilmesi gerekir. Şekil 9.4’de bir sahne tasarımında bulunması gereken unsurlar özetlenmiştir. Şekil 9.4 Oyun Hikayesi Tasarımı Oyun hikayesi ve sahne tasarımları için genellikle hikaye panosu (story board) yöntemi kullanılmaktadır. Buna göre oyun içindeki tüm sahneler kağıt ve kalem kullanarak ya da bilgisayar ortamında karalama şeklinde tasarlanır ve ilgili sahneler ile gerekli tüm açıklamalar Şekil 9.5’de görül düğü gibi bu tasarımların yanına eklenir. 196 H ■ 0 Sahne-1 Güneşli bir öğlen vak ti, yeşil bir alan ve aydınlık bir gün. Kır M mızı bir karavan (mavi kapılı), güneş ve bir ağaç sahnede bulunmak tadır. Oyuncu karavana tıkladığında Sahne-2'ye geçiş yapılır. ... Sahne-2 Şekil 9.5 Örnek Hikaye Panosu Bu detaylar sahnedeki tüm etkileşim ve nesneler ile ilgili ve gerekli bilgi leri kapsamalıda. 9.9 Hikaye Parçacığı Hikayeler ve senaryolar ayrıca hikaye parçacığı (story beat)’ ndan olu şur. Hikaye parçacığı, oyun hikayesi içinde bir ya da daha fazla sahne de geçebilen küçük parçalardır, örneğin “çocuk annesini arar, annesini bulur, annesini kaybeder* hikayesi 3 hikaye parçacığından oluşmakta dır. Hikaye Parçacığı Çizeneği (Story Beat Diagram), oyunun hikaye parçacıkları arasındaki bağıntıları göstererek, oyun akışını ve alternatif akışları gösteren, Şekil 9.6’da görüldüğü gibi oval şekillerden ve oklar dan oluşan çizeneklerdir. Bu çizenekler özet ve özetten detaya birçok seviyede hazırlanabilir. 197 i \ ■itasını o Ş re n / ^ V-— but 3 \ _; ' • " '*" ' n \ * ® S pİ ! o/ i ’ * j p T - '-._.tt_.,.-^ ’ V 1 . Seviye H cem p '''--- - Şekil 9.6 Örnek Hikaye Parçacığı Çizeneği Örneğin, Şekil 9.6’da görülen her bir hikaye parçası ayrıca detaylandırılarak farklı bir hikaye parçacık çizeneği ile gösterilebilir. Böylece aşama lı olarak tüm hikayenin detayları bu şekilde dokümante edilir. 9.10 Hikaye Seçenekleri ve Sonuçlar Oyun hikayesi, oyunu oynayan kişinin katılımını artırmak, oyuncuyu oyun içinde daha özgür bırakmak ve dolayısı ile oyundaki heyecanı ve akışı artırabilmek için oyuncunun karar vererek seçebileceği bazı seçe nekleri de oyuncuya sunabilir. Bazı oyunlar oyuncuya Şekil 9.7’de gö rüldüğü gibi hiçbir seçenek sunmadan tasarlanabilir. ® Şekil 9.7 Seçenek Olmayan Tasarım Ancak bu tür bir tasarım oyuncu tarafından sıkıcı olacağından, oyuncu yu aynı oyunu tekrar oynamasını sağlamak için yeterince çekici olama 198 yacaktır. Bu tasarıma bir alternatif olarak oyuncuya Şekil 9.8’de görül düğü gibi birçok seçenek sunulabilir. Ancak bu seçeneklerin her birisinin sonucunda da oyunun akışında herhangi bir değişim olmaması nedeniy le, oyuncu hangi seçeneği seçerse seçsin oyun aynı şekilde devam edecektir. Yine bu durum kısa bir süre sonra, oyuncunun bu durumu fark etmesiyle, oyuncu tarafından sıkıcı olacak ve sürükleyicilik açısın dan zayıf bir tasarım olacaktır. m Şekii 9.8 Anlamsız Seçenek Tasarımı Bunun yanı sıra, oyuncuya Şekil 9.9’da görüldüğü gibi sonsuz seçenek sunmak, oyuncunun hiç sıkılmadan sürekli oyunun içinde bir şeyleri keşfetmesine neden olacaktır. Şekil 9.9 Sonsuz Seçenek Tasarımı Bu durum oyuncu açısından sürükleyici ve merak uyandırıcı bir unsur olmakla birlikte, böyle bir oyunun tasarımı teknik olarak imkansız ola caktır. Çünkü oyuncunun herbir seçeneğinin sonucuna göre farklı bir şekilde oyun içinde ilerlemesini sağlamak, oyun maliyetlerini artıracağı gibi, oyunun tasarımının ve kontrolünün zorlaşmasına neden olacaktır. 199 Diğer taraftan oyuncuya farklı seçenekler sunarak, oyuncunun yanlış bir seçeneği seçmesi sonucunda Şekil 9.10’da görüldüğü gibi oyunun sonlandırılması da diğer bir tasarım yaklaşımıdır. Ancak bu durumda, oyun cunun yanlış farklı seçenekleri seçmesi sonucunda oyunun sonlandırılması nedeniyle oyundan sıkılması olasılığı yüksektir. Şekil 9.10 Akıllı Seçenek Tasarımı Şekil 9.11’de verilen seçenek tasarımı en ideal tasarımdır. Buna göre oyuncu farklı seçenek alternatiflerini seçebilmekte ancak sonuçta bu seçeneklerde tanımlanan görevleri başarı ile tamamlaması sonucunda her durumda aynı son noktaya ulaşabilmektedir. v t : • Şekil 9.11 İdeal Seçenek Tasarımı Sonuç olarak oyunlardaki seçenek tasarımlarını yaparken oyunculara makul bir seviyede seçenek hakkı tanınmalıdır. Ancak bu seçenekler 200 teknik olarak programlanabilecek bir sınırda olmalıdır ve işlerin kullanı cının tercih ettiği bir sırada da gerçekleşebilmesine izin verilmelidir. ^ Alıştı imalar 1. En Sevdiğiniz oyunu bu bölümde anlattığımız Amaç, Genel Tasa rım, Seviye Tasarımı, Sahne Tasarımı, Hikaye parçacığı, ve Hikaye se çenekleri açısından değerlendirerek yeniden dokümante ediniz. 2. Kitabımızın 12. Bölümünde verilen oyun tasarımını, bu bölümde anlatılan Amaç, Genel Tasarım, Seviye Tasarımı, Sahne Tasarımı, Hi kaye parçacığı, ve Hikaye seçenekleri açısından değerlendirerek yeni den dokümante ediniz. 3. Kendi oyununuzu bu bölümde anlattığımız Amaç, Genel Tasarım, Seviye Tasarımı, Sahne Tasarımı, Hikaye parçacığı, ve Hikaye seçe nekleri açısından değerlendirerek yenidentasarlayınız. 201 e C l Om i c 10.1 Giriş Kitabımızın bu bölümünde sizlere Nasıl yaparım? sorusunun doğrudan yanıtını veren bir çalışma hazırladık. Bu bölümü hazırlarken Scratch programının web sayfasında bulunan sıkça sorulan sorular kısmındaki, en sık sorulan 5 soruyu öncelikle hedefledik. Bu sorular yeni başlayan lar için oldukça hayati, temel hareketleri içermektedir. Çokça faydasını göreceğiniz bu bölümün, projelerinizde yapmak istediğiniz ancak prob lemlerle karşılaştığınız durumlarda size bir anahtar gibi yardımcı olaca ğını umarız. 10.2 Nasıl Kostüm Değiştiririm? Aslında bu sorunun cevabı oldukça basittir. Karakterinize tıkladığınızda açılan kod sayfasının hemen üstünde Şekil 10.1’de verilen resimde kare içine aldığımız sekmeye tıklarsanız, Şekil 10.2’de görülen kostümler ek- Bu ekranda karakterinizi çoğaltarak ya da çoğaltmadan üzerinde deği şiklikler yapabilirsiniz, örneğin biz kedimizi çoğaltıp, gözlerini şaşı yap 204 tık, bir dil ve siyah benekler ekledik. Burada asıl önemli olan soru, yeni kostümler kullanmanın size nasıl bir faydası olacağıdır. Şekil 10.2 Kostümler Ekranı Bunu daha iyi anlayabilmek için, bir kuş karakterimizin olduğunu düşü nelim. Bu karakterin sahnede gerçekçi bir uçuş hareketini yapmasını sağlayabilmek için, kanat çırpma hareketini göstermemiz gerekir. İşte tam bu noktada kostümler arası geçiş, hayati bir önem kazanır. Böyle bir senaryoda kuşunuza kanat çırptırabilmeniz için öncelikle aynı kuşun, kanatlarının bir yukarıda, birde aşağıda olduğu iki resminin olması gere kir. Bu durumu daha iyi anlayabilmek için birlikte böyle bir kuş tasarla yalım. Bunun için öncelikle Şekil 10.1’de görülen ekrana gidelim. Bu ek randan kostümler sekmesini seçelim. Bu sekmeyi seçtikten sonra açı lan pencerede animals yazan dizinde karşımıza çıkan hayvan resimle ri arasından “p a r r o tl-a ” isimli papağanı seçip, tamam tuşuna basarak projemizin içine bu resmi aktaralım. Bu noktada Şekil 10.3’de görünen ekran gibi bir ekranınızın olması ge rekiyor. Bu durumda artık kedilere ihtiyacımız olmadığı için kedileri, 205 “kopya” düğmesinin yanındaki “x” düğmesine basarak silebilirsiniz. Böy lece artık kostüm seçeneklerimiz arasında sadece papağanımız kala caktır. Şekil 10.3 Kanatları Yukarıda Olan papağan Resmi Ancak bu tanımlamalar papağanımızın uçması için yeterli değildir. Ka natları aşağıda olan papağanımızı da projemize aktarmamız gerekiyor. Bunun için papağanımızı projemize eklediğimiz adımları tekrarlayabili riz. Ancak bu sefer “p a r r o t l- b ” isimli papağanımızı projemize aktar mamız gerekiyor. Böylece kanatları aşağıda olan bir papağan resmini de projemize eklemiş olacağız. Artık Şekil 10.4’de görülen ekrana ben zer bir ekranımız oldu. Şimdi papağanımızı uçuracak kodlarımızı birlikte yazalım. Program kodları içerisinde kostüm değişikliğini birçok farklı şe kilde gerçekleştirmek mümkündür. Kostüm isminin ya da resminin sol tarafında görünen, papağanın solundaki numaralar, kostüm numaraları dır. 206 Şekil 10.4 Kanatlan Aşağıda Olan Papağan Resmi Bu iki yoldan birisini kullanarak kostüm değiştirebilirsiniz. Şekil 10.5’de verdiğimiz kod sayfasında, kuşumuzu uçurabilecek kodlar görülmekte dir. Burada kostüm geçişlerinin hayati bir önemi vardır. Bu nedenle, sağ taraftaki uçma görüntüsü için gerekli olan kod bloğunu öncelikle incele yelim. Şekil 10.5 Kostüm Kodlan 207 Program çalıştığında aktif olan kod bloğumuz, S ürekli kodunun içine yerleştirdiğimiz iki farklı kostüm arasına yerleştirilmiş zaman farklarıyla, kuşumuzu uçar gibi göstermektedir. Aslında burada iki zaman farkı kul lanılarak kuşumuzun iki kostümü arasında geçiş yapması sağlanmıştır. Burada ok ile gösterdiğimiz yön düğmesini seçmezseniz, papağanınız doğru yönde uçmayabilir. Bu nedenle bu düğmenin seçildiğinden emin olmalısınız. ; 10.3 Sahneyi Nasıl Değiştiririm? En sık rastladığımız sorulardan bir diğeri de, “Sahneyi n a s ıl değiş tir ir im ? ” sorusudur. Başka bir sahneye geçmek için nasıl yöntemler vardır? Bu sorunun cevabı oldukça uzun olabilir. Ancak temel arka plan değiştirme yöntemlerini burada kısaca sizinle paylaşacağız. Arka planla rı da, tıpkı karakterler gibi, kodlarınızı sürükleyip bırakabileceğiniz bir kod sayfasına sahiptir. Tıpkı karakterlerin kostümleri gibi, arka planları da çoğaltıp ya da çoğaltmadan üzerinde değişiklikler yaparak bir ses ekleyerek istediğiniz gibi tasarlayabilirsiniz. Bu işlerin nasıl yapıldığını anlayabilmek için öncelikle, Şekil 10.6’da görülen Arka p lan lar sek mesini seçerek, Şekil 10.7’de verilen arka planlar sayfasına geçelim. / Y a z ıla r \ A rk a p la n la r \ S e s le r '\i Şekil 10.6 Arka planlar Sekmesi Bu sekmeye ulaşabilmek için, ana ekranda karakterlerimiz ve sahnemi zin imleçlerinin bulunduğu yerden sahne’yi seçmeniz gerekmektedir. Aksi durumda Arka p lan lar sekmesini göremezsiniz. Çünkü ilk ayar olarak karakter seçili bir halde Scratch programı çalışmaktadır. 208 Şekil 10.7 Arka planlar Sayfası işte burada programınıza aktaracağınız bir resim ya da bu sahne üze rinde düzenle seçeneğiyle yapacağınız değişiklikler, sahnenizi oluştur manıza yardımcı olacaktır. Şimdi birlikte karakterin hareketlerine bağlı olarak değişen bir arka plan örneği hazırlayalım. öncelikle biraz önce tasarladığımız papağan karakterimizi bu iş için kul lanabiliriz. Papağanımız sahnenin sol tarafındayken sahnemiz mavi ol sun. Karakterimiz sağa doğru ilerledikçe sahnemiz kırmızıya dönüşsün. Bunun için ihtiyacımız olan şey öncelikle biri kırmızı ve biri mavi olan iki sahne tasarımıdır. Bunun için Şekil 10.7’de görünen ekrana gidin ve Kopya düğmesini tıklayın. Şuan iki ayrı beyaz sahnemiz oldu. Şimdi Düzenle seçeneğinden açılan editördeki kova aletiyle mavi boya dan sahnemize dökün ve Tamam seçeneğini tıklayın. Mavi sahnemiz ha zır. Şimdi diğer beyaz sahnemizi seçin ve aynı adımları kırmızı sahne mizi hazırlayabilmek için tekrarlayın. Şimdi iki sahnemiz de hazır oldu. Karakterimizin ve sahnemizin kodlarına geçmeden önce, sahne isimle rini sahnenin hemen yanında bulunan sahne ismi bölümünden değişti rin. İsimleri mutlaka hatırlayacağınız ve o sahne ya da karakterle ilişkilendirebileceğiniz isimler seçerek tanımlamalısınız. Örneğin burada kır- 209 mızı sahnemize “k ır m ız ı”, mavi sahnemize de “mavi” ismini vermek, kodlarla uğraşırken işimizi oldukça kolaylaştıracaktır. Karakterimizin hareketlerinin sahnenin görüntüsünü değiştireceğini gözönünde bulundurursak, şu şekilde senaryolar kurabiliriz. Örneğin ka rakterimize kontrol kodları kısmından belli x koordinatı içerisinde ya y ın la y ın komutu ile mesaj yollatabiliriz ve bu mesajı sahne kodlarımızı hazırlarken ko n tro l komutan kısmında bulunan a lg ıla n d ığ ın d a ko mutu ile algılar ve arka p la n ı değiştirm e komutu ile sahnemizi de ğiştirebiliriz. İkinci bir senaryo hazırlarsak, k ır m ız ı ve mavi isimli iki değişken ta nımlayabiliriz. Bu değişkenlerin değerlerini karakterimizin x koordinatın daki pozisyonuna göre 1 ve 0 arasında değiştirir, arka plan kodlarında da is e komutu ile k ır m ız ı değişkeni 1 değerine sahipken k ır m ız ı arka planına geç, mavi değişkeni 1 değerine sahipken mavi arka planına geç şeklinde tanımlayabiliriz. Alternatif olarak k ır m ız ı değiş kenine karakterimizin x koordinatı 0’dan küçükken i , mavi değişkenine karakterimizin x koordinatı 0’dan büyükken 2 değerini verebiliriz. Diğer bir yol ise, tek bir değişken tanımlayabiliriz. Bu değişkene x koordinatı 0’dan küçükken l büyükken 2 değerini atayabiliriz. Daha sonra bu de ğerlerle, arka planların sıra sayısını kodumuza atayarak sahnenin de ğişmesini sağlayabiliriz. Tüm bu örnekleri daha iyi anlayabilmek için Şe kil 10.8’de verilen örneği birlikte inceleyelim. 210 Bu kod sayfası bir önceki sorumuzdaki papağanımızın kod sayfasıdır. Burada üstteki kodlar papağanımızın uçması için hazırladığımız kodlar dır. Alttakiler ise, papağanımızın pozisyonuna göre değişken değerimizi değiştiren kodlardır. Görüldüğü gibi, kullanıcının programı çalıştırmasıy la aktif olan alttaki kodlarımız, sürekli olarak papağanımızın x konumu nu denetlemektedir. Burada operatör yardımıyla denetlediğimiz koşul oluştuğunda, kodumuz içerisindeki değişken kodunu çalıştırır ve “sah ne” adındaki değişkenimizin değerini 1 yapar. Diğer program parçası da aynı şekilde çalışmaktadır. Burada x konu munun 0’dan büyük ve küçük olma durumuna göre programımız değiş ken değerini değiştirmektedir. Öte yandan, Şekil 10.9’da gördüğünüz resimde arka planımıza ait kod sayfası bulunmaktadır. Şekil 10.9 Arka plan Kod Sayfası Burada oldukça basit iki kod bloğu görmekteyiz. Kullanıcı programı ça lıştırdığında aktif olan kodlarımız değişken değerimize göre sahne kos tümünü değiştirmektedir. Burada iki kod bloğumuzda “is e s ü re k li” kodu ile “sahne” değişkeninin değeri kontrol edilmektedir. “Sahne” de ğişkeninin değeri “1” iken sol taraftaki, “2” iken sağ taraftaki “is e sü r e k l i ” kodu aktif olur. Böylece aktif olan kod bloğu içerisindeki sahne kostümü tanımlaması aktif hale gelir. Böylece sahnemiz kuşumuzun ha reketine göre değişmiş olur. 10.4 İki Karakterin Çarpışmasını Nasıl Sağlarım? Bu soru oldukça sık karşılaşılan sorulardan ve aslında oyunların en te mel yapılarından birini oluşturmaktadır. Şimdi oyun programlamada çarpışma algılaması (collision detection) olarak isimlendirilen bu duru mu daha iyi anlayabilmek için, basket topu ile karakterleri ezen bir oyun tasarlayalım. Öncelikle yeni bir proje açın ve karakter olarak “dosyadan k arakter seçin” düğmesi ile bir karınca ve bir basket topunu projenize ekleyin. Tabii her açılışta karşımıza çıkan Scratch kedisinden de kur tulmamız gerekiyor. İlk olarak hazırlayacağımız kodlar basket topumuza ait karıncalarımıza hasar verirken, basket topumuzu kullanacağız yani karınca ve basket topu sahnede aynı noktalarda olduğu zaman biz mause tuşuna basmış isek karınca şekil değiştirecek ve bizim puan hane- 212 mize 10 puan eklenecek. Şekil 10.10’da görülen resimdeki kodları bas ket topumuzun kod sayfasına ekleyelim. t ı k l a n d ı ğ ın d a t ı k l a n d ı ğ ın d a ■ P P H İİİİİİİIİI S ü r e k li m o u s e iş a re tç is i j 'e g id in f Eğer ■ • M o u s e b a s ılı? is e B o y u fg JŞ p d e ğ i ş t i r i n it Q 0 s a n iy e b e k le y i n İS Boyu K M d e ğ iş tirin Şekil 10.10 Basket Topu Kod Sayfası Burada, sol taraftaki kodumuz karakterimizi, yani basket topunu sürekli olarak mause işaretçimize yönlendirecektir. Yani sahnemizde mause işaretçimizi nereye götürürsek, basket topumuz da onu takip edecektir. Burada oyun boyunca bu işlem süreceği için, mause iş a re tç is in e g id in komutunu S ü re k li komutunun içine yerleştirdik. Sağ taraftaki program parçamızı ise, basket topumuzu mause tuşuna basıldığında zıplıyormuş gibi görünmesi için hazırladık. Buraya kadar karakterlerin kesişimi ile ilgili herhangi bir kod bulunmamaktadır. Bu kesişimi hisse decek olan program parçamız karınca karakterimizin kodları arasında dır. Şimdi gelin karınca karakterimizin kod sayfasına bir göz atalım. Şekil 10.11’de verilen kod sayfasında, sol üst taraftaki program parça mız karıncamızın sürekli hareketi için tasarlanmıştır. Sağ üstteki prog ram parçamız ise, karıncamızın rasgele yön değiştirmesini sağlar. Eğer bu kod bloğunu hazırlamasaydık, karıncamız yön değiştirmeyecek ve sürekli aynı yolu takip edecekti. Alttaki kod bloğumuz bizi asıl ilgilendi ren bloktur. Kullanıcının programı başlatmasıyla çalışacak olan bu ko mutlar, S ü rek li komutunun içerisine yerleştirilmiş olan bir koşul ifadesi 213 içermektedir. Bu koşul ifadesi çalışmak için, iki şartın aynı anda olup olmadığına bakmaktadır. Bu şartlardan biri algılama kodlarından olan “mause b a s ılı? ”, diğeri ise yine algılama kod grubundan . yakla- şıyormu?” sorularının kontrolüdür. Şekil 10.11 Karınca Karakteri Kod Sayfası Aslında iki karakterin çsrpışıp algılayan program parçası bu kısımdır. Eğer bu iki şart gerçekleşirse, yani iki karakter aynı noktada ise ve bu anda mause tuşuna basılmış ise “eğen is e ” tuşunun içerisindeki kodlar çalışacaktır. Ayrıca “scone” adlı değişkenimizin değerine 10 puan ekle necektir. Böylece, karınca karakterimizin topun altında hasar gördüğünü kullanıcıya hissetirmek için hazırladığımız kostüm değiştirme kodları çalışacak ve karıncamız ezilmiş gibi görünecektir. Bu işlemlerden 0.7 saniye sonra, karınca kalkıp yoluna devam edecektir. Görüldüğü gibi, karınca ve topun aynı noktada bulunduğu durumda kullanıcımız mouse 214 tuşuna basarsa hem karınca karakterimizin kostümü değişecek hem de score değişkenimize 10 puan eklenecektir. 10.5 Karakterimi Nasıl Zıplatabilirim? Sıkça sorulan bu soru, Scratch ile programlaya yeni başlayanlar için ka fa karıştırıcı olarak gözükse de, Scratch programına hakim oldukça ko laylıkla cevaplanabilecek bir soru haline gelecektir. Bu sorunun cevabını vermek için yeni bir proje açalım. Projemizde Şekil 10.12’deki resimde bulunan kod bloğunu oluşturalım. tıklandığında m H U yul* aıı ok Mjtugu basıldığında y ’yi © S ü r e k li a d ım g id in î|§pll K a n a rd a » s « » zıp la tın d e ğ iş tirin cıra s a n i y e b e k l e y i n ■1 Ş| y 'y ı f f f i l d e ğ iş tir in S , ' ' sjfâj Şekil 10.12 Zıplama Hareketi Kod Sayfası Burada gördüğünüz kod sayfasındaki sol taraftaki karakterimizin sürekli olarak hareketini sağlamak içindir. Bu kod bloğunun bizim konumuzla bir alakası yoktur, Ancak zıplama olayının daha güzel görünmesi için tasarladığımız bir kod bloğudur. Sağ taraftaki kodumuz ise, zıplama olayını tasarladığımız koddur. Görüldüğü gibi, yukarı ok tuşuna basıl masıyla aktif olacak olan bu kod bloğumuzda karakterimizin zıplıyormuş gibi görünmesi için kartakterimizin y koordinat değerini önce 50 birim artırdık. Ardından 0 .2 saniye bekledikten sonra -50 birim tekrar artırdık (yani azalttık). Bu durum karakterimize zıplıyormuş gibi bir görünüm sağladı. 10.6 Karakterimi Sahnede Nasıl Gizleyebilirim? Bu sorunun cevabı aslında gayet basittir. Görünüm grubu kodlarından olan “g iz le y in ” kodu bu iş için tasarlanmıştır. Ancak burada önemli 215 olan nasıl gizleyeceğiniz değil, ne zaman ya da ne olduğunda gizleye ceğinizde. Bu işlemi aslında birçok farklı şekilde gerçekleştirmek müm kündür. Kontrol grubu kodlarının hemen hemen hepsinde bu kodu kul lanabilirsiniz. Örneğin gizlemek istediğiniz karakteri zamana bağlayıp birkaç saniye sonra, ya da bir karakterin x koordinatındaki durumuna göre, veya başka bir karakterin pozisyonuna göre veya bir değişkenin değerine göre veya başka bir karakterin yollayacağı bir mesaja göre ya da karakterinizin sahnedeki pozisyonuna göre gizleme işlemini gerçekleştirebilirsiniz. Burada dikkat etmeniz gereken konu, karakterinizi giz lemek için hangi seçeneği kullanacağınızda. Örneğin eğer gizlenmiş bir nesneyi bulacağınız bir oyun tasarlıyorsanız, nesne kullanıcı tarafından bulunduğunda ve üzerine tıklandığında nesneyi kaybetmek için gayet basit olan “karakter tıklandığında” kodunun altına ekleyeceğiniz “g iz le y in ” kodu işinizi görecektir. Bunun yanı sıra, düşününki yolda ilerleyen bir araba oyunu yaptınız. Normal olarak arabanızın sahnenin solundan sağına hareket ederken sahnenin sağ tarafına geldiğinde kaybolup sol dan tekrar belirmesi gerekmektedir. Böylece arabanız ilerliyomuş gibi bir görünüm kazanacaktır. Bunun için arabanızın x koordinatını sınaya rak “eğer is e s ü re k li” koduna yerleştireceğiniz “x > 200” ise gizle yin tanımlamasını kullanabilirsiniz. Böylece, sahnede o noktada bulunan karakterimiz gizlenecek, ardındaki kod karakterimizi sahnenin sağına taşıyacak ve ardından karakterimiz terar görünür olacaktır. Bu durum x konumunu sürekli sınayan program parçası aktif olduğu sürece devam edecektir. Şekil 10.13 Arka planlarSayfası Şimdi aynı işi yapan başka bir örnek verelim. Örneğin bir Pacman oyunu yaptığımızı düşünelim. Bu amaçla sahnedeki herhangi bir noktayı yiyen bir nesnemiz olsun. Nesnemiz noktayı yediğinde noktanın kaybolması gerekmektedir. Bunun için nesnemizin ya da noktanın kod sayfasına “k a ra k te r y a k la ş tığ ın d a ” algılama grubu komutu bir “eğer is e sü r e k l i ” komutuna koşul olarak yerleştirin. Koşul ifadesi içine g iz le y in komutunu yerleştirin. Böylece karakterlerimiz her üst üste geldiğinde, hedef karakterimiz yani noktamız kaybolacaktır. [ İ L İ M 11 11.1 Giriş Her bir programlama dilinin kendisine özgü bazı özellikleri olmakla birlik te, temelde ortak birçok özellikleri bulunmaktadır. Programlama dillerinin asıl amacı, en kısa anlatım ile (çok uzun kodlar yazmaya gerek kalma dan), bilgisayarın en hızlı şekilde sonuca ulaşmasını sağlayarak isteni len işleri bilgisayara yaptırmaktır. Bir başka deyiş ile, programlama dille ri, gerçek yaşamda karşılaşmakta olduğumuz durumları modelleyerek çözümler üretmeye çalışırlar. Nesneye dayalı programlama dilleri, bilgi sayar ortamında oluşturulan bu modellerin gerçek yaşamdaki durumla rına daha yakın bir şekilde oluşturulmasını sağlar. Örneğin, çevremiz deki yapıları incelediğimizde, aynı özelliklere sahip birçok nesnenin var lığını görürüz. Bu nesneler genellikle ortak birçok özelliğe sahip olmak ile birlikte, farklı birçok özelliğe de sahip olabilmektedirler. Örneğin mo torlu taşıtlar, gerçek yaşamda karşılaştığımız bir nesnedir. Motorlu taşıt ların motor kapasitesi, teker sayısı, rengi, marka ve modeli gibi ortak bazı özellikleri vardır. Ancak örneğin yolcu kapasitesi bazı motorlu taşıt lar için önemli bir özellik iken, bir iş makinesi için hiç bir anlam ifade et meyebilir. Motorlu taşıtların bu ortak ve birbirinden farklılık gösteren özelliklerinin yanısıra, işlevsel açıdan da ortak ve farklı oldukları durum lar sözkonusudur. Tüm motorlu taşıtlar, motoru çalışırken hareket eder ler, belli bir hızda giderler, belli sürelerde belli miktarda yakıt yakarlar. Bunların yanısıra, farklı bazı fonksiyonellikleri de söz konusudur. Örne ğin, kamyonlar yük taşır, binek otolar insanların ulaşımında kullanılırlar. Bütün bu durumlar düşünüldüğünde gerçek yaşamda karşılaştığımız bu nesnel yapıyı en iyi şekilde modellemek amacıyla, nesneye dayalı prog ramlama dilleri gelişmiştir. Aslında nesneye dayalı programlamanın te melleri 1960’larda atılmıştır. Bu dönemlerde yazılım ve donanım mali yetlerinin yükselmesi nedeniyle araştırmacılar yazılan kodun tekrar kul- 220 lanımını artırıcı metodları araştırmaya başlamışlardın Bu çalışmaların sonucunda, nesneye dayalı programlamanın temellerini atacak gelişme ler oluşmuştur. Nesneye dayalı programlamlama ile ilgili bazı genel kav ramları bu bölümde göreceğiz. 11.2 Nesne Nesne (object) kavramının anlaşılması, nesneye dayalı teknolojileri an lamak için son derecâ önemlidir. Gerçek dünyada çevremize baktığı mızda, canlılar, hayvanlar, insanlar, eşyalar, masa, sandelye gibi birçok nesne görürüz. Gerçek dünyada karşılaştığımız bu nesnelerin temelde iki önemli durum sözkonusüdur. Bu nesnelerin hepsinin de belli özellik leri {state) vardır ve belli davranışları (behavior) sergilerler. Örneğin araba nesnesi renk, model, marka, gibi birçok özelliğe sahiptir. Bunun yanısıra, yolcu taşımak, ileri gitmek, geri gitmek, fren yapmak, hızlan mak, yavaşlamak gibi birçok davranış gösterirler. Bir nesnenin özellikle rinin ve davranışlarının tanımlfpmaşıjjnesneye dayalı d#§ünmeye baş lamak açısından önemli bir adımı oluşturur. Yazılım dünyasında kullan dığımız nesne tanımı, gerçek dünyadaki nesne kavramları ile benzerdir. Yazılım nesnelerinin de özellikleri ve davranışları tanımlanmalıdır. Nes ne yapısını daha iyi anlayabilmek için Hayvanat bahçesini düşünelim. Bir hayvanat bahçesinde Hayvan bakıcıları, Barınaklar ve barınaklarda yaşayan hayvanlar vardır. Bunların herbirisinin özpliikleri ve yaptıkları işler, işlevsel davranışları vardır. Bu bilgilerden yararlanarak aşağıdaki gibi bir sanal hayvanat bahçesi tasarlayabiliriz. 221 Nesne Özellikleri Takip Bilgileri Hayvanlar Hayvanların çeşitli türleri, boyları, renkleri ve adları vardır. Barınaklar Hayvan türüne bağlı olarak barı naklar çeşitli ölçülerdedirler. Kötü havalarda korunmak için barınakların çatıları vardır. Barınaklar kirletilir. Bakıcılar hayvanlara bakarlar. Hayvanları beslerler. Barınakları temizlerler. İsim nedir? Türü nedir? Rengi nedir? Yaşı nedir? Aç mıdır/Tok mudur? Uzunluğu nedir? Genişliği nedir? Yüksekliği nedir? Üstü örtülü/açık mıdır? Kirli/temiz midir? İsmi nedir? Ünvanı nedir? Maaşı nedir? Eğitimi nedir? Bakıcılar 11.3 Sınıf Gerçek yaşamda karşılaştığımız nesnelere baktığımızda, benzer özel likleri olan birçok nesne olduğunu görürüz. Nesnelerin bu ortak özellikle rini içeren ana örneğe sınıf adı verilir. Sınıf (class) bir nesnenin tanım landığı ana örnek yani prototiptir. Sınıf tanımları ile, gerçek dünya nes nesinin durumu ve davranışları tanımlanır. Buradaki temel amaç, bu gerçek dünya nesnesinin temel ve genel durumunu ve davranışlarını tanımlamaktır. Örneğin hayvanat bahçesi nesnelerini ve bu herbir nes nenin özelliklerini, yaptığı işleri belirlemişdik. Ancak bu nesneleri yöne tecek ve bu nesnelerden yeni nesneler oluşturacak genel bir sınıfa daha gereksinim vardır. Bu genel sınıfa HayvanatBahcesi diyebiliriz. 11.4 Âit Sımfve Üst Smıf Sınıf kavramını daha iyi anlayabilmek için, motorlu taşıtları inceleyelim. Motorlu taşıtlar bir sınıf olarak tanımlanabilir. Tüm motorlu taşıtların rengi, motor kapasitesi, beygir gücü, teker sayısı gibi genel özellikleri bu sınıf ile tanımlanır. Bu durumu Şekil 11.1’deki gibi görselleştirebiliriz. 222 ■M HB M K Kİ 5 •*. 1>ö U f f t lilf âiAtlaöâi.j * S Şekil 11.1 Motorlu Taşıtlar Sınıf Yapısı Bu tanıma göre, kamyon ve t ı n birer yük t a ş ıt ıd ır . Otomobil, moto siklet ve Yük taşıtları aynı zamanda birer motorlu taşıttır, 11,5 Sınıf ve Nesneye İlişkin Bazı Tanımlamalar Sınıf ve nesne yapıları, nesneye dayalı programlamanın temelini oluştu rur. Bu yapılar ile ilgili unutulmaması gereken bazı noktaların altını çiz mekte yarar vardır. Herbir nesne, bîr sınıfın örneğidir. • Nesneler verilerini sınıflanımında depolar • Nesneye ait herbir veriye, üye verisi (m em ber data), ÖriNSk vİM (instance data), veya alan (fields) denin Çünkü oluşturulan her bir nesne, bir sınıfın üyesidir. Hayvan, Barinak, B a k ic i nesne leri HayvanatBahcesi adlı tek bir Sınıfın üyeleridir. • Programcılar bir sınıf tanımı (c/ass definition) yaptığında, o sı nıftan türetilen herbir nesne ayrı ayrı kendi verilerini taşır. 223 11.6 Kalıtım (Inheritance) Kalıtım (inheritance) aslında doğal bir mekanizmadır. Doğal kalıtım sis teminde, çocuklar saç rengi, göz rengi, boy uzunluğu gibi birçok özellik lerini kalıtsal olarak anne ve babalarından ve onların da anne ve baba larından bir zincir bağlantısı içinde alırlar. Nesneye dayalı programla mada da doğada bulunan bu özellik uygulanmıştır. Nesneye dayalı programlamada kalıtım, yazılımın organize edilmesi ve yapısal bir sis tem içinde yazılmasının sağlanması amacıyla, güçlü bir mekanizma sağlar. Buna göre nesneye dayalı bir programlama sisteminde alt sınıf lar ve nesneler bir zincir içinde kendi üst sınıflarının özelliklerini alırlar. Örneğin, Şekil 11.1’de verilen tanımlamaya göre, kamyon ve t i r nesne leri y u k T a s itla ri’nın özelliklerini kalıtsal olarak alırlar. Aynı şekilde y u k T a s itla ri da kendisinin üst sınıfı olan m o to rlu T a s itla r’ın özellik lerini kalıtsal olarak alır. Dolayısı ile m o to rlu T a s itla r’ın özellikleri ka lıtsal olarak kamyon ve t i r nesnelerine de taşınmış olur. 11.7 Arayüz (Interface) Daha önce öğrendiğimiz gibi, herhangi bir sınıf, açıkladığı metotlar ara cılığı ile dışardaki dünya ile iletişim kurar. Bu metotlar bir nesnenin dış dünya ile olan arayüzünü tanımlarlar. Başka bir deyişle, arayüz (irıterface) bir sınıf ile, sınıfın dışındaki dünya arasında bağlantı kurmayı sağla yan yapıdır. Herhangi bir sınıf bir arayüz uyguladığında, bu arayüz tara fından yayınlanan davranışları desteklediğine söz vermiş olur. Örneğin, klavyenizdeki tuşlar, fare diğer kontrol düğmeleri bilgisayar ile sizin ara nızdaki iletişimi sağlayan birer arayüzdür. Örneğin bilgisayarınızı açmak ya da kapatmak için açma-kapama düğmesine basarsınız. Arayüz as lında ilişkili metotların gruplanmış bir halidir. 224 11.8 Paket (Package) Paket {package}, sınıfların ve arayüzlerin mantıklı bir şekilde organize edilmesi için kullanılan bir yapıdır. Hazırlamış olduğunuz büyük yazılım ların paketlere ayrılarak gruplanması daha kolay yönetilmesini sağlar. Bir paketi, bilgisayarınızda açtığınız farklı dizinler olarak da düşünebilir siniz, Scratch ile yazacağınız programların tasarımında burada özet olarak anlatılan NesneyerDayalı Programlama kavramlarını da gözönünde bu lundurmanızda yarar vardır. Zira Scratch yapısı, bu tür tasarımları geliş tirebilmek için son derece uygundur. Böylece geliştireceğiniz programla rın daha iyi bir tasarıma sahip olmasını sağlayabilirsiniz. Bundan sonraki İki bölümde, kitabımızın bu kısmına kadar anlattığımız teknikleri daha iyi anlayabilmeniz için, size tüm fonksiyonellikleri ile tam olarak çalışan iki Scratch programını tüm detayları ile anlatacağız. 225 tSk Alıştırmalar 1. Bulunduğunuz ortamdaki nesneleri ve bu nesnelerin özelliklerini ve davranışlarını listeleyiniz. 2. Bu nesnelerin ait olduklar! üst sınıflar ve kapsadıkları diğer alt sınıf lar var mı? 3. Bu nesnelerin alt sınıflarının ortak ve ortak olmayan özellikleri var mı? 4. Belirlediğiniz sınıflar için bir kalıtım tanımı yapabilir misiniz? 5. Scratch programlama ortamında, nesneye dayalı programlama ile ilgili ne gibi özellikler bulunmaktadır? Bunları inceleyerek arkadaşlarınız ile tartışınız B C L Î M 12 12.1 Giriş Bu bölümde size tam olarak hazırlanmış örnek bir Scratch programını tanıtacağız. Scratch uygulamasının daha iyi anlaşılabilmesi için, olduk ça açıklayıcı olan bu örnek ile size, karşılaşacağınız problemlerde baş vuracağınız bazı kısayol çözümler sunulmaktadır. Bu örnektelerin, prob lemlerinize çözümler bulabileceğinize, çalışan bir programı analiz ede bilme, farklı örnekleri anlayabilme yeteneğinizi geliştirmenize yardımcı olacağına inanıyoruz. Bu bölümde tanıtacağımız örnek çalışma, Atılım Üniversitesi Yaz Bilim Parkında (2012), bir lise öğrencinin 4 günlük bir eğitim sürecinde tasarladığı oyundur. Bu çalışmalar kapsamında gelişti rilen diğer oyunlara Atılım Üniversitesi Açık Ders Kaynakları “Scratch i l e Programlamayı Öğreniyorum” web sayfasından [6] ulaşılabilirsi niz. Daha fazla örnek için ise MIT üniversitesinin Scratch web sayfasını [7] ziyaret edebilirsiniz. 12.2 Tasarım Oyunun tasarımı Doğa Yahşi tarafından gerçekleştirilmiştir. Oyunun kitabımızda kullanılmasına izin verdiği için Doğa’ya teşekkür ederiz. 12.2,1 Oyun Hikayesi Hikaye bir mezarlıkta geçmekte ve kahramanımız bir hayalet. Oyunda amacımız karakterimize havada uçan yarasaların üzerinden x ve c tuş larını kullanarak puan kazandırmaktır. Tabii birde düşmanlarımız var; iskeletler. Mezarlıklardan fırlayan iskeletlerden kaçmak oyunumuzu biti rebilmemiz için şart. Her üzerinden geçtiğimiz yarasa için 10 puan ka zanırken, her yakalandığımız iskelet için 10 puan kaybediyoruz. Eğer puanımız 70’e ulaşırsa, oyunu kazanırız ancak -30 puana ulaşırsak oyunu kaybederiz. 228 12.2.2 Oyun Nesneleri Ad hayalet karakteri Özellik m Davranış D1. Sürekli sahnede soldan sağa doğru ilerler, D2. Ekranın en sonuna geldiğinde başa döne rek ilerlemeye devam eder D3. Kullanıcı yukarı ve aşağı hareket ettirebilir D4. Yarasalara çarptığında 10 puan kazanır D5. İskeletlere çarptığında 10 puan kaybeder İskelet D1. Rastgele aralıklar ile mezar taşının arka sından çıkarak sahnede gözükür ve kaybolur karakter2 Mezar Taşı karakter3 Mezar Taşı karakter5 Mezar Taşı karakter6 Mezar Taşı karakter7 Yarasa karakterö Yarasa karakteri 0 İskelet karakteri 3 Oyun Bitti Say fası karakteri 4 Karşılama Ek ranı karakteri 5 Kazandınız Say fası karakteri 7 Oyun Tanıtım Sayfası karakteri 8 M ■ ■ D1. Ekranda sürekli bir akış içinde sağdan sola i doğru ilerler D1. Ekranda sürekli bir akış içinde sağdan sola doğru ilerler D1. Ekranda sürekli bir akış içinde sağdan sola doğru ilerler m m M D1. Ekranda sürekli bir akış içinde sağdan sola doğru ilerler D1. Sahnede sağdan sola doğru uçar D2. Sahnenin sonuna geldiğinde tekrar baştan hareketine devam eder D1. Sahnede sağdan sola doğru uçar D2. Sahnenin sonuna geldiğinde tekrar baştan hareketine devam eder B B B B ■ D1. Rastgele aralıklarla mezar taşının arkasın dan çıkarak gözükür ve kaybolur D1. Oyuncu puanı -30’un altına ise belirir D2. Oyun bitti müziğini çalar. D1. Oyun başlatıldığunda görünür D2. x tuşuna basıldığında gizlenir D1. Oyun kaybedildiğinde görünür D2. Oyuncu puanı 60’dan büyük ise görünür D3. Oyunu kazandınız müziğini çalar D1. Oyun başlatıldığında görünür D2. Sağ oka basıldığında gizlenir 22S 12.3 Geliştirme Oyunun kağıt üzerinde detaylı bir şekilde tasarlanması işlemini tamam ladıktan sonra geliştirme aşamasına geçilebilir. Burada dikkat edilmesi gereken en önemli nokta, geliştireceğimiz oyunun tasarımı ne kadar de taylı hazırlanırsa, oyun geliştirme sürecinin de o kadar kısa sürede ta mamlanacağı ve hazırlanacak olan kodların daha anlaşılır ve sistematik olarak hazırlanmasının mümkün olacağıdır. Tasarım aşamasına yete rince zaman ayrılmadığı durumlarda ise, kod geliştirilirken aynı zaman da tasarım yapılması nedeniyle süreçler birbirine karışacak ve geliştiri lecek olan kod istenilen performansta ve anlaşılabilirlikte olmayacaktır. 12.3.1 Sahne ve Karşılama Ekranı İlk olarak oyunumuzun Sahne kodlarını açıklayacağız. Sahne kodları, Scratch arayüzünün sağ alt kısmında Şekil 12.1’de görülen bölümün solunda bulunan Sahne seçeneği ile tanımlanmaktadır. Sahne üzerine tıklandığında Scratch ekranının orta kısmında sahne ile ilgili kodlara ulaşılır. Oyun için tasarlanmış olan diğer karakterlerin bilgilerine de aynı şekilde ilgili karakterin üzeri tıklanarak ulaşılabilir. Şekil 12.1 Karakterler Şekil 12.3 ve 12.4”de görülen kodlar, Şekil 12.2’de görülen ana sahne mizin kodlarıdır. Şekil 12.2 Karşılama Ekranı Şekil 12.3’de görülen program parçacığı, x tuşuna basılmasıyla aktif olur ve score değişkenimizi kontrol eder, scone değişkenimizin -30 de ğerinde olma durumu, eğer komutunun içerisindeki arka plan komutu çalıştırır. Aslında programcımız burada kullanıcının score değişkeninde tutulan puanını denetleyerek, oyunun bitiş ekranını tanımlamıştır. tuşu basıldığında I j l l f s f f f l Eğer jj Score = Bjjmj ise mezarlık 4 arkaplanına geçin Şekli 12.3 Karşılama Ekranı Kodlu-1 Oyunumuzun hikayesinden hatırlayacağınız gibi oyunumuz, kullanıcının puanının (score değişkeninin değeri) -30 olması durumunda bitecek ve oyunu kullanıcı kaybedecek şekilde tasarlanmıştı. İşte bu noktada tasa rımcı oyunun arka planını bu kodla değiştirmeyi hedeflemiştir. Ancak 231 programcımız burada sahneler arasında geçiş yapmaktansa, sahneleri karakter olarak tanımlamış ve karakter gibi tanımlanan sahneleri gizle yip gösterme yoluyla sahne değişikliklerini gerçekleştirmiştir. Şekil 12.4’de görülen kod, oyun çalıştığı sürece aktif olan, yani puanın (score değişkeninin değerinin) -30 ile 60 puan arasında olduğu durumda aktif olan, bir kod bloğudur. Şekil 12.4 Karşılama Ekranı Kodu-2 Burada programcımız bu score değişkeni değerleri arasında, S ü re k li komutu içerisine yerleştirdiği, kaydettiği bir sesi çalıştıran Sesini Ça l ı n komutu çalıştırmaktadır. Oyun çalıştığı sürece, 13,5 saniye aralık larla sürekli olarak kayıt edilen sesi çalıştıran kodumuz, “olana kadar te k r a rla y ın " şartları sağladığı sürece çalışacaktır. Oyun içinde bulunan her nesne ve bu nesnelerin örneğin kullanıcı ile olan iletişim yetenekleri gibi tüm özellikleri ayrı ayrı tasarlanarak prog ramlanmak zorundadır. Oyun hikayemizde bulunan nesnelerin nasıl ta sarlandığını ve programlandığını şimdi birlikte inceleyelim. 12.3.2 Hayalet (karakteri) Hayalet karakteri, Şekil 12.5’de görüldüğü gibi tasarlanmıştır. Hayalet karakterimiz, program içinde k a ra k te ri olarak isimlendirilmiştir. Prog ram içinde bu karakter ile ilgili olarak yapılacak tüm işlerde, k a ra k te ri 232 ismi kullanılacaktır. Bu noktada program içindeki değişkenler ve nesne ler isimlendirilirken, verdiğimiz isimlerin kolay anlaşılabilir olmasına özen göstermemiz gerektiğini belirtmekte yarar var. Örneğin bu programda ilgili nesneye hayalet yerine k a ra k te ri ismi verilmesi, nesneye daha sonraki erişimlerimizde acaba bu nesnenin adı neydi, karakter kaçtı so rusunu programlayıcının ya da programı okuyan diğer kişilerin aklına getirecektir. Program içindeki değişkenlere ve nesnelere anlaşılabilir isimler vermek programımızın anlaşılabilirliğini de artıracaktır. Şekil 12.5 Hayalet Karakteri Bu kısımda, hayalet karakteri için tanımlanan kodları ayrı ayrı açıklaya cağız. Kullanıcımız programı çalıştırdığında, yani tık la n d ığ ın d a ko mutu ile çalışacak olan Şekil 12.6’da verilen kodumuz karakterimizi gizliyecektir. Çünkü program çalıştırıldığında karşılama ekranı, yani prog ramcımızın oyunu anlattığı ekran açılacaktır ve bu sahnede hayaletimi ze ihitiyaç yoktur. Bu nedenle programcımız hayalet karakterimizi Şekil 12.6’da verilen program parçacığıyla gizlemiştir. Şekil 12.6 Hayaleti Gizle Şekil 12.7’de görülen kod parçası, program çalıştırıldığında score de ğişkeninin değerini, 0’a eşitlemek için yazılmıştır. Burada dikkat etmeniz gereken nokta, programcımızın oyunun sonunu, score değişkenine, 233 yani kullanıcının kazandığı puana, bağlamış olmasıdır. Bu nedenle kul lanıcının puanı oyun başında sıfırlanır. Şekil 12.7 Puanın İlk Değerini Ata Şekil 12.6’da verilen kodumuz, karakterimizin temel ve kendiliğinden yapacağı hareket içindir. Bu kodlama, hayalet karakterinin tasarımındaki davranışlardan Dl numaralı davranışı yerine getirmek amacıyla yazıl mıştır. X tuşuna basıldığında komutuna eklenen program parçası, ka rakterimizin tüm diğer karakterlerden daha önde görünmesini sağlamak için öne g e tir komutu, 3 saniye bekledikten sonra sahnede görünme sini sağlamak için Göster komutu ve görüneceği yeri belirlemek için konumuna gidin komutu koordinatlarıyla tanımlanmıştır. Karakterimizin sürekli hareketini sağlamak için S ürekli komutunun içine 2 adım g i din komutu yerleştirilmiştir. Böylece, karakterimize sürekli olarak soldan sağa (-2 olsaydı sağdan sola olacaktı), bir hareket kazandırılmıştır. Şekil 12.6 Karakterin Yeri ve Hareketi 234 Şekil 12.7’de verilen kod parçacığımız, karakterimizin aşağıya hareketi ni sağlar. Bu kodlama, hayalet karakterinin tasarımındaki davranışlar dan D3 numaralı davranışı yerine getirmek amacıyla yazılmıştır. Prog ramcımız bu davranışı, karakterimizin y koordinat değerini her c tuşuna basıldığında -10 birim değiştirerek sağlamıştır. Şekil 12,7 Aşağı Hareket Şekil 12.8’de verilen kod parçacığımız ise, karakterimizin yukarı hareke tini sağlamak amacıyla tasarlanmıştır. Bu kodlama, hayalet karakterinin tasarımındaki davranışlardan D3 numaralı davranışı yerine getirmek amacıyla yazılmıştır. Programcımız, karekterimizin y koordinat değerini 10 birim artırarak yukarı hareketini sağlamıştır. Bu amaçla, klavyedeki z tuşu kullanılmıştır. Böylece oyuncu x tuşuna bastığında hayaleti aşağı yönde, z tuşuna bastığında ise yukarı yönde hareket eder. Hayaletin yukarı ve aşağı hareketi, iskeletlerden kaçmak ya da yarasaların üze rinden geçmek için tasarlamıştır. I j î y *yj J t u s u b a s ıld ığ ın d a m d e ğ iş tirin .i ] Şekil 12.8 Yukarı Hareket Şekil 12.9’da verilen program parçacığımız karakterimizin kazanacağı puanlar için tasarlanmıştır. Bu kodlama, hayalet karakterinin tasarımın daki davranışlardan D4 numaralı davranışı yerine getirmek amacıyla yazılmıştır. Burada programcımız “ise s ü re k li” komutuna iliştirdiği yaklaşıyor mu? komutuyla karakterimizin yarasa karakteriyle aynı 235 konumda olup olmadığını kontrol etmektedir. Aynı konuma gelen yarasa karakterleri ve hayalet karakteri, “ise s ü re k li” komutunu aktif hale getirir. Burada, score yani puan değişkenine, değiştiği kadar değeri bir birinden çıkartarak 10 birim eklenmektedir. Burada score değişkenimi ze 10 birim olarak yansıyan değişim, puanlama açısından son derece önemlidir. Burada dikkat etmemiz gereken konu, programcımızın ise sü rekli komutundan dolayı değişen score değişken değerini, sabit bir değere dönüştürmek için tasarlamış olduğu koddur. Karakterin yarasa ların üzerinden geçerken yeri ve hızından dolayı kaynaklanacak olan puan farkını gidermek için tasarlanan bu program parçacığı oldukça ya ratıcıdır. Belli bir zaman aralığında hayalet ve yarasanın üstüste gelme durumu, score değişkenini farklı şekillerde değiştirecektir. Bu değişim ler nedeniyle kaynaklanacak farkı programcımız değişimi sadece hisse dip 10 puan artırma yoluyla çözmeyi hedeflemiştir. Üst üste gelen karak terlerin kazandığı puanları biribirinden çıkartarak, üst üste gelmeyi sa dece hissetmiş, 10 puan vererek de olayı 10 puanla sınırlamıştır. jjl ^ K j l t o s u basıldığında m u ? '' is e s ü r e k li S;': Score |O i ( S c o re > - S co re ; + k a d a r d e ğ iş t ir in » a n i y e b e k le y in Şekil 12.9 Yarasa Çarpışması Şekil 12.10’da verilen program parçacığını diğer yarasa karakterimiz için tasarlayan programcımız, bu programcıkta da aynı stratejiyi izlemiş- ı r 236 M C I tu su b a sıld ığ ın d a h a t a k t a r l0 S c o re ^ | | ;^ . S c o r e y a k la ş ıy o r m u ? - ;;.:Q s a n iy e b ekleyin S co re 4 is e s ü r e k li E9 k a d a r d e ğ iş tirin ll ll l ı l B PH R M Şekil 12.10 Diğer Yarasa Çarpışması Şekil 12.11 ’de verilen program parçacığımız oyunun aktif olmadığı, yani kullanıcının -30 puan ve 60 puan arasında olduğu zamanlarda karakte rimizi sahnede göstermemek için tasarlanmıştır. M K S B tu ş u b a s ıld ığ ın d a S co re < PcM G i z l e y in İ-ftf veya S co re ^ T t f l i r ! •^ l f j i n ı l H is e s ü r e k li *4}| *i - j ‘j j ı m İ l j j Şekil 12.11 Gizle Şekil 12.12’de görülen program parçacığımız, hayalet karakterimizin iskeletler ile karşılaştığı, yani iskelet karakterlerinin ve hayalet karakte rinin üst üste geldiği durumda, hayalet karakterinin kostüm değiştirmesi için hazırlanmıştır. ■ ■S İ tu ş u b a s ıld ığ ın d a ya k la ş ıyo r m u ? ayalet2 m veya K ara kteri 3 i y a k la ş ıyo r m u ? İse sürekli ko s tü m ü n e geçin saniye bekleyin ;If | | *; * h a y a le t i I ko s tü m ü n e geçin Şekil 12.12 İskeletler ile Çarpışma-Kostüm Bu kodlama, hayalet karakterinin tasarımındaki davranışlardan D5 nu maralı davranışı yerine getirmek amacıyla yazılmıştır. Değişen kostüm, 237 hayalet karakterinin ağzı açılıyor gibi görünmesini sağlamıştır. Şekil 12.13’de görülen program parçacığı ise yarasaların, hayalet karakteriyle üst üste gelme durumunda aktif hale gelir ve içerisindeki sesini ça lın komutunu çalıştırır. Burada programcımız, iskeletlerle karşılaşan haya letimizin puan kaybederken aynı zamanda bir ses çıkarmasını sağla maktadır. « E i t u ş u b a s ıld ığ ın d a K ' i m l e r i y a k l a ş ı y o r ım u ? I - veya K a r a k t e r * ! y a k la ş ıy o r m u ? lig is e s ü r e k li S c r e e c h C J s e s in i ça lın Q s a n iy e b e k le y in Şekil 12,13 İskeletler ile Çarpışma-Ses Şekil 12.14’de görülen program parçacığımız, iskeletin ve hayalet ka rakterimizin üst üste gelmesiyle çalışmaktadır. Aslında burada Şekil 12.9 ve Şekil 12.10’da verilen program parçacıklarımızın tam tersi yön de çalışan bir yapı görmekteyiz. Yani Şekil 12.9 ve Şekil 12.10’da veri len program parçacıkları, oyuncuya puan kazandırırken, Şekil 12.14’de verilen program parçacığımız puan kaybettirmektedir. K B C W l tuşu basıldığında K a ra k te ri 3 S c o re ^B jyaklaşıyor mu? Score - Score * GEI ise sürekli k ad ar değiştirin j f l saniye bekleyin j| Şekil 12.14 İskelet ile Çarpışma-Puan Şekil 12.15’de verilen program parçacığımız da, Şekil 12.14’de verilen program parçacığı gibi çalışmaktadır. Burada tek fark, algılama kodu muzda seçilen karakterin diğer iskelet karakteri olmasıdır. 238 Şekil 12.15 Diğer iskelet ile Çarpışma>Puan Şekil 12.16’da verilen program parçacığımız sürekli olarak hayalet ka rakterimizin sahnenin en sağına geldiğinde sahnenin solunda tekrar be lirmesini sağlamak amacıyla tasarlanmıştır. Burada programcımız, ka rakterimizin x konumunu kontrol edip, eğer x konumu 227’den büyük ise karakterimizi x=-235 konumuna taşıtmaktadır. Ek olarak kullanıcımız, y konumu olarak karakterimize rasgele bir konum belirlemek için y konu mu aktif bölgesine 177 i l e 177 anası rasgele seçin” komutunu iliştirmiştir. Burada maximum ve minimum y konumları değerlerini giren programcımız oyundaki akışı sağlamıştır. Q: tu ş u b a s ıld ığ ın d a ! ^ y k o n u m u > fcES ■ ıs e .s u re k lı 1 x: CEEO y: CEE0ile fSB a ra sı ra s tg e le se çin ■ M M İ 1tonucnıma jg id in |f| İ M Şekil 12.16 Başa Gel Şekil 12.17’de verilen program parçacığımız bir işe yaramamaktadır. Tamamen programcımızın dalgınlığından dolayı unutulmuş olan bu kı sım, size örnek olması amacıyla kod sayfasından silinmemiştir. Oluşturup işe yaramadığını düşündüğünüz kodları, kodlar bölümünden çıkarmamanız bir süre sonra oluşturduğunuz kod bloklarının anlaşılmaz bir hale gelmesine neden olacaktır. Bu nedenle titiz ve temiz çalışmanız önerilir. Şimdi Şekil 12.18’de hayalet karakterine ait yukarıda yazılmış olan program parçalarının akış çizeneğini inceleyelim ve aşağıdaki sorulara cevap arayalım. • Bu çizeneği inceleyerek yukarıda açıklamalarını yaptığımız program parçaları ile ne kadar uyumlu olduğunu anlamaya çalışınız. Ne gibi farklılıklar buldunuz? • Öncelikle bu karaktere ait fonksiyonellikler için Şekil 12.18’de görüldüğü gibi bir akış çizeneği hazırlamış olsaydınız progra mı yine aynı şekilde mi yazardınız? • Program parçalarınızı Şekil 12.18’de hazırlanan akışa göre hazırlamış olsaydınız, yukardaki kod parçalarında ne gibi farklılıklar olurdu? • Bu farklılıkların, program açısından önemi nedir? Sizce hangi program parçası daha iyi yazılmış bir program örneğidir? Ne den? • Şekil 12.18’de verilen akış çizeneğini kullanarak C program lama dilinde benzer bir programı yazabilir misiniz? • llerki bölümlerde anlatılacak olan program parçaları için de benzer akış çizeneklerini siz hazırlayabilir misiniz? 240 t Şekil 12.18 Hayalet Karakteri Kod Akış Çizeneği 12.3.3 İskelet (karakter2) iskelet karakteri, Şekil 12.19’da görüldüğü gibi karakten 2 ismi ile ta nımlanmıştır. Şekil 12.19 İskelet Karakteri Bu karaktere ait özellikleri tanımlamak için yazılan program parçacıkla rını inceleyelim. Şekil 12.20’de görülen program parçacığımız x tuşuna 241 basıldığında (x tuşu burda aslında oyunu başlatan tuşdur) aktif hale ge lir. 5 saniyelik bir gecikmenin ardından is e s ü re k li komutuyla kontrol edilen hareket kodları çalışmaya başlar. Burada is e s ü re k li komu tuyla koşul olarak iskelet değişkeninin 10 değerine gelmesi beklenmek tedir. Bu koşul sağlandığında, is e s ü re k li kod bloğu aktif hale gelir. Burada programcımız iskelet karakterinin rastgele zamanlarda sahnede görünmesi için is k e le t adında bir değişken tanımlamış ve bu değişke nin değerini rasgele olarak 1 ile 50 arasında değiştirmiştir. III Ü T i tu ğu basıldığında Q san iye b e ld e yi» il *ıjf * kon u m u |H. liasfcaı* O İ #nnly#d« Mi % I m gizleyin j*Sf y i ’ K s r t k t ir l 'in y k onum u j'sı k o n u m u n # gidin ' x;.I |’in x kefiumu K.srâkt*r3 ı konumu j’irı v konum u * k o n u m u n # «jîdıo : m kon u m u n # gidin ^JM® Şekil 12.20 Sahnede Gözükmek Bu işlem, Şekil 12.21’de görülen program parçacığıyla, kullanıcı prog ramı başlattığı andan itabaren yapılmaktadır. Bu kodlama, is k e le t ka rakterinin tasarımındaki davranışlardan Dİ numaralı davranışı yerine getirmek amacıyla yazılmıştır. Şekil 12.21’de görülen program parçacı ğıyla sürekli olarak değişen is k e le t değişkenimizin değeri, aslında Şe kil 12.20’de görülen program parçacığına rasgele çalışma fırsatı sun maktadır. İzlenilen bu strateji oldukça başarılı ve kıvrak bir programlama tekniği olmuştur, is e s ü re k li komutu içerisinde bulunan kodlarımızın ilki karakterimizin (Karakter3’ün) mezar taşının konumuna gitmesi için tasarlanmıştır. Bu kodun hemen ardından, karakterimiz görünür moda göster komutuyla geçmiştir. 0 .2 saniyede x konumunu k a rakter3’ün 242 konumuyla sabit tutarak, y konumunu 30 birim artırmaktadır. Hemen altında bulunan kodumuzla yine x değerini sabit, belirdiği mezar taşı ka rakteriyle tutup -30 birim artırmaktadır. Bu program parçası, iskeletin sanki mezar taşından fırlıyormuş gibi görünmesini sağlamaktadır. Şekil 12.21 İskelet Hareketi Son olarak Şekil 12.22’de verilen program parçacığımızda programcı mız karakterimizi başlangıç pozisyonu olarak gizlemeyi seçmiştir. i. jf c j t u ş u b a s ı l d ı ğ ı n d a Sco re < BÜD H veya S co re I> m: is e s ü r e k li G iz le y in Şekil 12.22 İskeletin Gizlenmesi 12.3.4 Mezar Taşı (karakter3) Şekil 12.23’de görülen tasarım, programcımızın mezar taşı nesnesi için yapmış olduğu tasarımdır. Şekil 12.23 Mezar Taşı Nesnesi 243 Programcımız mezar taşı nesnesini program içinde karakter3 olarak isimlendirmiştir. Şekil 12.24’de görülen tanımlamalar, mezar taşı nesne sine aittir. Şekii 12,24 Mezar Taşı Hareketi Programcımız genel karakter hareketlerini tasarladığı bu program par çalarında en üstte bulunan kısımda, mezar taşının başlangıç pozisyo nunu programlamıştır. Burada x konumu olarak-191 ve y konumu ola rak -122 değeri belirlenmiştir. Böylece, bu nokta mezar taşımızın, yani karakter3’ün başlangıç noktası olmuştur. Hemen altında duran ortadaki program parçası karakter3’ün -2 birim sağdan sola hareketi içindir. En altta bulunan kod parçası ise, Sürekli komutuyla karakter3'ü n x ko numunu denetlemektedir. Bu konumun -244 olması durumuda, sürekli komutumuzun içerisinde bulunan hareket kodunu aktif etmektedir. Ha reket kodumuz, k a ra k te r3 'ü x=249 ve y=-122 konumuna taşımakta dır. Böylece mezar taşımız sürekli olarak bir akış halinde hareket et 244 mektedir. Oyun içerisinde bulunan diğer mezar taşlarının da kodları bi rebir aynıdır. Aralarındaki tek fark, mezar taşlarının belirdiği ilk konumla rıdır. Bu nedenle örneğimizde, diğer mezar taşlarını anlatmayacağız. Aynı şekilde, oyun içerisinde bulunan diğer bazı karakterler bire bir aynı özelliklere sahip olduğu için, aynı olan karakterlerin sadece bir tanesini inceleyeceğiz. Örneğin iskelet ve mezar taşları bu şekilde benzer tanım lanmıştır 12.3.5 Yarasa (karakterS) Şekil 12.25’de görülen tasarım, programcımızın yarasa karakteri için yapmış olduğu tasarımdır. Programcımız yarasa karakterini program içinde karakterS olarak isimlendirmiştir. Şekil 12.25 Yarasa Karakteri Şekil 12.26’da gördüğünüz kod sayfası, yarasa karakterimize aittir. Kod parçacıklarımızı incelediğimizde, yine ilk kodumuzun, kullanıcının x tu şuna bastığında karakterimizin belli bir süre bekledikten sonra sahne mizde görünmesini sağlamak için yazılmış olduğunu görüyoruz. Şekil 12.26 Yarasa Hareketi 245 Kod parçacığımızın devamı, yani hareket kodu, S ü re k li komutunun içine yerleştirilmiştir. Bu komut ile programcımız, karakterimizin sağdan sola olan hareketini -2 birim hareket koduyla tamamlamıştır. Bu kod parçacığı yarasamızın oyun içerisinde hareketini akıcı bir şekilde sağ lamıştır. Şekil 12.27’de verilen program parçamız, karakterimizi kullanıcı oyunu başlattığında gizlemek içindir. Programcımız bu kodla, oyun baş layana kadar (x tuşuna basılana kadar) karakterimizi sahnede gizlemiş tir. Şekii 12.27 Yarasayı Gizle Şekil 12.28’de verilen kod parçacığımız ise S ü re k li komutu ile, yarasa karakterimizin x koordinatını kontrol eder. Sahnenin sol tarafından baş layarak sahnenin sonuna gelip gelmediği kontrol edilir. Şekil 12.28 Yarasayı Baştan İlerlet Burada programcımız, x değerini sabit tutup, (sahnenin sağ tarafı), y değişkenine rasgele bir değer atamıştır. Bunun nedeni, yarasamızın sü rekli olarak sahnenin sağ tarafında aynı noktada belirmesini engelle mektir. Aksi durumda, belirttiğimiz nokta sabit olacak ve kullanıcı oyunu oynamaktan sıkılacaktır. Ayrıca burada dikkat etmemiz gereken nokta, yarasalarımızın rasgele seçilen y koordinatlarının belli bir aralıkta olma- 246 sidir. Böylece programcımız yarasalarımızın sahnemizin alt tartında be lirmesini engellemiştir. Şekil 12.29’da görülen kod parçacığımız, gördü ğünüz gibi x tuşuna basıldığında, yani oyun başladığında çalışmaktadır. S ü r e k li komutunun içerisine yerleştirilen görünüm kodları ve bekleme kodları, yarasamızın yarım saniye aralıklarla kostüm değiştirmesini sağ lamıştır. İlk görünüm kodu yarasamızın kanatlarının yukarıda olduğu kostüme aittir. Ardından gelen 0 ,5 ’lik bekleme komutu ise kanatları yu karıda olan yarasamızın bu kostümle yarım saniye beklemesini sağla maktadır. Ardından gelen ikinci kostüm komutu, yarasamızın kanatları nın aşağıda olduğu kostümün seçilmiş olduğu görünüm kodudur. Ardın dan gelen bekleme koduyla, kanatları kapalı olan yarasamız bu şekilde de yarım saniye bekleyip, S ü r e k li komutu sayesinde tekrar başa dö necektir. Bu kod parçacığımız, yarasamızın kanat çırpması için tasar lanmış bir koddur. Zira hiçbir kullanıcı yarasaların füze gibi uçtuğu oyun lar oynamak istemez. Bu nedenle, oyunlarınızda ayrıntıları atlamamanız tavsiye olunur. t ü ış u b a s ı l d ı ğ ı n d a ■ : g b a t2 -b k o s tü m ü n e geçin G E » s a n iy e b e k le y in b a t 2 -a j k o s t ü m ü n e g e ç in J|| G E ) s a n iy e b e k le y in Şekil 12.29 Yarasanın Uçma Hareketi Şekil 12.30’da görülen yarasaya ait son program parçacığımız ise, ya rasalarımızın hayaletle çarpıştığı noktalarda renklerinin değişmesi için tasarlanmıştır. X tuşuna basıldığında aktif olan kodumuz, S ü r e k li ko mutunun içerisine yerleştirilen görünüm ve bekleme kodlarıyla tasar- 247 lanmıştır. Bir önceki kod bloğumuzda kullanılan strateji burada da aynı dır. Burada dikkat etmeniz gereken konu, yarasanın kanat çırpışındaki akışı bozmak istemeyen programcımız, renk değişikliğini kanat çırpış döngüsüne ekleyerek yapmıştır. Ek olarak, ise S ü re k li komutumuz bu rada bir koşul bekleyerek çalışmaktadır. 2 9 t u ş u b a s ıld ığ ın d a F ,’ K ara k teri b a t2 -b l y a k la ş ıy o r m u ? is e s ü r e k li |k o s t ü m ü n e g e ç i n lıJ t-1 s a n ı v e b e k l e y i n b at2-a j k o s t ü m ü n e g e ç in s a n iy e b e k le y in bat2-b ; k o s t ü m ü n e g e ç in Şekil 12.30 Hayalet ile Çarpışma Bu koşul hayalet karakterimizin yarasa karakterimizle aynı noktaya gel mesi durumudur. Burada programcımız bu koşulu algılama grubu kodla rından “y a k laş ıyo r mu?” komutunu “is e s ü re k li” komutuna iliştire rek gerçekleştirmiştir. 12.3.6 Oyun Bitti Sahnesi (karakter14) Programcımızın Şekil 12.31’de tasarladığı karakter aslında, bir sahne görüntüsüdür. Game Ö ver (oyun bitti) sahnesini bir karakter gibi tasarla yan programcımızın takip ettiği strateji oldukça açıktır. Şekil 12.31 Oyun Bitti Sahnesi Burada programcımızın karakter olarak tanımladığı sahne, ana sahne mizin yazılar bölümünde de tasarlanabilirdi. Ancak burada programcı mızın 4 ayrı sahne kullandığı düşünülürse, 4 ayrı sahne için tasarladığı kodların, tek bir kod penceresinde hazırlanması, belkide çalışma düzeni açısından oldukça karışık olacaktı. Bu nedenle, programcımızın izlediği yol oldukça yararlı olmuştur. Kod parçacıklarımızı incelersek, kullanıcı programımızı çalıştırdığında ilk olarak aktif olan kod parçacığımız Şekil 12.32’de görülen tanımlamalardır. Burada programcımız bu karakterimi zi gizlemiştir. Böylece karakterimiz Game Över görüntüsünü sağlamak tadır. Şekil 12.32 Gizlen Şekil 12.33’de görülen program parçası, X tuşuna basıldığında aktif olur. Burada programcımız, score değişkeninin -30 durumunda aktif olan, “ise s ü re k li” komutu içerisine yerleştirdiği görünüm kodu ile, karakterimizi “score -30 olduğunda", yani kullanıcı oyunu kaybetti ğinde, en öne taşımış ve görünür moda sokmuştur. Şekil 12.33 Oyunu Kaybettiyse Görün Şekil 12.34’de görülen program paraçacığımızda yine “is e s ü re k li” komutuna iliştirilmiş operatörümüzün score değişkenimizi kontrol ettiği 249 ni görmekteyiz, score değişkenimizin -30’dan küçük olma durumunda, çalışan “ise s ü re k li” komutumuz, içerisinde bulunan ses kodu ile ses yüksekliğini %0’a indirmiş, ardından tüm sesleri durdurmuştur. Böylece, oyunun aktif olduğu sıradaki tüm sesler durdurulmuş olur. Ardından başka bir S ü re k li komutu i l e ses y ü k s e k liğ i %100 yapılm ış ve 4 saniye a r a lık la r la B e llT o ll sesi çalınmıştır. Bu müzik bizim oyuncumuzun, oyunu kaybettiğinde duyacağı game över müziğimiz ol muştur. İ İ İ Q | t u SU b a s ı l d ı ğ ı n d a f S co re < j [ESI is e s ü r e k li S e s y ü k s e k l iğ i n i M tyb y a p ın T ü m s e s le r i d u r d u r u n S ü r e k li îr! S e s y ü k s e k l iğ i n i V u r a *.'o y a p ın B e llT o ll s e s in i ç a lın E E s a n i y e b e k le y î n Şekil 12.34 Oyunu Kaybettiyse-ses 12.3.7 Karşılama Ekranı (Karakteri5) Şekil 12.35’de gördüğünüz karakter, karşılama ekranı olarak tasarlan mış ve k ara kte rIS olarak isimlendirilmiştir. Şekii 12.35 Karşılama Ekranı Şekil 12.36’da görülen tanımlamalar, sağ yön tuşuna basıldığında aktif olur ve karşılama ekranının görülmesini sağlar. Burada program parça- 250 sından oyunun isimini göstermekle birlikte, oyunun çalışacağı tuşları da kullanıcıya bildirmektedir. Şekil 12.36 Karşılama Ekranını Göster ve Gizle Görüldüğü gibi, 2 adet programcıktan oluşan kod sayfamız, oldukça ba sittir. Yeşil bayrak H tıklandığında ile tanımlanan t ı k landığında kod bloğu aktif hale gelir ve karakterimiz görünür moda geçer. Şimdi aşağıdaki sorunun cevabını bulmaya çalışalım. X tuşuna basılmasıyla, oyunun başlagıcında gizlenen karakterimiz görülür hale gelir. Acaba bunun nedeni nedir? Bunun nedeni, birazdan inceleyeceğimiz oyun tanıtım sahnesinin tık landığında en öne gidiyor olmasıdır. Aslında yukarıdaki karakterimiz (yani sahnemiz) hali hazırda program başlatıldığında görülüyor olsa da, oyun tanıtım sahnesi ardında kaldığı için görülmemektedir. Birazdan inceleyeceğimiz oyun tanıtım sahnesinin kodlarında, sağ yön tuşuna basıldığında çalışan koda lütfen dikkat edin. Burada sağ ok yönüne ba sıldığında oyun tanıtım sahnesi gizlenir (yani bu sahne için tasarlanan karakter gizlenmiştir). Böylece karşılama sahnesi oyun başlatıldığında görülür hale gelmiştir. 251 12.3.8 Kazandınız Sayfası (Karakteri 7) Kullanıcı oyunu kazandığında görülmesi istenilen ekran, k arakterl7 olarak Şekil 12.37’de görüldüğü gibi tasarlanmıştır. Şekil 12.37 Kazandınız Sahnesi Böylece YOU ARE THE WINNER sahnesinin ekrana gelmesi sağlanır. Burada programcımız yine Şekil 12.38’de görülen kod ile, karakterimizi oyunun başlatılmasıyla gizlemiştir. Şekil 12.38 Kazandınız Sahnesinin Gizlenmesi Şekil 12.39’da görülen kod parçacığımızda, program başladığında sco re değişkenimizin görülmemesi için, bu değişken sahnede gizlenmiştir. Oyun tanıtım sayfasında, score gibi bir elemana ihtiyaç yoktur. Aslında burada bu kod parçacığının karakterle bir alakası yoktur. Ancak unut mayın ki, değişkenleri her karakterin kod sayfasında kontrol edebilirsi niz. Programcımız burada değişkenimizi bu karakterimizin kod sayfa sında kontrol etmeyi seçmiştir. Şekil 12.39 Puanı Gizle Şekil 12.40’da görülen program parçacığımız, kullanıcının x tuşuna basmasıyla çalışmaktadır. Bu tanımlama, karakterimizin öne gelip gö 252 rülmesini sağlar, is e s ü re k li komutuna iliştirilen operatör sayesinde, score değişkenimizi kontrol eden programcımız, score değişkenimizin değerinin 60’dan büyük olma durumunu kullanıcının oyunu kazandığı durum olarak nitelemiştir ve Öne g id in ve Göster, görünüm komutları sahnemizi, yani karakterimizi kullanıcıya göstermektedir. İf lt u ş u b a s ıld ığ ın d a S co re > W O n e g id in ı -' G ö s t e r i; "f? is e s ü r e k li , w W İ • L.jffl Şekil 12.40 Puan Kontrolü Şekil 12.41’de görülen kodumuz yine score değişkenimiz için tasarlan mıştır. x tuşuyla çalışan bu kod parçacığımız, is e s ü re k li komutuna iliştirilmiş operatörler yardımıyla, score değişkenimizin 60’dan büyük ve -30* dan küçük olma durumunu kontrol etmektedir. Bu değerler arasında oyunun aktif olmadığı düşünülürse, kullanıcının score gibi bir elemana ihtiyacı olmadığı anlaşılır. Bu nedenle programcımız is e s ü re k li kod bloğu içerisine yerleştirdiği g iz le y in komutuyla değişkenimizi sahnede gizlemiştir. o f l M frju ı b a s ı l d ı ğ ı n d a ISp, — ■ S co re : > H H veya --- saasrar S co re : < B cbl ."»ut is e s ü r e k li S c o r e . , ' d e ğ i ş k e n i n i g i z le y i n Şekil 12.41 Puanı Gizle ve Göster 253 Şekil 12.42’de görülen program parçası, x tuşuyla aktif olup is e sü r e k li komutuna iliştirilmiş operatör ile score değişkeninin değerini kontrol etmektedir. " i t u ş u b a s ıld ığ ın d a S co re is e s ü r e k t i S e s y ü k s e k l iğ i n i y a p ın T ü m s e s le r i d u r d u r u n ■fjf!'! •5l\~f S ü r e k li İB İŞ § 8 . . j S e s y ü k s e k l iğ i n i f f i n j ’+'o y a p ın C n tk e tt s e s in i ç a lın Şjjjjî • I ' T ' O Ş-aniye b e k le y in Şekil 12.42 Ses Ayarları score değişkenin değerinin 60 olma durumunda çalışan is e s ü re k li kod bloğu içerisinde bulunan komutları sırayla ve sürekli olarak çalıştırır. İlk komut olan Ses y ü k s e k liğ in i 0 % yapın komutu, çalan seslerin duyulmasını engeller. Bunun altında bulunan Tüm s e s le ri durdurun komutu, çalışan tüm seslerin durdurulmasını sağlar. Oyunu kazanarak bitiren oyuncuya duyurulacak sesi aktif etmek için hemen altında bulu nan S ü re k li komutu içerisine yerleştirimiş ses kodları Ses y ü k s e k li ğ in i 100 % yapın, C rickets ses dosyası içindeki sesleri çalar ve bekleme kodunu çalıştırır. En son Şekil 12.43’de görülen program par çacığımız x tuşuna basıldığında kullanıcıya score değişkenini görünür hale getiren koddur. Şekil 12.43 Puanı Göster 254 12.3.9 Oyun Tanıtım Sayfası (Karakteri8) Programcımız, bir oyun tanıtım sayfası gibi tasarladığı Şekil 12.44’de görülen sahneyi program çalıştırıldığında görülür kılıp tüm gerekli bilgi lendirmeyi bu sahnede yapmıştır. Bu sahneyi karakterlS olarak isim lendirmiştir. Oysus h s n lıır ıs l. içsa aarg ııkf Ii3 i« n ,:> ıh « ı* ! Şekil 12.44 Oyun Tanıtım Sayfası Şekil 12.45’de görülen kod oyun çalıştığında aktif olup karakteri görünür kılar ve öne getirir. Hemen altındaki ikinci program parçacığı ise sağ yön tuşuna basıldığında aktif olur ve altında bulunan k a ra k te ri g iz le y in komutunu çalıştırır. 255 Şekii 12.45 Tanıtım Sahnesini Göster ve Gizle Verdiğimiz bu örnek ile nerdeyse Scratch programının tüm ana özellikle rinin kullanıldığı bir oyunu inceledik. Bu örneğin karşılaşacağınız sorun larda size yardımcı olabileceğini düşündük. Dört günlük bir eğitimden sonra böyle bir programın tasarlandığı düşünülürse, biraz zaman ayıra rak çok daha kapsamlı oyunların geliştirilebileceği açıktır. Çözümleye mediğiniz problemlerde size yardımcı olacak güçlü bir Scratch ekibi, Scratch sayfasında sizi beklemektedir. Oldukça hızlı yanıt alabileceğiniz bu ekip Scratch programının tasarımcıları olup, yeterince ilgililerdir çe kinmeden bu kişilerden yardım alabilirsiniz. 256 ^!Sv Alıştırmalar 1. Yazılım geliştirme süreçleri izlendiğinde, bu bölümde verdiğimiz ör nek çalışmada tasarım ve geliştirme aşamaları için örnek bir çalışma yaptık. Bu aşamalardan sonra yazılım geliştirme süreçleri açısından, izlenmesi gereken bir sonraki adım nedir? 2. Bu oyunu siz yazmış olsaydınız, daha farklı tasarlamayı düşündü ğünüz kısımlar hangileri olurdu? 3. Programlama terminolojisinde kullanılan “bug” kavramı hangi amaç la kullanılır? 4. Bu programda bazı bug’lar var. Bu bug’ları bulabilir misiniz? 5. Bu program kodlamasında daha dikkat edilmesi gereken unsurlar nelerdir? 6. Şimdi yazdığımız bu programı çalıştırarak deneyiniz. Programın istediğiniz gibi çalışmayan kısımları var mı? Bunların sebebi ne olabilir? Bu durumları düzeltmek için ne yapmak gerekir? 7. Önceki alıştırmada yaptığımız işlem, yazılım geliştirme süreçlerinde nasıl adlandırılır? Bu işlemin gerçekleştirilmesi için ne gibi çalışmaların yapılması gerekir? 8. Bu program içindeki nesneye dayalı programlama temellerine yöne lik kavramlar var mıdır? Bu programa iat nesneler arasındaki bağıntıları bir sınıf yapısı çizeneğini (Şekil 11.1’deki gibi) hazırlayabilir misiniz? 257 BÖLÜM 13 Geliştirme Daha önce de bahsettiğimiz gibi, Scratch program geliştirme ortamı sa dece oyun tasarlamak için değil, diğer birçok kullanışlı program gelişti rebilmek için de gerekli tüm yeteneklere sahiptir. Kitabımızın bu bölü münde, Scratch programının farklı yeteneklerini gösterebileceğimiz bir örneği size detayları ile anlatmak istiyoruz. Bu bölümde üzerinde çalışa cağımız örnek Scratch programı, bir hesap makinesi. Hesap makinemi ze “Hesabımın Kedisi” ismini verdik. Bir hesap makinesinin istenilen şekilde çalışabilmesi için gerekli tüm detayları burada görüp, daha ge lişmiş bir hesap makinesi yapmak için bu hesap makinemizi nasıl daha fonksiyonel bir hale dönüştürebileceğimizi sîzlerle birlikte inceleyeceğiz. 13.2 Tasarım Hesap makinemizin tasarımında öncelikle, temel fonksiyonların tanım lanması için gerekli olan dört düğmenin fonksiyonel özellikleri ile birlikte geliştirilmesini hedefledik. Daha sonra, bu düğmelere benzer bir şekilde diğer fonksiyonel özelliklerin de geliştirilmesi mümkün olacaktır. Bu yak laşımımız aslında yazılım mühendisliğinde pilot uygulama ya da proto tip çalışması (prototyping) adını verdiğimiz bir yaklaşımdır, öncelikle pilot bir uygulama ile prototipini geliştireceğimiz yazılım modelimiz ile, kullanıcılarımızın görüşlerini alıp, bu model üzerinde gerekli düzenleme leri ve değişiklikleri yapabiliriz. Daha sonra, kullanıcılarımızın da istekle rini yerine getirecek şekilde modelimizi detaylandırabileceğimiz projemiz ile geliştireceğimiz yazılımı kullanacak olan kişileri daha fazla memnun edebiliriz. Bu yaklaşım ile geliştireceğimiz yazılım üzerinde daha sonra kullanıcıdan gelecek değişiklik isteklerini en aza indirebiliriz. Bu yakla şım yazılım geliştirme süreçlerindeki risklerimizin azalmasına katkı sağ layacak ve yazılım geliştirme maliyetlerini en aza indirecektir. Şekil 13.1’de bir hesap makinesinde bulunması gereken temel düğmeler gö rülmektedir. Şekil 13.1 Temel Düğmeler Bu dört düğme aslında, hesap makinemizin omurgasını oluşturmaktadır. Bu dört düğme dışında kalan diğer düğmeler, bu dört düğmenin kopya ları ve bu kopyaların kodları üzerinde yapılacak küçük değişiklikler ile geliştirilebilir. Hesap makinemizin anlatımına da bu dört düğme üzerin den devam ederek hesap makinemizin pilot bir modelini şimdi hep birlik te geliştirelim. 13.3 Geliştirme Hesap makinemizin tasarımında görülen dört düğmenin hazırlanması ve bu düğmelere ait fonksiyonel özelliklerin programlanması için gerekli tanımlamaları birlikte inceleyelim. Öncelikle bu düğmeler içinden rakam tuşlarının oluşturulması için gerekli program parçalarımızı birlikte gelişti relim. 13.3.1 Rakam Düğmeleri Rakam düğmeleri ile ilgili programları geliştirmeye başlamadan önce, bu düğmelerin görsel modelini Scratch ile oluşturmamız gerekmektedir. Bu amaçla Şekil 13.2’de görülen düğme tasarımını gerçekleştirdik. Bu düğme görüntüsünü hazırlamak için oldukça basit adımlar kullandık. Yeni karakter ç iz in komutuyla açılan editörde, bir kare şekli içerisi ne beyaz font rengiyle 1 rakamını yazdık ve tamam seçeneğiyle 1 ra kamlı karakterimizi Şekil 13.2’de görüldüğü gibi hazırladık. Şekil 13.2 Bir Düğmesi Tasarımı Şekil 13.3’de gördüğünüz kod sayfası, karakter isminden de anlaşıldığı gibi, hesap makinemizin 1 numaralı rakamına aittir. Görüldüğü gibi bu rakamın kodları son derece basittir. Şekil 13.3 Bir Düğmesi Kodlan Karakterimize atadığımız sol taraftaki kod bloğumuz, karakterimize kul lanıcının tıklamasıyla aktif olan “K a ra k te r... tık la d ığ ın d a ” komu tuyla çalışmaktadır. Hemen altında çalışan kodumuz ise, değişkenler kod grubunda oluşturduğumuz listemize aittir. Bu liste, kullanıcın numaratörlere her tıkladığında o karaktere atadığımız değeri listeye girecektir. 262 Bunun için, “K a ra k te rli tık la n d ığ ın d a ” kod bloğu, altındaki liste ko du çalıştırılır ve 1 değeri listemize eklenir. Eğer biz liste kodumuzun aktif olan kısmına 10 yazsaydık, karakterimize tıklanmasıyla listemize 10 de ğeri eklenecekti. Bu nedenle, editörde tasarladığınız her numaratör için doğru değeri girdiğinizden emin olmalısınız. Sağ taraftaki kod bloğumuz ise görüldüğü gibi, kullanıcı programı çalış tırdığında aktif olan bir kod bloğudur. Buradaki değişkenler grubuna ait kodlarımızın hepsi tanımlanan değişken değerlerinin ilk değerlerini (initializatiorı) atamak içindir. Yani bu tanımlamaların bu karakterimizin kod sayfasında olmasının herhangi bir önemi yoktur. Bu kodlar herhangi bir karakterin kod sayfasında ya da sahnenin kod sayfasında tanımlanabilir. 13.3.2 Topia İşlem Düğmesi Sıradaki karakterimiz toplama fonksiyonunu üstlenecek karakterimizdir. Tıpkı 1 numaralı düğme için tanımladığımız gibi, toplama düğmesini de editörden tasarlayabiliriz. Biz diğer tüm karakterleri oluşturmak için, ilk tanımladığımız düğmeyi, yani 1 numaralı düğmeyi çoğalttık ve editörde açarak tüm düğmelerimizin aynı büyüklükte ve görünümde olmasını sağladık. Çoğalttığınız karakterin görünüm sayfasına geçtiğinizde, dü zenle seçeneğini tıklayarak editörü açabilirsiniz. Editördeki te x t seçe neğine tıkladığınızda, kopyalanmış düğmenin daha önceden yazılmış kısımları aktif hale gelir. Eski yazıyı silip yerine istediğiniz rakamı ya da şimdi uğraştığımız + işaretini kolayca yerleştirebilirsiniz. Şekil 13.4’de görülen kod bloğu, toplama yapacak olan karakterimize aittir. Aslında genel olarak tüm operatör karakterlerimiz yani toplama, çıkarma, çarpma, bölme ve eşittir karakterlerimizde de hemen hemen aynı kod bloğu bulunur. Gördüğünüz bu kod bloğu, C programlama di linde kullandığımız switch yapısına çok benzemektedir. “Karakter2 tık la n d ığ ın d a ” komutuyla aktif hale geçen bu kod bloğunda temel ya- pı, “Eğer ise başka” cümleleri içerisine yerleştirilmiş birçok değişken, liste ve operatör kodundan oluşmaktadır. İki bölüm halinde anlatacağı mız kod bloğunun ilk bölümü, “eğer ise Başka” kodunun “eğer is e ” kısmında kalan bölümüdür (Şekil 13.4). Şekil 13.4 Topla İşlem Düğmesi Kodlan -1 Bu bölümde 6 adet değişken kullanılmıştır. Hatırlayacağınız gibi bu de ğişkenleri 1 numaralı düğme karakterinin kod sayfasında da görmüştük. Orada başlangıç değerleri alan bu değişkenler, burada hesap makine mizin beyni olarak görev yapmaktadır. Öncelikle buradaki değişkenleri kısaca inceleyelim, ilk değişkenimiz Sonuç değişkeni. Bu değişkenimiz hazırladığımız karakterlerimizle listemize yazdırdığımız değerleri kulla nıcının herhangi bir operatör düğmesine bastığında kendi üzerine kay deden değişkenimizdir. Kısaca üzerinde tüm işlemlerin oluşacağı değiş kenimiz bu değişkendir. Toplama, çıkarma, bölme, ve çarpma işlemleri burada gerçekleşmektedir. ikinci değişkenimiz Durum değişkenidir. Bu değişkenimiz hesap maki nemizin kullanıcı tarafından çalıştırıldığında “0” değerini alan, yani ma kinemizin beynine “şu an herhangi bir işlem düğmesine basılmamıştıı” 264 mesajını gönderen bir değişkendir. Görüldüğü gibi program çalıştığında “0” değerine sahip olan bu değişken, kullanıcının şu anda incelediğimiz toplama düğmesine basmasıyla 1 değerini alır ve artık makinemizin de ğişkenlerden oluşturduğumuz beyni bir işlemin devrede olduğunu bilir. Üçüncü değişkenimiz Topla değişkenidir. Bu değişkenimiz toplama operatörünün aktif olduğunu makinemizin beynine haber veren bir de ğişkendir. Yine program İÜ kez çalıştığında “0” değerini alan bu değiş ken, şu an incelediğimiz toplama karakterine tıklanmasıyla “1” değerini alır. Bu değer makinemizin beynine “artık bir toplama işlemi yapıldığını ve listemize eklenen değerlen bundan sonra basılacak herhangi bir ope ratör karakteri ile ilk girilen değeri toplaması gerektiğinr söyler. Kalan değişkenlerimizin özellikleri de genel olarak aynıdır. Yani topla mada “Topla” değişkeni “1” değerini alırken, çarpma işlemi karakterine tıklandığında “çarp” değişkeninin değeri “1” ölür. Şimdi kod bloğumuzun ille parçasını genel olarak inceleyerek farklı düğmeler arasındaki ilişkiyi daha iyi anlamaya çalışalım. Burada “Eğer ise Başka” kodunun ilk bölümüne yerleştirilmiş olan “ve” operatör koduyla iki koşula bağlanmış olan kodumuzun İlk koşulu “durum=0” ve ikinci koşulu “sonuç=0” ise, hesap makinemizin herhangi bif işleme başlayıp başlamadığını kontrol eder. Durum değişkenimizi tanıtırken bahsettiğimiz gibi, bu değişkenin sıfır değerine sahip olması henüz hiç bir işlem yapmadığı anlamına gelmek tedir. sonuç değişkeninin 0 değerine sahip olması ise, listemizdeki o anki değerin sonuç değişkenine yansıması için oluşturulmuş bir koşul dur. Bu koşullar “0” değerine eşitken kullanıcımız toplama karakterimize tıklarsa ilk çalışacak kodumuz “sonuç” değişkenini “ana2” yapın kodu dur. Yani “ana2” listesindeki değerleri sonuç değişkenine eşitle anlam ı- 265 na gelir. Ardından gelen “durum” değişkeni kodu çalışır ve “durum” de ğişkenini “1” değerine ulaştırır. Bu durum makinemize bahsettiğimiz gibi bir işleme başlandığı bilgisini verir. Ardından gelen “to p la ” değişkenini “1” değerine ulaştıran kodumuz, toplama işleminin başladığını makine mize bildirir. Kalan 3 değişkenimize “0” değerini veren operatör karakte rimiz, çıkarma, çarpma ve bölme işlemlerinin gerçekleşme ihtimalini or tadan kaldırır. Bundan sonraki kısımda yukarıda verdiğimiz iki koşulun doğru olmama durumunda devreye girecek olan C programlama dilinde de i f yapısı içinde kullandığımız “else” komutu, yani burada “Başka” olarak adlandı rılmış komuttur. Şekil 13.5’de görüldüğü gibi Başka kısmının içine yer leştirilmiş başka bir “Eğer ise Başka” bloğu bulunmaktadır. Bu kısım da “Eğer is e ” kısmında toplama işleminin gerçekleştiği değişkenin de ğerini sorgulayan ilk kısım görülmektedir. Burada “Topla” değişkeninin değeri “1” ise “sonuç” değişkenimizin de ğeri sonuç değişkeninin o anki değeri ve “Ana2” isimli listemizin değeri ni toplamaktadır. Bu sırada kodumuzun üst kısmından da hatırlayaca ğınız gibi, “Topla” değişkenine “1” değerini vermiştik. Bu kodun deva mında “Başka” kısmında bulunan “Eğer is e ” kodlarımızın ilki çıkarma işlemi için hazırlanmıştır. Burada kodumuz, toplama işlemiyle başlayan işlemin çıkarma işlemiyle devam edip etmediğini kontrol etmektedir. Şimdi bu durumu daha iyi anlayabilmek için, aşağıdaki senaryoyu ince leyelim. Kullanıcımızın programı çalıştırdığını düşünün, ilk olarak kulla nıcımız bir değer girer ve topla düğmesine basar. Ardından toplamak istediği ikinci değeri girer ve yaptığı bu işlemin sonucundan başka bir değeri çıkarmak isteyebilir. İşte tam bu sırada çıkarma işlemimizin du rumunun kontrol edilmesi gerekmektedir. Eğer kullanıcımız çıkarma 266 düğmesine bastıysa, çıkarma karakterimizin ardında çalışan kodlarımız çıkarma işleminin durumunu kontrol eden değişkenin değerini “1” olarak değiştirir. BB 1 il I Şekil 13.5 Topla İşlem Düğmesi Kodlan - 2 Bu da, toplama işleminin ardında yani şuan incelediğimiz kod bloğunda ki bu bölümde koşul kontrol kodumuz sayesinde fark edilir. Böylece çı karma işlemi gerçekleşir. Buradaki kodumuz (eğer " ç ık a r = l" is e ) koşul cümlesi doğru olursa, yani ç ık a r değişkeninin değeri “1” oldu ğunda çalışır ve sonuç değişkeninin o anki değerinden yani ilk değer ve ikinci değerin toplamından sonraki girilen değeri çıkartır, sonuç değiş keninin son değeri İTkarakterine tıklanana kadar ya da herhangi bir işlem düğmesine tıklanana kadar sahnede görülmez. Sonraki “eğer is e ” kodumuz da yine toplama işleminin gerçekleşmesinin ardından çıkan sonucun herhangi bir değerle çarpılması ihtimaline karşı bulunan bir koşul tanımlamasıdır. Sonraki koşul kodu ise, bölme işleminin ya pılmak istenmesi durumunu kontrol eder. Yani kullanıcımız ardarda farklı işlemler yapmak isterse burada “e ls e ” yani “başka” kısmındaki koşul kodları sınanıp buna göre uygun işlem ile devam edilecektir. Bun dan sonraki değişken kodlarımıza bakarsanız, bu üç işlem için hazır lanmış koşul kodlarının herhangi biri çalışmamışsa, ki bu kullanıcımız herhangi bir farklı işlem yapmak istemediği durumdur, bu değişken kod larımız aktif olur. Değişkenlerimizi sırasıyla “to p la = l”, “çıkar=0”, “çarp=0”, “böl=0” değerine taşır. Aslında bu değişkenlerin aktif olma durumu şu anlama gelir: “kullanıcı ilk değeri girdi topla düğmesine bastı bundan sonra değişik bir işlem tuşuna basmadı tekrar toplama işlemi yaptı”. İkinci bir toplama işleminin gerçekleştiği bilgîâini burada son kısımda bulunan “to p la ” değişkeninin değerini “1” yapan komut belirler. En son kod bloğumuzun en altında bulunan liste kodumuz herhangi bir işlem operatörüne basılması durumunun sonunda, yani kod bloğumuzun ta mamının çalıştığı ve artık listemizin yeni bir değer için hazır olduğu du rumda devreye girer ve listemizi siler. Liste değişkenimizi temizleyen bu kod parçacığına gelinceye kadar gerçekleşen olaylar, kullanıcımızın iş lem yapmak istediği her değeri girdiğinde gerçekleşir. Böylece listedeki değer sonuç değişkeninin değerine eşitlenir, işlem algoritması çalışır ve liste temizlenir. 13.3.3 Çıkart İşlem Tuşu Şekil 13.6 ve Şekil 13.7’de görülen kod blokları, çıkarma işlemi (kanakte r3 ) için hazırladığımız karakterimize aittir. Burada görüldüğü gibi, kod bloğumuzun yapısı tamamen toplama işlemini gerçekleştiren karakteri- 268 mizin yapısı ile aynıdır. Farklı olan noktalar, işlem farklılığından dolayı, öncelik sırası değişen koşul kodları ve değişken değerleridir. Yine kulla nıcımızın karaktere tıklamasıyla çalışacak olan kod bloğumuzun ilk bö lümü durum ve sonuç değişkenlerinin değerlerinin 0 olma durumudur. Bu koşulların sağlanma sürecinde hemen altındaki değişken kodları ça lışacak ve sonuç değişkenini o anki ana2 adlı liste değerimize eşitleyecektir. Ardından durum değişkeninin değerini 1’e eşitleyecek olan ko dumuz çalışacaktır. Bu durum, daha önce anlattığımız gibi kullanıcının bir hesap yapmaya başladığı anlamına gelmektedir. Hemen ardından to p la değişkeninin değeri 0’a eşitlenir. . .. .H '■. atalı»!» jjj Karakter} tıklandığında Eğer durum = | n B ve ■B' i: d u ru m topla S *i F İ y a p ı n ’î 0 Sıkar3|-i ü İf" î=>rP 1■ ise i lonuç .i'i ana 2 yapın H ■ sonuç = BI W>D y a p ın 1i !İ:fH H i 1111M ::S il5ii 1’ İjjjj |jj i l i y a p ın yapın gglfğf böl9 ‘i m y a p ı n Başka Şekil 13.6 Çıkart İşlem Düğmesi Kodları-1 Görüldüğü gibi, burada toplama karakterimizin kodlarından farklı olan bir durum söz konusudur. Bu kod bloğunun çıkarma işlemine ait olması to p la değişkenini 0’a eşitlerken, hemen altında bulunan ç ık a r değiş kenini 1 değerine eşitlemektedir. Böylece hesap makinemize çıkarma işlemine başlandığı bilgisi verilir. Diğer kod bloğunda olduğu gibi, bura da da ilk kısımda çarp ve b öl değişkenlerinin değerleri 0’a eşitlenir. Kodumuzun ikinci kısmında bulunan Başka bölümü (Şekil 13.7), topla ma işleminin kod bloğunda olduğu gibi, yine başka bir “Eğer is e Baş ka” koduyla başlamaktadır. “Eğer is e ” kısmında buradaki ilk kodumuz, toplama işleminin kod bloğundan farklı olarak, çıkarma işleminin duru munu kontrol ederek başlar. Şekil 13.7 Çıkart İşlem Düğmesi Kodlan-2 Burada kodumuz ç ık a r değişkeninin değerini kontrol eder. Eğer değiş kenimizin değeri 1 ise, çıkarma işleminin gerçekleşeceği mesajı verilir ve kod bloğumuzun ilk kısmındaki sonuç değişkeninin değeri ana2 liste değişkeninin değerine eşitlenir. Daha sonra, Başka kısmında bulunan 270 Eğer is e Başka kodunun Eğer kısmındaki kod bloğu aktif hale geçer. Birada koşul kodunun koşulu sağlanmış ise, (“ç ık a r = l”) ki bunu kod bloğumuzun! Ik kısmında yerine getirdik, (“ç ık a r” değişkeninin “1” değerine eşitlenmesi), makinemiz sonuç değişkenindeki değerden kullanı cımızın girdiği ikinci değeri çıkartır. Ancak burada tekrar belirtmeliyiz ki, hesap makinemiz kullanıcımızdan işlemin ya eşittir tuşu ile bitirilmesini ya da başka bir işlem ile devam ettirilmesini beklemektedir. Bu iki durum oluşmadığı sürece, birbirinden çıkartılan değerler sahnede bulunan so nuç değerine yansımaz. İşte bu noktada çalışan kodlarımız toplama iş leminde olduğu gibi yine “Eğer ise Başka” kodumuzun Başka kısmın da bulunan komutlar sayesinde, -işleme devam edilip edilmeyeceğini sınamaktadır. Sınamalar sonucunda, eğer to p la değişkenin değeri 1 ise toplama işlemiyle devam edecek olan işlemimiz, girilecek üçüncü değeri yapılan ilk çıkarma işlemiyle toplar. Bu şırada ilk yapılan işlemin sonucu ekrana yansır, çarp değişkeninin değeri 1 olduğunda ise, çarp ma işlemiyle devam edilir ve çarpma işlemi için girilecek değer beklenir. Sonrasında "ilk işlem sonucu ekarana yansır, böl değişkeninin değeri 1 olduğunda, bölme işlemiyle devam edilir. ^Bölme işlemi için girilecek ikinci değer beklenir. Doğal olarak bu sırada yapılan ilk çıkarma işlemi nin sonucu ekrana yansır. Başka bir olasılık olarak koşullu bir şekilde yerleştirilmeyen çıkarma işlemine devam sağlayan kodumuz, ardarda bulunan koşul kodlarımızın hemen sonrasındaki, “ç ık a r değişkenini l ”r yapın komutudur. Bunun anlamı, yine bir çıkarrrıa işlemi yapılacak olmasıdır. İlk işlem sonucu ekrana, yani sonuç değişkenine yansırken, çıkarma işleminin devam etmesi için gereken üçüncü değer beklenir. Son olarak kullanıcı e ş i t t i r düğmesine basana kadar bu durumlar de ğerlendirilir. Eğer kullanıcımız e ş i t t i r düğmesine tıklarsa, başka bir işlem olmayacağını anlayan programımız, sonucu doğrudan ekrana yansıtır. 13.3.4 E şittir İşiem Düğmesi Şekil 13.8 ve 13.9’da görülen kod blokları eşittir (karakter4) karakterimi ze aittir. Burada yine aynı yapı kullanılmıştır. Yapıdaki tek farklılık, kod bloğumuzun “Eğer is e Başka” ana bloğunun ilk “Eğer ise” kısmında bulunan değişken kodlarının hiç birinin değerini değiştirmiyor olmasıdır. Aslında burada, bütün işlem değişkenlerinin değerleri 0’a eşitlenir. Bu kısım iki koşullu ilk kısmın, koşullarının oluştuğu durumda çalışan kı sımdı. Bu durum, diğer kod bloklarımızda da aynıydı. i, K a r a k te r 4 tık la n d ığ ın d a E ğer d u ru m —0 ve ^ B E sonuçCİ ‘i a n a 2 y ap ın 1 durum W H y ap ın sonuç = J bS . ise ' ! ' J ^ ,V to p la S ' i Q y a p ın M çıkar j j ' , .• * - Q y ap ın İİlllIlg İl M I >- E y a p ın S B . m İ _ ’. İ l i ' M rmKm & £V| B aşka Şekil 13.8 E şittir İşlem Düğmesi Kodları-1 Ana kod bloğumuzun Başka kısmına (Şekil 13.9) yerleştirilen ilk kodu muzun içindeki komutlardan koşullu olanlarının bir sırada olması, her hangi bir durumu etkilememektedir. Yani buradaki ç ık a r , çarp , b ö l, to p la işlemlerini etkileyen değişkenlerin bulunduğu koşul kodlarının (“Eğer is e ”) kod bloklarının sırası önemli değildir. Çünkü denetlediği miz şey herhangi birinin yapılıp yapılmadığını kontrol eder. Herhangi bir işlemin yapılması durumunda, bu amaçla tanımlanmış komutlar çalışır ve ilgili işlem yapılarak sonuca yansıtılır. 272 Burada, karakterimiz e ş i t t i r tuşunu temsil ettiği için, ardından başka bir işlem gelmeyecektir. Bu nedenle, sonda bulunan değişken kodları mız tüm işlemleri temsil eden değişkenlerin değerini 0’a eşitler. En son yine listemiz temizlenir ve kullanıcıdan gelecek değerler beklenir. Şekil 13.9 E şittir İşlem Düğmesi Kodları-2 Hesap makinemizin omurgasını oluşturan bu dört karakter aslıda tüm gereksinimlerimizi çözmüş durumdadır. Geriye kalan numaratör tuşları nın yapımı, kodlarının yazılması, yanısıra işlem tuşlarının hazırlanması ve kodlarının yazılmasını size bırakıyoruz. Bu tanımlamaları tamamla- dığınızda, hesap makinemizin görünümü Şekil 13.10’da görüldüğü gibi olacaktır. 37 D D 1 B 8 9 5 6 / 2 3 - D BB C Şekil 13.10 Hesap Makinesi Arayüzü Aslında şu ana kadar tanıttığımız iki işlem ve bir eşittir düğmesi size çarpma ve bölme işlemi için hazırlayacağınız kod bloğunu tamamen açıklamıştır. Kalan iki işlem karakterinin kod yapılarınında aynı olduğu nu göz önünde bulundurursanız değiştirmeniz gereken değişken değer lerini ve yerlerini toplama ve çıkarma işlemlerinin kod bloklarındaki farklılıklardan yola çıkarak hazırlamanızı öneririz. ___________________ 13. örnek Çalışma 2 'Sik Alıştırmalar Bu bölümde hazırladığımız hesap makinesi programı için bir algo ritma hazırlayınız. 2. Bu algoritmayı kullanarak, hazırladığınız hesap makinesi programı na benzer bir şekilde çalışan bir C programını yazabilir misiniz?