DENEYEBİLECEĞİNİZ ÜÇ ÖRNEK PROGRAM

Merhaba arkadaşlar. Birçoğunuz yayınladığımız AMOS yazısını okuyorsunuzdur. AMOS kuşkusuz oyun yazmaya ve ekran efektleri yapmaya meraklı olanların ilgisini çeken bir program. Bu sayımızda, diğer AMOS yazımıza ek olarak, AMOS'a yeni başlayanlar için iki basit DEMO programı ve bir tane de basit ve kısa bir oyun programı hazırladım. Programları mümkün olduğu kadar kısa ve basit yazdım.

Programlardan ilki disketten üç resim yükleyip, bunların 50 pixel yüksekliğindeki bölümlerini ekranda birbirleri arkasında aşağı yukarı scroll ediyor. İkinci program, Shadow Of The Beast ve Silkworm gibi oyunlarda kullanılan ve görüntüye daha fazla bir derinlik veren Parallax Scrolling tekniği ile ilgili. Bu teknikte iki ekran görüntüsü birbirinin üzerine çakıştırılır ve bunlara birbirinden bağımsız olarak erişilebilir. Programda bir çift sıradağ birbiri ardında gösterilir. Mouse'un hareketi ile hareket ederler. Öndeki dağlar daha hızlı hareket ettirilerek sanki daha yakındaymış gibi gözükmeleri sağlanır.

Son program ise basit bir arcade oyunu. Oyunun konusu şöyle: Siz her zamanki gibi uzay geminizde gidiyorsunuz. Yolunuzu kaybetmiş ve başka bir yıldız sistemine girmişsiniz. Burada "küçük yeşil yaratıklar" yaşıyor. Bunlar nedense silah taşımıyorlar. Sizi düşman zannettikleri için yok etmeye çalışıyorlar. Silahları olmadığı için de bunu size çarparak yapıyorlar. Tek savunmaları ise gemilerindeki belirsizlik mekanizması. Gemiler tek bir nokta üzerinde değil de hareket eden bir noktanın etrafında bir çeşit titreme hareketi ile ilerliyorlar.

Şimdi gelelim programların açıklanmasına: Birinci programın Rem satırlarından sonra gelen ilk üç satırda, tırnak içinde 'resim' yazan yerlere yükleyeceğiniz resimlerin isimlerini yazın. Daha sonraki üç satırda programın animasyon kanalları ayarlanıyor. Aynı anda çalışan üç tane animasyon programının her biri bir ekranın ekranda gösterileceği yeri ayarlıyor. Tanımlanan animasyon programlarının hepsi temelde aynı. Ekranı önce 200 pixel aşağı sonra da 200 pixel yukarı hareket ettiriyorlar. Bunların arasındaki tek fark ekranların hareket hızı. 0 numaralı ekran 200 pixellik hareketi 1 saniyede yapıyor. Diğerleri ise 30/50 ve 20/50 saniye olarak verilmiş. 50, 30 ve 25 sayıları Move komutunun kaç ekran taraması süreceğini belirtiyor. İkinci programın en başında Mouse gizlenir. Daha sonra kullanılacak renk paleti belirlenir. Renk paletini belirlerken, her rengin Kırmızı Yeşil ve Mavi bileşenleri 0'dan F'ye kadar belirlenir. Daha sonra 0 ve bir numaralı ekranlar dual playfield komutu ile birleştiriliyor. Dual priority komutu ile 1 numaralı ekranın daha önde gözükmesi sağlanıyor. Sıradağların çizilmesi LAND prosedürü ile yapılıyor. Screen copy komutu ile ekranların ilk ve son sütunlarının aynı olması sağlanıyor. Programın ana döngüsünde Mouse sürekli olarak okunup, ekranlar Mouse'un X pozisyonuna bağlı olarak Screen Offset komutu ile yerleştiriliyor.

Üçüncü programı çalıştırabilmeniz için AMOS EXTRAS Disketine sahip olmanız gerekiyor. Programda kullanılan Sprite ve Bob'ların Data'ları bu disketten yükleniyor. Programın yazılışını ve anlaşılabilirliğini kolaylaştırmak için işlemlerin çoğunu prosedürleri kullanarak yaptım. Değişkenleri ise Global olarak tanımladım. En başta INITIALIZATION prosedürü ile ana hazırlıklar yapılıyor. Burada önce IMAGES prosedürü ile diskette iki ayrı Sprite Bank olarak kayıt edilmiş olan verilerden oyunda kullanılanları tek bir Bank'a depolar. SETSPACE prosedürü ile fondaki yıldızlar hazırlanır. SETANIMS prosedürü ile programdaki animasyonlar hazırlanır. Buradan sonra programın ana döngüsü gelir. Ana döngünün başında SPSCROLL prosedürü ile fondaki yıldızlar aşağı doğru kaydırılır. Daha sonra ALIENTRACK ile uzaylıların hareketi belirlenir, ve ALIENSHOW ile uzaylının yeni yerinde gözükmesi sağlanır. Daha sonra skor ekranın sol üst köşesine yazılır. Mouse okunarak uzay geminizin yeri belirlenir. Eğer Mouse'un herhangi bir düğmesine basılıysa geminiz ateş eder. Ateş edildikten sonra ışınınızın düşman gemisine çarpıp çarpmadığı kontrol edilir. Eğer isabet ettirdiyseniz düşman gemisi patlayacak, uzaylı yaratık uzay boşluğunda kayıp olacak, ve rastgele bir yerde bir yenisi çıkacaktır. ALIENTRACK prosedüründe aynı zamanda düşman gemisinin sizin ateş alanınızdan çıkıp çıkmadığı da kontrol edilir. Eğer çıktıysa KAMIKAZE prosedürü ile sizin üzerinize gelir ve kendi hayatı ile birlikte oyunu da bitirir. Biraz da oyunda kullanılan animasyon kanallarından, sprite'lardan ve de bob'lardan bahsedelim. Bob 1 sizin uzay geminiz, Sprite 2 yaratığın gemisi, ve Sprite 5 te ışınınızdır. Kanal 1 ve 4, uzaylı yaratığın gemisini; kanal 2 ve 3 uzay geminizi; kanal 5 ise ışınınızı kontrol eder. _______________________________________________________________________________________________________ Rem******************************************* Rem***** ***** Rem ***** DEMO 1 ***** Rem***** ***** Rem*****Written by Burak Ozdemir Using AMOS***** Rem***** ***** Rem*****AMOS Copyright 1990 Mandarin/Jawx ***** Rem***** ***** Rem***** A M I G A D Ü N Y A S I ***** Rem***** ***** Rem ******************************************* Load Iff "df0:resim 1",1 Load Iff "df0:resim 2",2 Load Iff "df0:resim 3",3 Channel 2 To Screen Display 3 Channel 1 To Screen Display 2 Channel 0 To Screen Display 1 Amal 2,"Loop:Move 0,200,20;Move 0,-200,20;Jump Loop" Amal 0,"Loop:Move 0,200,50;Move 0,-200,50;Jump Loop" Amal 1,"Loop:Move 0,200,30;Move 0,-200,30;Jump Loop" Screen Display 1,112,30,320,50 Screen Display 2,112,30,320,50 Screen Display 3,112,30,320,50 Amal On 0 Amal On 1 Amal On 2 Do Loop

Rem ***************************************** 
Rem***** A M I G A    D Ü N Y A S I 
Rem***** Demo 2 Written By Burak Ozdemir 
   Rem***** Using    AMOS 
  Rem***** (c) Mandarin / Jawx 1990
Rem******************************************* 
Hide 
Default Palette 0, $111, $222, $333, $444, $555, $666, $777, 
$F00, $FF0, $F0F, $F, $FF, $F0, $FFF,0 
Screen Öpen 0,960,100,8,Lowres 
Screen Öpen 1,960,100,8,Lowres 
Screen Display 0,128,150,320,100 
Screen Display 1,128,150,320,200 
Wait Vbl 
Dual Playfield 0,1 
Dual Priority 1,0 
ClsO 
Screen 0 
LAND[640,0,50,0] 
Flash Off 
Screen 1 
LAND[640,0,50,0] 
Screen Copy 1,0,0,319,100 To 1,639,0 
Screen 0 
Screen Copy 0,0,0,319,100 To 0,639,0 
Do 
Screen Offset 1,(X Mouse-150)*2+320,0 
Screen Offset 0,X Mouse+170,0 
Wait Vbl 
Loop 
Procedure LAND[W,X,N,C] 
Ink 0 : Bar X,0 To W+X,99 
ForT=0ToN 
InkRnd(6)+C+l 
TX=Rnd(W)+X : TW=Rnd(W/8)+4 : TH=Rnd(50) 
Polygon TX,99 To TX+TW/2,99-TH To TX+TW,99 
NextT 
End Proc
Rem********************************************* 
Rem***** 
A M I G A    DÜNYASI 
***** 
Rem***** 
***** 
Rem***** KAMIKAZE BY BURAK OZDEMIR       ***** 
Rem***** 
***** 
Rem***** AMOS Copyright 1990 Mandarin/Jawx      ***** 
Rem********************************************* 
Randomize(Timer) 
Hide 
Global SCORE,LEVEL,A,B,ALIEN$ 
INITIALIZATION 
Rem********************************************* 
Rem    MAIN LOOP 
Do 
SPSCROLL 
ALIENTRACK 
ALIENSHOW 
Locate 0,0 
Print "SCORE=";SCORE 
X1=X Mouse-144 
Amreg(0)=Xl 
If(Mouse Key>0 and Amreg(2)<2) 
Shoot 
Sprite 5,X Mouse.Y Hard(0,160),29 
Amreg(2)=YHard(0,160) 
Amal On 5 
End If 
CRASH=Sprite Col(2) 
IfCRASH=-l 
Sprite 5,0,0,29 
Amreg(2)=0 
Boom 
Amal Freeze 1 
Amal 4,ALIEN$ 
Amal On 4 
SCORE=SCORE+10 
LEVEL=LEVEL+1 
For 1=1 To 20 
SPSCROLL 
Locate 0,0 
Print "SCORE=";SCORE 
Next I 
Amal Freeze 4 
Sprite 2,0,0,1 
A=Rnd(200)+50 
B=Rnd(100) 
Amal On 1 
End If 
Loop 
Rem********************************************* 
Procedure SETANIMS 
Channel 1 To Sprite 2 
Channel 2 To Bob 1 
Channel 3 To Bob 1 
Channel 4 To Sprite 2 
Channel 5 To Sprite 5 
Amal     1 ,"A    0,( 1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(5,4)(4,4)(3,4)(2,4);Q:Let 
RF=0;Let X=RD;Let Y=RE;Pause;Jump Q" 
SHIP$="A 
0,( 19,6)(20,6)(21,6)(22,6)(23,6)(24,6)(23,6)(22,6)(21,6)(20,6);Label:Let 
X=RA;Pause;Jump Label" 
Amal 2,SHIP$ 
Amal 3,"A 4,(25,10)(26,10)(27,10)(28,10)" 
ALIEN$="A
1 ,(7,5)(8,5)(9,5)( 10,5)( 11,5)( 12,5)( 13,5)( 14,5)( 15,5)( 16.5)( 17,5)( 18,5)" 
Amal 4,ALIEN$ 
Amal 5,"Loop:Let Y=RC;Mabel:Let Y=Y-l;Let RC=Y;If Y>0 Jump 
Mabel;Test:If Yo0 Jump Loop;Pause;Jump Test" 
End Proc 
Rem********************************************* 
Procedure IMAGES 
Screen Display 0,140,330,, 
Curs Off 
Flash Off 
Palette 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 
Cls 
Load "df0:sprite_600/space/shipl .abk" 
Get Sprite Palette %11111111111111111111111111111101 
For 1=0 To 5 
Paste Bob 1*32,0,1+15 
Paste Bob 1*32,40,1+20 
Paste Bob 1*32,80,1+25 
Next I 
Load "dfO:sprite_600/aliens/alien5.abk" 
For 1=0 To 5 
Get Sprite 1+19,1*32,0 To 1*32+32,32 
Get Sprite 1+24,1*32,40 To 1*32+32,72 
Get Sprite 1+24,1*32,80 To 1*32+32,112 
Next I
Ink 10 
Bar 100,100 To 101,110 
Get Sprite 29,100,100 To 101,110 
Screen Display 0,140,50,, 
End Proc 
Rem********************************************** 
Procedure SETSPACE 
For 1=1 To 50 
Plot Rnd(32O),Rnd(20O),Rnd(15) 
Next I 
End Proc 
Rem********************************************** 
Procedure SPSCROLL 
Scroll 1 
Gr Locate 0,15 
InkO 
Draw To 320,15 
QQ=Rnd(l) 
For 1=1 To QQ 
PlotRnd(320),15,Rnd(15) 
Next I 
End Proc 
Rem********************************************** 
Procedure INITIALIZATION 
LEVEL=1 
IMAGES 
Cls 
Make Mask 
SETSPACE 
Def Scroll 1,0,0 To 320,200,0,1 
Set Bob 1,0„ 
SETANIMS 
A=100 
B=100 
Sprite 2,0,0,1 
Bob 1,150,160,19 
Amal On 2 
Amreg(2)=0 
Amal On 5 
Amal On 1 
End Proc 
Rem ********************************************* 
Procedure ALIENTRACK 
A=A+Rnd(LEVEL)*2-LEVEL 
B=B+Rnd(LEVEL)*2-LEVEL+1 
IfA<0ThenA=0 
IfA>320ThenA=320 
If B<0 Then B=0 
If B> 160 Then KAMIKAZE 
End Proc 
Rem ********************************************* 
Procedure ALIENSHOW 
Amreg(3)=X Hard(0,A): Amreg(4)=B+50 
End Proc 
Rem ********************************************* 
Procedure KAMIKAZE 
ALIENSHOW 
While Abs(X Mouse-140-A)>5 
A=A+Sgn(X Mouse-140-A)*LEVEL 
ALIENSHOW 
Wend 
FINAL 
End Proc 
Rem ********************************************* 
Procedure FINAL 
Boom 
Sprite 5,0,0,29 
Amreg(2)=0 
Boom 
Amal Freeze 1 
Amal Freeze 2 
Amal On 3 
Amal 4,ALIEN$ 
Amal On 4 
Wait 150 
GAMEOVER 
End Proc 
Rem ********************************************* 
Procedure GAMEOVER 
Amal Off 
Sprite Off 
Bob Off 
Locate 10,10 
Print "GAME OVER" 
Locate 10,11 
Print "SCORE=";SCORE 
Wait Key 
End 
End Proc