Cin Çarptı
Retro bilgisayarZülküf başka bir cinle ya da herhangi bir başka karakterle çarpıştığı takdirde ne olur? Ne olacağını siz tayin edebilirsiniz... Eğer Zülküf başka bir cinle çarpışacaksa, şu genel komut kullanılabilir:
IF PEEK ($D01E) AND X=X THEN (durum)
Burada $D01E çarpışmaları kontrol eden VIC sicili, (durum) ise gerçekleşmesini istediğiniz olay, X de çarpışması istenen cinlerin numaralarıdır. Ancak örneklere geçmeden önce bir hatırlatma yapmakta yarar var:
Cin Numaraları
Daha önce cinlerin 0-7 arası rakamlarla gösterildiğini söylemiştik. Ancak hangi cinin ne yapması gerektiği makineye bildirilirken bu rakamlar değil, 2^n formülü ile elde edilen sayılar kullanılır. Dolayısıyla kendi aramızda, 0, 1, 2 diye adlandıracağımız cinlerden makineye bahsederken şu temsil numaralarını (bundan böyle tn. kısaltmasıyla gösterilecek) kullanacağız:
Cin no. Temsil no. 0 1 1 2 2 4 3 8 4 16 5 32 6 64 7 128
Birden çok cinden birden söz etmek istediğimiz zaman ise, o cinlere ait temsil no.ları toplanır. Şimdi artık cinlerin çarpışmasına dair örnek komutlarımıza dönebiliriz:
IF PEEK (V 430) AND
1—1 THEN GOTO 100
0 no.lu cin başka herhangi bir cinle çarpışırsa, 100 no.lu program satırına git.
IF PEEK (V * 30) AND 6-6 THEN
POKE (V 4 21), PEEK (V 4 21)
AND (255-2-4)
1 ve 2 no.lu cinler çarpışırsa, her ikisi de ekrandan silinsin. Şimdi bu karmaşıklığı biraz çözmeye çalışalım. 1 ve 2 no.lu cinlerden söz ettiğimiz 6'nın 244 olmasından anlaşılıyor. $D015 cinlerin silinmesini sağlayan sicil. Bütün cinler birden görünüyorsa, değeri 128-255 olacaktır. Bizim yapmak istediğimiz, $D015'te mevcut olan değerden, sadece 2 ve 4'ün silinmesini sağlayacak olan değerleri çıkartmak. Bunun için önce mevcut değeri PEEK etmemiz, bunu yalnızca 2 ve 4 no.lu cinlerin silinmesini sağlayacak şekilde yeniden düzenlememiz (255-2-4) ve sonucu yeniden $D015 POKE etmemiz gerekiyor. Eğer çarpışanlar cinler değilse, bir cin başka herhangi bir başka karakterle çarpışıyorsa, ufak bir değişiklik gerekiyor. Örneğin;
IF PEEK (V 431) AND 4-4
THEN PRINT “CLR”
2 no.lu cin herhangi bir karakterle çarpışırsa, yazı ekranını temizle. $D01F, cin-zemin çarpışmalarını yöneten VIC sicilidir.
IF PEEK (V 431) AND 3-3
THEN POKE 29,1
0 veya 1 no.lu cin herhangi bir karakterle çarpışırsa, 0 no.lu cin şişmanlasın (enine büyüsün, $D01D için bkz. bir önceki yazıda VIC sicilleri tablosu). Bütün bu komutlar, cinleri hareket ettiren döngülerin içinde konurlarsa,
5 POKES3281
10 V=53248Śš
15 РОКEV+21,1:POКEV+23,1:POКEV+29,1
20 FORS1=12288TO12350:READQ1:POKES1,Q1:NE
10
tanımlı koşul gerçekleştiğinde, verilen komutu yaparlar.
Önceliği
Cinler birbirleriyle çarpışmakla kalmaz, birbirlerinin ya da başka bir karakterin önüne ya da arkasına da geçebilirler. Böylece 3-D efekti yaratılmış olur. Buna öncelik denir. 0 numaralı cin her zaman diğerle-
15
EA
TSİ
25
£Ts8
30 NE
XTS3
25 POKEYLİ,
40 Psla2
45
SA
BA
65 POKEY,LK
TA
75 POKESA4A,P
Sf 2280, (PEEK
)+1 )AND15
85 PsPti
gü
95 NEXT END
7;129,254,127,189,254,127,255,P254
1010 ,255,252,31,187,248,23,187 4192,
7,129,254,127,189,P54,127,255,254
1040 DATAS3,255,252,31,221,248,2,221,192,
1,255,128,3,255,192,1,195,128,1,231,3
1962 DATAZA, A
7 ,A29,254,127,189,254,127,255,254
DATAS3I,255,252,21,221,248,3,221,192,
1,255,134,3,189,204,1,199,152,1,255,48
A READY.
rinden önde görünür. Daha da genel olarak söyleyecek olursak, küçük numaralı cin büyük numaralı cinin önünde görünür. Yani 7 no.lu cin bütün diğerlerinin arkasında görünür. $D01B sicili cinlerin karakterlere göre önceliğini belirleyen değerleri içerir. Bu sicilin baytlarının gıyabi (per default) değeri 0'dır; dolayısıyla normal olarak bütün cinler karakterlerin önünde görünür. Bu adrese hangi cinlerin toplama temsil no.su yerleştirilirse, o cinler karakterlerin arkasına gizlenebilir. Örneğin;
POKE 53275,1 0 no.lu cin karakterlerin arkasına gizlenebilir.
POKE 53275,255 Bütün cinler karakterlerin arkasına gizlenebilir.
Cinlerle Çizgi Film Yapmak
Çizgi film yapmanın en kolay yolu yapılması/tekrarlanması istenen hareketleri (yürümek, kanat çırpmak vb.) bölümlere ayırmak ve bunlara ait resimleri arka arkaya göstermektir. Biz de bu ilkeden yararlanacağız. Birinci adım resimleri belirlemek ve bunları belleğe kaydetmektir. Örneğin arka arkaya üç farklı resim göstermek hareketi sağlamak için yeterli olsun. Bu üç resim tek veya çok renkli olarak çizilir ve belleğin farklı yerlerine (kolaylık olsun diye arka arkaya) kaydedilir. Biz, örneğimizde 192, 193 ve 194 no.lu blokları kullanalım. İkinci adım, Zülküf'ün tanımlanmasıdır. Temel ilkenin aynı cini farklı şekillerde göstermek olduğunu hatırlayınız. Üçüncü adım bir FOR/NEXT döngüsü içinde hareketi vermektir.