DENEYEBİLECEĞİNİZ ÜÇ ÖRNEK PROGRAM
Retro bilgisayarMerhaba 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