Bu sayfadaki yazılar
Sayfanın metni
Sayfa 20
Eğer ekrandan büyük window alanı tanımlarsanız sorunlarla karşılaşırsınız. INPUT komutuna yardımcı olması için window tanımlayabilirsiniz, böylece kullanıcı imleç kullanarak dışarı çıkamaz. Aşağıda buna örnek bir program bulacaksınız.
EK-2 9 satır 146-155
Window Komutunu Kullanarak PRINT AT
C128'de PRINT AT komutunun işlevini CHAR komutu yapmaktadır, fakat bu her zaman en iyi yöntem değildir -mesela çıktınızın uzunluğunu kontrol edemezsiniz. Bundan başka basılacak yazıda kontrol karakterleri olabilir. Eğer WINDOW komutunu kullanırsak bu zorlukları yenebiliriz. Bu tür kullanıma bir örnek programı aşağıda bulabilirsiniz.
EK-3 10 satır 163-173
Ekranın Bir Kısmını Silme
Window komutunu kullanarak ekranın sadece bir kısmını silebilme imkânınız bulunmaktadır. Bunu yapmak için iki yol uygulayabilirsiniz:
WINDOW 10,10,20,20:PRINT"CLR/HOME" veya WINDOW 10,10,20,10,1
Ekranın alt yarısını silmek için şu kısa programı girmeniz yeterli olacaktır.
10 WINDOW 0,12,39,24,1 20 WINDOW 0,0,39,24
Window ile Tanımlanmış Bölgenin İçeriklerini Saklama
Mesela bir programınızda WINDOW komutu ile oluşan ufak bir ekranda çeşitli seçenekleri kullanıcıya sunuyorsunuz. Bu ekranın görevi bittiğinde, altında bulunan orijinal yazının ortaya çıkması gerekir. Fakat C128'deki WINDOW komutu bunu yapmamaktadır. Bir kere window kapatıldığında içeriği de tamamen kaybolmaktadır. Aşağıda içeriği kaybolmayacak window ile çalışan bir program sunuyoruz.
EK-4 41 satır 192-233
Programımızın enteresan kısmı 60000'inci satırda başlamaktadır. 60010'uncu satırda X() dizisi tanımlanmaktadır. Bu dizinin boyutları tanımladığınız window'un boyutlarına bağlıdır. Eğer bu programcığı kendi programlarınızda kullanacak olursanız, kendi programınızda X() adlı bir değişken veya dizi olmamasına dikkat edin. Üstteki programımızın tek kötü yanı, bütün BASIC programlarda olduğu gibi ağır olmasıdır. Aşağıda aynı işi yapan makine dilinde yazılmış programı bulacaksınız.
EK-5 242-285 43 satır
Programın 0 ile 170'inci satırları size programın işleyişine örnek olarak verilmiştir. Programın asıl önemli kısmı 180-420'nci satırlar arasıdır. Programı yazıp sakladıktan sonra çalıştırın.
Burak KİPER
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 21
Bu ayki konumuz, C64'ün en özelliklerinden biri olan sprite'lar. Geçen ayki noktasal grafik konusuna nazaran daha kolay bir konu. Genel bir tanımlama yaparsak, sprite'lar birbirlerinden ve ekranın o anda bulunduğu durumdan bağımsız olarak varolabilen ve hareket eden sınırlı büyüklükte objelerdir. Toplam
sekiz sprite kullanım imkânı vardır. Sprite'ların renkleri, büyüklükleri, birbirlerine ve ekrandaki görüntüye karşı öncelikleri ayarlanabilir ve gene birbirleri veya ekrandaki diğer şekil ve yazılarla olan çarpışmaları al-
Tuna ERTEMALP gılanabilir. Tıpkı değişik ekran modları gibi, sprite'lar da tekrenkli veya çokrenkli (multicolor) olabilir. Tüm bu işlemleri, daha önce ayrıntılı listesini verdiğimiz, C64'ün grafik işleri sorumlusu VIC'in yazmaçları ile yapabiliyoruz. Bu bölümde, ikili sistemde aritmetik kullanarak VIC'in yazmaçları ile oynayacağımız için, COMMODORE dergisinin dokuzuncu ve onuncu sayılarında çıkan COMMODORE 64 İLE GRAFİK (1) ve COMMODORE 64 İLE GRAFİK (2)
yazılarını da elinizin altında bulundurun.
Demin de belirttiğimiz gibi, sekiz sprite'ı aynı anda ekranda gösterme olanağımız var. Bunları, yazı dizimizin ikinci bölümünde de belirttiğimiz gibi, 0-7 arası sayılarla belirleyeceğiz. Bilgisayar konularında numaralamaların 1'den değil de, 0'dan başlamasına artık alışmış olmamız gerekir. Her normal sprite, ayrı ayrı yakılıp silinebilen 504 noktadan oluşur. Bu noktalar 24'er noktalık 21 sıra halinde dizilmiştir. İşte bu 24 nokta genişlik ve 21 nokta yüksekliğe sahip alanda, ekrandan bağımsız olarak şekiller yaratıp hareket ettirebilirsiniz. Her bir byte 8 bit olduğuna ve her
mmmamm bir noktayı bir bit ile gösterebildiği- 1 |! 8 1 3 1 mize göre (geçen sayıdaki grafik ek- ---------- ranındaki noktaları hatırlayın), top- 176543210! 176543210! 176543210! lam 504/8 — 63 byte'lık bir alana ihti- yacımız var. Ayrıca her sayıda 24 nok- Ol... .....!Byte ne. ta olduğunu söylemiştik. Bu da 3 byte Buka 2) ' eder. Demek ki, 63 byte'ımız, üçer 2lRute 1Bute 1 üçer gruplanmakta ve her bir grup, 4l1Byte 13!........!Byte 141........! sprite'ı oluşturan 21 grafik satırının SiByte Byte birini oluşturmaktadır. Şimdi, sprite'- BilByte 18!........ 1Byte 19!........!Byte 20!........! ımızı oluşturan byte'ları 0-62 arası sa- 221........ 1Byte ! yılarla numaralandıralım ve yandaki 8Bl!Byte 241........!Byte 25!........!Ryte 26!........ ! tablo ile deminden beri anlattıklarımı- diByte 1Byte 28!........!Byte 29!........! zı şekillendirelim... 10!Byte 30!........!Byte 321........ ! 111Byte 381........!Byte 341........1Byte Tablomuzdaki her nokta, sprite'ın 121Byte 38!........ 381........! bir noktasına karşılık geliyor. Her se- 13!Byte 3B9!... 1Byte 401........ ! kizlik nokta grubunun solunda, o 141Byte 421........ noktaları saklayan Byte'ın numarasını 15!Byte 45!........ iByte APİ. 1 görmektesiniz. Her biri üç byte'dan 16!Byte 48!........ 1 oluşan 21 satır, açıkça görülüyor. Bu za a masil sayılar 191Byte 1Byte 58!........l!Byte 59!........! ilerki kısımlarında BO!........!Byte Bi!........ 1Byte ! Gü ea ÜR Pa etmi a ve İline mea hi ler een amam, Ayrıca, her tekrenkli sprite, bilgi-
1 sayarımızın bize sunduğu 16 renkten birini alabilir. Bunun için, o sprite'a âit renk yazmaçına (VIC'in 39-46 arası yazmaçları), 0-15 arası renk kodunu POKE ile yüklemek gerekir. Artık, o sprite'ı tanımlayan byte'ların 1 durumunda bulunan bütün belirlenen renk ile gösterilecektir. Çokrenkli sprite'lara gelince... Deminden beri anlattığımız sprite'lardan farkı, aynı anda dört değişik renk taşıyabilmeleri. Bunların ikisi, o anda ekranda bulunan tüm çokrenkli sprite'lar için ortak. Üçüncüsü, sprite'ın o anda üstünde bulunduğu ekran bölgesinin sahip olduğu renk. Sonuncusu da, her sprite için ayrı ayrı olabilmekte. Tabii ki, çokrenklilik karşısında kurban edilen şey, tıpkı çokrenkli nokta grafiğinde olduğu gibi, yatay çözünürlük. 24 nokta yerine artık 12 nokta var. Ancak yanlış anlama olmasın; 24 nokta, ikişer ikişer birleşerek bir renk noktası oluşturuyor. Yoksa, 504 nokta (— 504 bit — 63 byte) kullanımı değişmiyor. Aşağıdaki tablo ile bunu kolayca görebiliriz: