Bu sayfadaki yazılar
Sayfanın metni
Sayfa 17
hangi blokta olduğu (13-15, 32-63, 128-255), rengi (tanımlama sırasında C ile belirlenen), ekrandaki karakterlere göre önceliği (0: sprite önde, 1: sprite arkada) ve çok renkli olup olmadığı (0: normal, 1: çok renkli) burada belirlenir. MOB ve SET arasında boşluk var!! Sprite'ın diğer iki rengi de, CMOB b, d ile belirlenir. Her parametre adıyla aynı harfle tanımlanmış olan noktaların rengini verir. Sıra geldi onları hareket ettirmeye. Bunun için iki komutumuz var. Birincisi MMOB no, x1, y1, x2, y2, büyüklük, hız biçiminde kullanılıyor. Belirtilen no'ya sahip sprite, (x1, y1) koordinatlarından (x2, y2) koordinatlarına doğru verilen hızla ilerler. 'hız' için verilecek değerler 0-255 arasında olmalı (0: hızlı, 255: yavaş). 'büyüklük' ile de, Commodore 64'ün sprite'ı değişik yönlerde büyütebilme özelliğinden faydalanırsınız (0: normal, 1: yatay büyüme, 2: dikey büyüme, 3: hem yatay hem dikey büyüme). Diğer komut, RLOCMOB no, x, y, büyüklük, hız şeklindedir. Belirtilen sprite'ı o anda bulunduğu noktadan belirtilen koordinatlara doğru hareket ettirir. Diğer parametreler deminki gibidir. Peki, gösterdiğimiz bir sprite'ı kapatmak için ne yapacağız? MOB OFF no ile her sprite'ı görünmez yapabilirsiniz. Bir daha belirtelim, no 0-7 arasında olmalıdır. Ayrıca MOB ile OFF arasında boşluk var. Şimdi gelelim başka bir konuya... Sprite'ların birbirleriyle ve ekran karakterleriyle çarpışmasının anlaşılması sorunu. Basic için bu çok kolay. Önce sprite-sprite çarpışmasını görelim. Aşağıdaki komuta bir bakın:
DETECT 0: IF.CHECK (nol,no2) - 0 THEN çarpışma olmuş...
Yukarıdaki satırın sonunda 'no1' ve
'no2' numaralı sprite'lar arasında çarpışma olup olmadığı belirlenmekte.
Şimdi de aşağıdaki satıra bir göz atın:
DETECT 1: IF CHECK(no) = 0 THEN çarpışma olmuş...
Bu sefer de, 'no' numaralı sprite'ın ekranla bir çarpışma geçirip geçirmediği anlaşılmakta. Eğer yukarıdaki komutlarda çarpışma bulunamamışsa, cevap 0 değil 1 olacaktır. Sprite komutları bu kadar...
a
Karakter Seti Değiştirme
Commodore 64'ün klavyesindeki harf, rakam ve grafik işaretlerini değiştirebilirsiniz. Bu iş için önce MEM komutunu vermeniz gerekecek. Böylece bilgisayar çeşitli hafıza bölümlerini ayarlayacaktır. Hemen arkasından DESIGN komutu gelir. Bu sefer 'kod' yerine 2 veya 3 kullanacağız. 2 ile normal karakterler, 3 ile de çok renkli karakterler tanımlanmaya başlanacağı haber verilir. Ayrıca hesaplaması da değişecek. Artık
($E000 + ekran kodu * 8) formülü ile bulunacaktır. Ekran kodları 0-255 arasıdır. Ancak bunlar sadece büyük harflere ve negatif büyük harflere karşılık gelirler. Bu sayılara 256 ekleyerek küçük harflerin kodlarını da elde edebilirsiniz. Dolayısıyla 'ekran kodu' yerine 0-511 arası sayılar konacaktır. Hemen arkasından, 8 satırlık bir tanımlama gelecek. Burası tıpkı sprite tanımlaması gibidir. Sadece genişlik normal karakter için 8, çok renkliler içinse 4 noktadır. Tekrar eski karakter setine dönmek için NRM komutunu kullanmanız lazım.
Yapısal Kontrol
Komutları
Programın akışını etkileyen komutlara yapısal kontrol komutları denir. Örneğin, GOTO, GOSUB, IF..THEN gibi. Modern programlama dillerinde ve yeni Basic türlerinde daha başka kontrol komutları standart hale gelmiştir. Bunların çoğunluğu Simons' Basic'te de vardır. Bunlardan en basiti, CGOTO komutu. Bilindiği gibi, normal GOTO komutunun arkasından sadece satır numarası gelebilir. CGOTO komutunun arkasına ise herhangi bir işlem koyabilirsiniz. Örneğin A = 50: CGOTO 2*A işlemi GOTO 100 ile eşdeğerdir. Bir başka ilerletme de IF..THEN komutuna getirilmiş. Öncelikle :ELSE: komutu var. Önündeki ve arkasındaki iki noktalara dikkat!! Bu komutla IF ve THEN arasındaki şart doğru değilse ne yapılması gerektiği belirtilebilmekte. RCOMP ile de, bir önceki IF..THEN komutunun sonucu kullanılarak işlemler birden fazla satıra yayılabilecektir. Çok genel bir örnek verelim:
10 IF art THEN xxxxxx 20 RCOMP: 30 RCOMP: xxxx:ELSE:yyy 40 RCOMP: :ELSE:YYYYYYYYy 50 RCOMP:
Yukarıdaki kullanımda, eğer şart doğru ise x'lerle belirtilen bölgedeki işlemler yapılacaktır. Şartın doğru çıkmaması durumunda ise y ile gösterilen komutlar işleme girecektir. Hepiniz FOR..TO..STEP..NEXT komutunu bilirsiniz. Buna benzer iki komut daha gelmiştir. Birincisi REPEAT...UNTIL komutu. Aşağıya bir bakın:
10 REPEAT 20 XXXXANAX A0 XXXXXAXA 50 UNTİL şart EEE
50 numaralı satırdaki şart doğru oluncaya kadar 20-40 arası satırlar tekrarlanacaktır. Birkaç REPEAT...UNTIL döngüsü iç içe konabilir. Buna benzer bir de, LOOP...EXIT IF...END LOOP komutu vardır. Örneğin:
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 16
7: Ses açık/kapalı 6: Senkronizasyon 5: Halka modülasyonu 4: Test
3: Üçgen karakteristik 2: Testere karakteristik
1: Dikdörtgen karakteristik 0: Beyaz gürültü
— Cc
Sesin zaman içindeki dalgalanmasını, ENVELOPE n, a, d, s, r komutu belirler. 'n' parametresi ile demin olduğu gibi, hangi ses üreticinden bahsettiğimizi belirtiyoruz. 'a', 'd', 's' ve 'r' parametreleri, o sesin dalgalanma sürelerini ayarlar. İngilizcede attack, decay, sustain ve release kelimelerinin baş harfleri ile adlandırılan
ADSR eğrisi bu sayılarla belirlenir. 'a' ile, sesin ilk başladığı an ile en yüksek seviyesine ulaşacağı an arasında kalan zaman ayarlanır. 'd' parametresi ise, bu en yüksek noktadan, biraz sonra belirteceğimiz ortalama değere düşüş için geçecek süreyi verecektir. İşte bu ortalama değeri ise 's' belirleyecektir. 'r' ile, ses üretici, çıkan sesi üretmeyi bıraktığında, sesin daha ne kadar zaman yankılanması (tınlama) gerektiğini belirlersiniz. Tüm bu parametreler 0-15 arasında olacaktır. 0 'a' ve 'r' için hızlı, 15 en yavaş demektir. 0-24 saniye arasında değişen zaman dilimlerine karşılık gelirler. 's' ise, ortalama ses yüksekliğinin o anda VOL ile belirlenmiş olan yüksekliğin kaçta kaçı olacağını belirtir. Şimdi sıra geldi notaları ve çalma sürelerini tanımlamaya. MUSIC hız, tanım ile bu işlemi yapabilirsiniz. 'hız' için 0-255 arası sayılar geçerlidir. 0 en hızlısı iken 255 en yavaşıdır. Tabii buradaki en önemli kısım 'tanım' kısmı. Burası aslında bir karakter değişkeni. Bu değişkenin içindeki karakterler müziğimizi tanımlayacaklar. Bunu en iyi, verdiğimiz örnek programda görebilirsiniz. Tanımın ilk karakteri (CLR) tuşu olmalıdır. Hemen arkasından hangi ses ile çalınacağı gelir. 1-3 arası bir sayı olmalı bu. Sonra gelen iki karakter ise 2 ve tuşu. Artık notaları tanımlamaya başlayabiliriz. Ne yazık ki notaları do, re,.. si olarak tanımlayamıyoruz. Bunların
Amerikan standardında olan karşılıklarını kullanmalısınız:
C:Do D:Re E:Mi G: Sol A:La B: Si
F: Fa
Notaları tanımlarken her nota için üç karakter kullanacağız. İlk karakter C-B arası notayı belirten bir harf olacak. İkincisi ise, o notanın hangi oktavda olduğunu belirtecek. 0 ile en kalın, 7 ile de en ince oktav elde edilir. Ve son olarak da o notanın çalınma süresini belirlemeliyiz. Bunu, klavyenin sağ tarafındaki fonksiyon tuşları ile yapıyoruz. Her bir tuş başka bir uzunluğu belirtiyor. Şöyle ki:
F1: 1/16'lık nota F3: 1/8'lik nota F5: 1/4'lük nota F7: 1/2'lik nota F2: 1'lik nota F6: 4'lük nota F8: 8'lik nota
Örneğin C6(F1) ile, bilgisayar altıncı oktavdan ince bir 1/16'lık DO notası oluşturacaktır.
Bütün notaları böylece belirledikten sonra, tanımın en sonunda (CLR)G koymalısınız. Böylece parça bitince ses duracaktır. Eğer koymazsanız, en son nota devamlı çalacaktır. Artık gerekli hazırlıkları yaptığımıza göre parçamızı çalabiliriz. PLAY
1 komutunu verdiğimiz anda parçamız çalmaya başlayacaktır. Bu sırada da program, parçanın bitmesini bekler. Eğer PLAY 2 kullanırsanız, parça arka planda çalmaya devam ederken, programınız da işlemlerine devam edecektir. Bu sırada PLAY 0 vererek o anda çalınan parçayı durdurabilirsiniz. Ancak, PLAY komutunu sadece program içinde kullanabilirsiniz, program dışında bir işe yaramaz. Müzik ile ilgili komutların sonuncusu SOUND. A=SOUND yapıldığında, A'nın içeriği 54272 olur. Bu,
SID yazmaçlarının başlangıç adresidir. Tıpkı GRAPHICS'de olduğu gibi POKE SOUND 4, nnnn yaparak, bu yazmaçlara sayılar yerleştirebilirsiniz.
Sprite Komutları
Önce işe sprite tanımlamasıyla başlayalım. Bu iş için DESIGN komutunu kullanacağız. DESIGN kod, adres olarak kullanılan bu komut, verilen 'kod'a göre değişik işlemler yapar. Eğer sıfırsa, normal (24x21) boyutlarda tek renkli bir sprite tanımlaması yapacağız demektir. Eğer 1 ise, bu sefer 12x21 boyutlarında ve çok renkli sprite tanımlaması geliyor anlamını verir. 'Adres' ile bu tanımın nereye yerleşeceği belirleniyor. Bu adresi, (blok * 64) formülü ile bulabilirsiniz. Geçerli olan blok sayıları 13-15, 32-63 ve 128-255 arasıdır. Bunun dışındaki bloklar Simons' Basic'e zarar verebilir. DESIGN komutunun hemen altındaki satırdan başlayarak 21 satırlık tanımlama gelir. Bunun nasıl olduğunu en iyi örnek programda görebilirsiniz. Tek renkli sprite için genişlik 24 nokta, çok renkli içinse 12 nokta olacaktır. Tanımlama sırasında kullanacağınız karakterler '.', 'B', 'C' ve 'D' olacaktır. Anlamları da şöyle olacaktır:
.: Boşluk B: (Normalde) Çizgi rengi (Çok renkli) 1 numaralı renk C: (Çok renkli) 2 numaralı renk D: (Çok renkli) 3 numaralı renk
Her tanımlama satırının başındaki özel işarete dikkat edin! Ayrıca, C ve D renklerini sadece çok renkli sprite'ler için kullanabilirsiniz. Tanımlama bitti, sıra geldi özelliklerini belirtip, renklerini verip hareket ettirmeye. Önce MOB SET no, blokno, renk, öncelik, mod komutunu görelim. no ile belirtilen sprite'ın (0-7)