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?

Benzer belgeler