Commodore sayı 7, sayfa 17

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ı.