Bu sayfadaki yazılar
Sayfanın metni
Sayfa 19
Tabloda da gördüğünüz gibi hesaplarla şu anda ilgilenmiyoruz, sadece neler yapmamız gerektiği hakkında genel bir fikir oluşturduk şu anda. Şimdi tek tek bloklarla ilgilenelim:
1) Oku yukarı atmak için:
İlk olarak okun bağıl (relatif) koordinatını (ekranın en üstü ve en solu O değerini almalı, sprite koordinatları için ise O değildir) kontrol edelim. Eğer Y değeri 0'dan büyükse © zaman değerini azaltabileceğimizi anlarız ve bu adreste bulunan değeri bir azaltırız. Y tek bir baytta saklandığı için tek bir CMP komutuyla bu karşılaştırma işini hallederiz. Ve DEC komutuyla da Y koordinatını azaltırız (unutmayın ekranın en üstü 0). 2) Oku aşağı almak: Yapılacak işler deminkinin hemen hemen aynısı. Yalnızca bu sefer y koordinatının 199'dan büyük olmamasına dikkat etmeliyiz. Oku aşağı olmak için y koordinatını bir artırmamız gerekir. 3) Oku bir sola almak: Eğer ekranın genişliği 255'ten küçük olsaydı bunu yapmak da yukarı ve aşağı oynamak kadar kolay olabilirdi. Ama 320 nokta genişliğinde bir ekranı iki baytla temsil ettiğimiz için bu iki baytın ortak değerinin O'dan büyük olmasını kontrol etmeliyiz. Bunun için ilk olarak yüksek bayta bakarız. Bu değer Vse “Zaten 256'dan büyük bir
Joystick'i oku ve Gerekli Değişkenleri Ayarla
Karakter Pozisyonunu Hesapla
Sprite Pozisyonunu Ayarla
TABLO 2
Y Pozisyonunu
TABLO 3 Oku aşağı al
<199?
Y Pozisyonunu bir artır
TABLO 4 Oku bir sola al
X'i bir azalt yerdeyiz” diyerek X koordinatını bir azaltırız. Eğer bu değer sıfırsa o zaman alçak değerli bayta bakarak X koordinatının O'dan büyük olup olmadığına karar veririz. Eğer büyükse X'i azaltmaya izin var demektir. X'in değerini azaltmak da ufak bir sorun yaratabilir. İlk olarak alçak değerli baytı azaltırız. Eğer bu baytın değeri 255 olmuşsa, yüksek değerli baytı bir azaltmamız ge-
TABLO 5
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 18
TABLO I
Her neyse, konuyu fazla dağıtmayalım. “İlk olarak kağıt üzerinde programı tasarlamalıyız” diyordum en son. Programa giriş kismi, yalnızca sistemi rahatsız etmeyen bir interrupt kurmalı, okun grafik dataları için gerekli yerleri ayarlamalı (o anda kullanılıyor olabilecek yerleri rahatsız etmeden tabii ki) ve BASIC'e dönmeli. Tabii ki bu aşamada ne tür bir interrupt kullanmamız gerektiğine de karar vermemiz gerekiyor. Bize göre, ekranın her taranışından sonra portlar okunup gerekli ayarlamalar yapılırsa yeterince hassas bir hareket elde ede- Tiz. Hem de sprite'ın pozisyonu, elektron ekranın dışındayken değiştirileceği için türeme gibi sorunlarla karşılaşmayız. Bu yüzden $0100 raster satırında oluşturulacak bir RASTER interrupt'ın amaçlarımıza hizmet edebileceğini düşündük. Daha sonra, okun grafik özelliklerine ka- Tar vermemiz gerekiyordu. Tabii ki serbestçe dolaşabilmesi için bir sprite olmalıydı okumuz, Sprite 1'i bu işe ayırmaya karar verdik. Sprite Vin seçilmesi için belli bir şeyi göz önüne almadık. Yani ilk sprite'ın ya da sprite'in kullanılması o kadar da önemli de- Bil. ama tutup da beşinci sprite'ı ok için ayırmanın hiç alemi yok açıkçası. Her neyse, şimdi de sprite'ın özelliklerini tartışmamız gerekiyor: 1) Multi-color (çok renkli) olmamalı, çünkü çok kötü görünür. 2) Ekranda rahatça seçilebilecek, parlak bir renk olmalı. 3) Karakterlerin altından değil, üzerinden geçmeli, 4) X ve Y'de büyütülmemiz olmalı (gene görüntü yüzünden), Sprite'ı tanımlarken tüm bu değerlerin bizâm ayarlamamızda yarar var. Çünkü bizim programdan önce birileri çok renkli, X ve Y'de büyütülmüş ve karakterlerin arkasın-
VE da dolaşan bir sprite kullanmış olabilir (Her zaman en kötüyü düşünün). Bu durumda istediğimiz şartların hemen hemen hiçbiri sağ- Tanmamiş olur. Sprite ayarlamalarını yaparken dikkat etmemiz gereken ön önemli şey, diğer sprite'- lara elimizden geldiğince az dokunmak olmalı. Yani birinci sprite'ı açmak için: LDA e $01 STA $DO15 değil de;
LDA $DO15 ORA e $01 STA $DO15
kullanmalıyız. Bu sayede yalnızca birinci sprite'ın açılacağını garanti ederiz ve diğer sprite'ları ne açarız ne de kaparız. Oldukları gibi kalırlar. Aynı şekilde Sprite'ın çok renkli modda olmamasını sağlamak için:
LDA 1 $00 STA $DOIC
yerine
STA $DO1C
kullanmamız gerekir. Bu komutla sadece sıfırıncı bitin değerini sıfırlarız ve diğerlerine dokunmamış oluruz. Bütün gerekli VIC adreslerini ayarladıktan sonra, okun grafik datalarını boş bir bölgeye taşıyıp, burayı birinci sprite olarak ekrana çıkartmalıyız. Biliyorsunuz ki, BASIC kullanıldığında $0801-$9FEF arasındaki bölgeye güvenemezsiniz. VİC'in birinci sayfasını kullanmak istediğiniz için (ekranın tüm elemanlarını $CO00'dan kontrol etmek istemezsiniz sanırım) $0400'ün altında bir boş yer bulmalısınız. En uygun yerlerden biri $0380 olduğu için bu bölgeyi ok datamız için seçtik ve buraya grafik datalarını taşıdık. $07F8'i de“$0380'i gösterecek şekilde ayarladıktan sonra grafikle ilgili tüm işimiz bitmiş oldu. Artık gönül rahatlığıyla interrupt'- lara izin verip, BASIC'e dönebeliriz. Dikkat ettiyseniz, şimdiye kadar programın diğer kısımları bizi hiç ilgilendirmedi. Bu kısımların kendi görevini kusursuz olarak yaptığını varsayarak programın birinci kısmını tamamladık. Kağıt üstünde çalışmanin en iyi yanı işte. Eğer interrupt'ı açarak işe başlasaydık, sonrasına bir sürü ekleme yapmamız gerekecekti ve programımız gittikçe kontrolden çıkacaktı. Gelelim programın ikinci kısmına, Buradan okun hareketleri kontrol edilecek ve gerekli adreslere okun durumuyla ilgili bilgiler yazılacak. İlk olarak kendimize beş tane değişken tanımlayalım. Bu değişkenler belli adreslerde bulunsun ve daha sonra tasarlayacağımız bir rutin bu adreslerin değerlerini, joystick'in yönüne ve ateşin konumuna göre ayarlansın. Bu beş adresten başta, BA-SIC'ten kontrol edilecek olan değişkenlerimiz de hazır dursun. Bu değişkenler tasarımımıza göre şöyle olmalı: 1. Okun X, Y koordinatı (nokta olarak). 2. Okun X, Y karakter pozisyonu. 3. Ateşe basıldığında okun bulunduğu X, Y karakter pozisyonu. Toplam sekiz adet değişkene ihtiyaç var. Fakat değişkenleri daha dikkati incelerseniz, değişkenlerden ikisinin iki bayttan oluşması gerektiğini anlarsınız. Bunlar X koordinatı 0-320 arasında değerler alabildiği için bu koordinatı saklayan değişkenler ikişer bayt olmalı, Bu 10 baytlık değişken sürüsünün de hazır bulunduğunu varsayalım. Şu anda yalnızca bu adreslerin içeriğine göre yapacağımız işlerle ilgilenmemiz yeter- Hi olur. Onları ayarlamaya da sıra gelecek. İlk olarak yukarı, aşağı, sol ve sağa gidilmesi için emir geldiyse ne yapacağımızı Söyleyen tabloyu hazırlayalım.