AMOS THE CREATOR

RIMOS THE CREATOR

Uzun bir aradan sonra, yeniden açılan AMOS Köşesi'nde artık birlikteyiz. Daha önce bu köşede Burak ÖZDEMİR arkadaşımız tarafından açıklanan komutları, yazmayacağız. Bunun yerine, bu komutların kullanım alanlarını belirten pratik programlar vererek, bu programların önemli yerlerini anlamanızda sizlere yardımcı olacağız. Kullanacağımız yeni komutların açıklamalarını da programla birlikte yapacağız. Belirtmemiz gereken bir diğer nokta da, yazı dizimizde AMOS komutlarını stilde yazacağımız. Bu sayede AMOS komutlarını daha kolay ayırdedebilirsiniz.

tekrarl

Bunun dışında; AMOS ile ilgili yenilikleri de sizlere sunup, kafanıza takılan her türlü soruyu da elimizden geldiğince yanıtlamaya çalışacağız. Bunun için sorularınızı derginizin AMOS köşesine, hiç çekinmeden, göndermeniz yeterli.

Bunlardan ilki, ZONE komutlarının kullanımı. Zone kelimesi İngilizce'de, alan, bölge gibi manalara gelmekte. AMOS'taki ZONE komutları ile, belirli ekran bölgelerine bob, sprite veya mouse göstergeci vb objelerin girip girmediğini, girdiyse hangi bölgeye girdiğini algılatabilirsiniz. Zone komutlarından olan Set Zone komutu ile, belirli bir ekran bölgesini bilgisayara tanıtabilirsiniz. Ancak bu ekran bölgesini bilgisayara tanıtmadan önce Reserve Zone N komutu ile, kaç adet bölge öğreneceğinizi belirtmelisiniz. Set Zone komutunun formatı: Set Zone N, X1, Y1 To X2, Y2 şeklinde. Buradaki 'N' değişkeni yerine, tanımlayacağınız bölgenin numarasını vereceksiniz. Ancak bu değer, Reserve Zone komutu ile verdiğiniz değerden büyük olmamalı ve sıfırdan da büyük olmalı. Set Zone komutu ile tüm tanımlamaları-

Hayrettin YILDIZ & Murat YILDIZGÖRER kenin değerinin '0' olması, mouse göstergecinin hiçbir bölgenin içerisinde olmadığını gösteriyor. Ayrıca Zone(X, Y) fonksiyonuyla da, verilen koordinatın tanımlanan bölgelerden hangisinin içerisinde bulunduğunu öğrenebilirsiniz. Bu fonksiyonu da bir Bob'un, herhangi bir ekran bölgesine girip girmediğini tespit etmekte kullanabilirsiniz. Koordinat olarak Bob'un bulunduğu yeri vererek bunu yapabilirsiniz. Ancak bu şekilde yaptığınız algılama, gerçek algılama değildir. Sadece Bob'un sol üst köşesinin (veya Hot Spot komutu ile belirlediğiniz noktasının) girdiği bölgeyi bulabilirsiniz. Hzone(X,Y) fonksiyonu ise Zone fonksiyonunun yaptığı işi donanım (hardware) koordinatları ile gerçekleştiriyor. Yani bu fonksiyonla da, Sprite'ların bulunduğu bölgeyi (Bob'larda olduğu gibi) öğrenebilirsiniz. — Bildiğiniz gibi — Sprite'lar, Bob'lardan farklı olarak, hardware koordinatlarını kullanıyorlar. Aslında Hzone fonksiyonu, Zone fonksiyonunun özel bir şekli. Yani; Zone(X,Y)=Hzone(X Hard(X),Y Hard(Y)) veya Hzone(X,Y)=Zone(X Screen(X),Y Screen(Y)) Tahmin edebileceğiniz gibi, Mouse Zone değişkeni de Hzone fonksiyonunun mouse için özelleştirilmiş hali. Yani; Mouse Zone=Hzone(X Mouse,Y Mouse) Reset Zone N komutu da, daha önce Set Zone komutunu kullanarak tanımladığınız ekran bölgelerinden, verdiğiniz numaralı olanın algılanmasını engelliyor. Bu bölgeyi tekrar aktive etmek için Set Zone komutu ile bir daha tanımlamalısınız. Şimdi de Zone komutlarından bazılarını kullanarak yazdığımız, IKON DEMO adındaki örnek programımıza geçelim. Bu sıkça anılan ikon sorununu yaptıktan sonra geriye, bu mouse göstergecinin girip girmediğini algılatmak kalıyor. AMOS'ta, mouse göstergecinin, tanımlanan bölgelerden hangisinin içerisinde bulunduğunu anlamaya yarayacak Mouse Zone değişkeni bulunmakta. Bu değişici bir örnek olacağına inanı- Şimdi de prosedürlerden oluşan programımızın açıklamasına geçelim. İlk prosedürümüz, yüksek çözünürlükte bir ekran açarak paletini ayarlıyor. Daha sonraki KUTU prosedürü ise, IKON YAP prosedürü için gerekli olan kutuların

Bu noktada ise, alan ikon kutularının, belirlenen koordinatlarda çizimini üstleniyor. IKON YAP prosedüründe ise ilk olarak, ana programda Dim ile tanımlanan ve ikonların pozisyonlarını saklayacak olan değişkenlerin burada da kullanılabilmesi için Shared komutu, değişkenlerin ismiyle birlikte veriliyor. İzleyen satırda grafik modunu ayarlanıyor ve ardından Data satırlarındaki ilk değer okunuyor. Bu değer, sonraki Data satırlarında kaç adet ikon tanımlaması bulunduğunu gösteriyor. Daha sonra Reserve Zone komutu ile, tanımlanacak bölge sayısı belirleniyor ve Data satırlarından ikon bilgilerinin okunduğu döngüye giriliyor. Data satırlarındaki ikon tanımlama formatını ise, bu satırlardan hemen önce gelen Rem satırından öğrenebilirsiniz. Sonraki iki satırda, ikonun sağ alt köşesinin pozisyonu hesaplanıyor. Ardından hesaplanan koordinatlar Set Zone komutu ile belirleniyor ve bu koordinatlara, KUTU prosedürü ile bir kutu çiziliyor. Sonraki satırda da Text komutu ile ikonun yazısı yazılıyor. Bunların ardından, ikon tanımlamalarını içeren Data satırları geliyor. Prosedürün son satırında End Proc'dan sonra gelen (N) kısmı ise, tanımlanan ikon sayısını, prosedürün çağrıldığı yere iletmeye yarıyor. Param değişkeni ile bu değer öğrenilebilir. BASILAN IKON prosedürü ise, daha önce IKON YAP prosedürü çağrılarak zone olarak tanımlanıp, çizdirilen ikonlardan herhangi birisine mouse'un düğmelerinden herhangi biri ile basılana kadar bekliyor ve basılan ikonun numarasını Param değişkeni ile çağrıldığı noktaya iletiyor. Eğer ikona sağ düğme ile basılmışsa, ikonun değeri negatif olarak iletiliyor. BASILAN IKON prosedüründeki, Multi Wait isimli komut size yabancı geliyor olabilir. Bu komut, AMOS'un ilk versiyonunda (1.1) bulunmadığından, kullanım kılavuzunda da açıklaması yok. AMOS'un 1.2 veya daha yukarı versiyonlarında, bu komutu kullanabilirsiniz. Yani elinizdeki AMOS, 1.1 versiyonlu ise, bu komutu Wait komutu ile değiştirin. Multi Wait komutu, Wait komutunun yaptığı işi multitask olarak gerçekleştiriyor. Yani ekranı oluşturan tarama satırının, ekranın en üst satırına gelmesini (Vertical Blanking) bekliyor. Ancak bu bekleme esnasında, o anda bilgisayarımızda çalışan başka programlar varsa, kontrolü onlara devrediyor ve onların da verimli bir şekilde çalışabilmelerine izin veriyor. *Başka programlar* denilince aklınız karışmış olabilir. Bildiğiniz gibi AMIGA multitask bir alet, yani aynı anda birden fazla programı çalıştırabiliyor. Tabii ki bunu yaparken programları dönüşümlü olarak çalıştırıyor. Bu yüzden, kullanıcıdan bilgi girişi vb bekleyen programlarınızda, döngü içerisinde Multi Wait komutunu kullanarak bilgisayarınızın verimini arttırabilirsiniz. Örneğin, arkaplanda animasyon hesaplayan bir IMAGINE programı, bundan büyük ölçüde yararlanacaktır.

Yeri gelmişken söyleyelim. AMOS ile diğer programlar veya Workbench ekranı arasında gidip gelebilmek için Sol Amiga + A tuş kombinasyonunu kullanabilirsiniz. Ancak bunu deneyip de boş bir ekranla karşılaşırsanız şaşırmayın. Çünkü eğer AMOS'u orijinal disketinden yükledi ve konfigürasyonunu da değiştirmediyseniz, otomatik olarak Workbench ekranını kapatarak size boş bellek kazandırmaya çalışacaktır. Bir diğer konu da Close Workbench komutu ile ilgili. Bu komut, Workbench ekranını kapatarak bellek tasarrufu yapmaya yarıyor. Ancak bu komutun çalışabilmesi için, Workbench ekranını kullanan hiçbir programın o anda bulunmaması gerekir. Buna, o anda açık bulunan CLI penceresi de dahildir. Yani, CLI penceresi açık iken Close Workbench komutu işlemez.

Şimdi, konumuza dönelim. Oyun ve demo gibi, ekran zamanlamasının çok büyük önem taşıdığı bazı programlarda Multi Wait komutunu kullanmayın. Çünkü Multi Wait komutu, çalışan task (program) miktarına göre, bazen bir veya birkaç Vertical Blanking pozisyonunu atlayarak, sizin kritik zamanlamanızı bozar ve programınızın yavaşlamasına sebep olur. Bu durumlarda Wait Vbl komutundan şaşmayın. Çünkü yavaş çalışan bir oyunu (arcade ise) kim ister ki...? Kaldığımız yerden, yani BASILAN IKON prosedüründen devam edelim. Bu prosedürün bir diğer önemli noktası da, bir dörtgen bloğun negatifinin alınması. Bunu yapabilmek için ilk önce negatif çizim modu olan Gr Writing 2'ye geçiyoruz. Bu modda yapılan çizim işlemlerinde, çizim rengi dikkate alınmaz. Nokta konulacak yerlere nokta koymak yerine o pozisyonun negatifi alınır. Aynı yerin ikinci kez negatifini aldığınızda, orijinali elde edersiniz. Gr Writing 2 modundan, Draw,

Plot, Bar, Text vb birçok grafik komutu etkilenir. Ancak Cls gibi bazı komutlar etkilenmezler. Biz, ikonun negatif görüntüsünü elde edebilmek için Bar komutunu kullandık. Bar komutu, dörtgensel bir bölgeyi, Set Pattern komutu ile belirlenen bir desen ile dolduruyor. Desen olarak “0” numaralı deseni kullandık. Bu desen tamamen dolu bir desen. Yani, Graphic Writing 2 moduna girmeseydik, Bar komutu Cls komutunun yaptığı işi yapacaktı. Bu sayede Bar komutu ile ikonun negatifini alabiliyoruz. BASILAN IKON prosedürü bu şekilde, önce bir mouse bir bölgeye girene kadar bekliyor. Ardından bu bölgenin negatifini alıyor ve mouse tuşuna basılana veya mouse göstergeci bu bölgeden çıkarılana kadar bekliyor. Eğer bölgeden çıkmadan mouse tuşuna basılmış ise döngüden çıkılıyor. Mouse'un sağ tuşuna basıldıysa, ikon numarası -1 ile çarpılıyor ve bu değer Param değişkeni ile çağrıldığı yere bildiriliyor. Tüm prosedürleri açıkladık. Programımızın prosedürlerin dışında kalan kısmında ise, örnek ikonlar çizdiriliyor ve döngü içerisinde BASILAN IKON prosedürü çağrılıp, basılan ikonun numarası ikonlardan birinin içerisine yazılıyor.

AMOS (C) 1990 * Europress Software, Ltd. IKON DEMO * — (C)1992 AMIGADUNYASI *

Dim X1(32),Y1(32),X2(32),Y2(32)
EKRAN AC
IKON YAP
Do
BASILAN IKON
Dizi İnk 2,3 : Text 365,210,Str$(Param)
| Loop
Procedure EKRAN AC
Screen Open 0,640,256,4,Hires
Kalp Curs Off : Flash Off : Cis 0
Palette $99,0,$FFF,$AAA
| EndProc
,
Procedure KUTU(X1,Y1,X2,Y2)
Ink 2 : Draw X1,Y1 To X2,YI
Draw X1,YI To X1,Y2-1
Cls To X2,Y2
Ink 1 : Draw X1,Y2 To X2,Y2
Draw X2,Y1-41 To X2,Y2
End Proc
ba- Procedure BASILAN IKON
Shared X10),Y10,X20,Y20
Gr Writing 2 : Set Pattern 0
- file While Mouse Key : Multi Wait : Wend
Repeat : Multi Wait : M-Mouse Zone :
a da Until M>0O
pen- Bar XI(M),YI(M) To X2(M),Y2(M)
ye- Repeat
nce- Multi Wait
1 ha- Zone
cilde Until MK<>0 or Mo>N
- Bar Xİ(M),YI(M) To X2(M),Y2(M)
Until M-N
Then N—-N
Iyisi Gr Writing 1
abu End ProciN)
iyor. »
MK-Mouse Key
Procedure IKON YAP
Shared
Gr Writing 1 : Read N : Reserve Zone N
ForA-zI TON
Read XI(A),YI(A),H,XT,YT,A$
Set Zone A,XI(A),YI(A) To
2(A),Y2(A)
Ink 1,3 : Text
,A$
Next
Rem X, Y, Yükseklik, X-Text, Y-Text,
'AZI$
Data 6
Data 235,40,20,32,6,"AMIGA DUNYA-
r
Data 271,74,16,16,4,"SAYI: 28"
- Data 235,98,16,48,4,"IKON DEMO"
Data 219,132,16,16,4,"Bu kutucuklarin
psi
Data 247,156,16,16,4,"birer ikondur."
Data — 237,200,16,16,4,"BASILAN
ON: 3!
End

İlk programımız olan IKON DEMO haricinde, iki adet basit program daha veriyoruz. Bu programlardan ilki

Bob'ları ve ikincisi de Sprite'ları kullanarak, ekrana yıldızlar getiriyor ve kaydırıyor. Programların her ikisinde de YILDIZLAR prosedürü, yıldızları ekrana getirip hareket ettiriyor. Köşeli parantez içindeki değerler ise yıldız sayısını gösteriyor. Bu değer ilk programda en fazla 63 ve ikinci programda ise 56 olabilir. Bu aylık da bu kadar. Takıldığınız konularda mektup göndermeyi unutmayın. Çünkü işleyeceğimiz konularda mektuplarınızı da göz önünde bulunduracağız. Bol programlı günler dileriz.

*& AMOS (C) 1990 Europress Software, Ltd. '*

YILDIZLAR #1
* — (C) 1992 - AMIGA DUNYASI
*#*
BASLANGIC
YILDIZLAR|47)|
Procedure BASLANGIC
Screen Open 0,320,256,4,Lowres
Curs Off : Paper 0 : Cls 0 : Flash Off :
Hide
Plot 0,0,1 : Get Bob 1,0,0 To 1,1
Palette 0,0,0,0
Pen 2 : Centre At(,13)4"* YATAY YIL-
DIZLAR *"
Centre At(,19)4"AMIGA DUNYASI"
Fade 2,,,$FFF : Wait 30
Fade 3,,,$D : Wait 45
End Proc
Procedure
Dim S(3),C(3)
For Az1 TON.
Plot Rnd(319),Rnd(255),2
Next
S(0)-80
S(3)-640
: C(D-$AF : C(2)-$6F :
C(3)-$F
Double Buffer : Synchro Off : Bob Up-
date Off
S(2)-320
Set Rainbow 0,1,256,"","",'"
For A-z0 To N
Repeat : Y-Rnd(255) : Until Rain(0,Y)
-(0
Set Bob A,1,1, : Bob A,0,Y,1 :
3
(3)
Channel A To Bob A
Amal A,"S:Let X—0;Move 320,0,"--Str$
(S(S))4";Jump 8"
Rain(0,Y)-C(S)
Rainbow 0,0,42,256
Amal On A
For B-1 To 5 : Synchro : Next
Next
,
Bob Update On
Repeat
Synchro : Wait Vbi
Until Mouse Key
End Proc

'k AMOS (C) 1990 Buropress Software, Ltd. tk

YILDIZLAR #2
* — (C) 1992 - AMIGA DUNYASI
BASLA
YILDIZLAR|39)1
Procedure BASLA
Dim C(3)
Set Sprite Buffer 256 : Hide
Screen Open 0,640,256,4,Hires
Curs Off : Paper 0 : Cls 0 : Flash Off
Palette 0,$F80,$DO,$FOF
C(1)-$FFF : C(2)-$BBB : C(3)—-$777
For A-0 To 3
For To 3 : Colour 164-A*4--B,C(B)
: Next
Next
For To3
Plot 0,0,A : Get Bob A,0,0 To 1,1
Next
Clis0
Pen 1 : Centre At(,4)4"* YILDIZLAR
Fi
Pen 2 : Centre At(,24)4"AMIGA DUN-
YASI"
Pen 3 : Centre At(,27)4"SAYI: 28"
End Proc
Procedure YILDIZLARISI
Synchro Off
For A-0 To S
Channel A To Sprite A48
X—160-Rnd(319) : Y-z128-Rnd(255)
F-Rnd(16) :
Sprite A48,0,0,F/6-4-1
If C-0 Then X-160
If C-z1 Then X—-160
If C-2 Then Y-128
If C-3 Then Y--128
S—F*10-430
A$z"S: Let X—288; Let Yz170; Move "
Str$(S)4-"; Jump Start"
Amal A,A$ : Amal On
Synchro
Next
Repeat
Synchro : Wait
Until Mouse Key
Fade 3 : Wait 45
End Proc
,