AMOS THE CREATOR

Merhaba arkadaşlar. Bu ayki yazımızda grafik komutlarına biraz ara verip; AMOS'un 'string' fonksiyonlarını anlatacağım. (Bu bölümden itibaren karakter değişkenlerinden kısaca string diye söz edeceğim.) Bu fonksiyonlar sayesinde, AMOS sadece üstün grafik özelliklerine sahip bir demo programı olmaktan çıkıp, adventure oyunları yazabileceğiniz ve kelimeler üzerinde istediğiniz gibi oynayabileceğiniz bir program haline gelmekte.

Bu sayımızda AMOS yazımıza bir de yenilik ekledik. Siz değerli okuyucularımızdan AMOS'la ilgili öyle çok soru alıyoruz ki bunları okuyucu mektupları köşemize sığdıramıyoruz. Bunun üzerine bu sayımızdan itibaren, bu bölümün sonuna yeni bir okuyucu mektupları bölümü eklemeye karar verdik. Bu bölümde AMOS ile ilgili merak ettiğiniz, öğrenmek isteyip de sormaya çekindiğiniz konuları açıklayacağım.

Şimdi gelelim bu ayki komutlarımıza: KOMUT: Left$ KULLANILIŞI:

a$=left$(b$,n) left$(b$,n)=a$

Bu komut bir string'in soldan başlamak üzere 'n' kadar karakterini etkiler. Birinci kullanılış biçiminde b$ değişkeninin solundaki ilk 'n' harf a$ değişkenine atanır. Bu durumun tersi ikinci kullanılış biçiminde geçerli olur. Bu sefer b$ değişkeninin ilk 'n' harfi a$ değişkeninden alınır.

Örneğin; Print left$("AMIGA DÜNYASI",5) komutu ekrana AMIGA yazar.

KOMUT: Right$ KULLANILIŞI:

a$=right$(b$,n) right$(b$,n)=a$

Bu komut aynı LEFT$ gibi çalışır. Aralarındaki tek fark bu sefer karakterleri soldan değil de sağdan itibaren kopyalamasıdır.

Örneğin; PRINT RIGHT$("AMIGA DÜNYASI",7) komutu ekrana sadece DÜNYASI yazacaktır.

KOMUT: MID$ KULLANILIŞI: a$=MID$(b$,s,l) MID$(b$,s,l)=a$

Bu komut diğer iki komuttan daha güçlüdür. String'in istediğiniz her yerine ulaşabilmenizi sağlar. Komut b$ değişkeninin 's' numaralı karakterinden başlamak üzere l tane karakterini etkiler.

Örneğin; PRINT MID$("AMIGADUNYASI",7,5) komutu ekrana DÜNYA yazar.

KOMUT: INSTR KULLANILIŞI:

f=instr(a$,b$[,n])

INSTR komutu a$ değişkeninin içinde b$'ı arar. Eğer bulursa f değişkenine b$'ın a$'ın hangi karakterinden başladığını atar. Bulamazsa f=0 olur. Eğer aramaya a$'ın en başından değil de başka bir yerinden başlamak istiyorsanız, bunu 'n' değişkeni ile belirtebilirsiniz. Bu sefer komut aramaya a$'ın 'n'. karakterinden başlar. Örneğin; PRINT INSTR("AMIGA DÜNYASI","DÜN") PRINT INSTR("AMIGA DÜNYASI","a") PRINT INSTR("AMIGA DÜNYASI","a",2) PRINT INSTR("AMIGA DÜNYASI","a",6) komutları ekrana sırasıyla 7, 1, 5 ve 11 yazacaktır. Aşağıdaki programda bu komutu kullanarak yazılmış ve bir string'deki kelimeleri sayan bir prosedür yazdım.

Rem** 
** 
Rem**       AMIGA DÜNYASI 
** 
Rem** written by Burak Ozdemir 
** 
Rem**   AMOS copyright 1990 
** 
Rem**         Mandarin/Jawx 
** 
Rem** 
**
Do 
Input A$ 
A$=A$+"" 
WORDCOUNT[A$] 
Print Param 
Loop 
Procedure WORDCOUNT[W$J 
N=0 
I=-l 
Do 
F=Instr(W$,"",I+l) 
If F=0 Then Exit 
Inc N 
I=F 
Loop 
End Proc[N]

KOMUT: Upper$ KULLANILIŞI: a$=upper$(b$)

Bu komut bir string'deki küçük harfleri büyük harflere çevirir.

KOMUT: Lower$ KULLANILIŞI: a$=lower$(b$)

Bu komut deminkinin tam tersidir. Bir string'deki büyük harfleri küçük harflere çevirir.

KOMUT: FLIP$ KULLANILIŞI: a$=FLIP$(b$)

Bir string'i tersine çevirmek istiyorsanız, bu komutu kullanabilirsiniz.

Örneğin; PRINT FLIP$("amiga") komutu ekrana agima yazacaktır.

Bu komuta örnek olarak yazdığım program, verilen bir string'i önce kelimelere ayırır, sonrada bunları tersinden yazar.

Rem** *********************** ** 
Rem**      AMIGA DÜNYASI 
** 
Rem** written by Burak Ozdemir ** 
Rem** AMOS copyright 1990 ** 
Rem** 
Mandarin/Jawx 
**
Do 
Input A$ 
L=Len(A$) 
B$="" 
A$=A$+" " 
N=l 
I=l 
Do 
F=Instr(A$," M) 
If F=0 Then Exit 
S$=Mid$(A$,N,F-N) 
D$=Flip$(S$) 
B$=B$+D$+"" 
I=F+1 
N=F+1 
If F=L+l Then Exit 
Loop 
Print" "+B$ 
Loop

KOMUT: Space$ KULLANILIŞI: a$=space$(n)

Bu komut 'n' kadar boşluk içeren bir string yaratır.

Örneğin; PRINT "bu program 10"; SPACE$(10); "boşluk yazar"

KOMUT: String$ KULLANILIŞI: a$=string$(b$,n)

Bu komut b$ değişkeninin ilk karakterinin 'n' tane kopyasını a$ değişkenine atar.

KOMUT: Chr$ KULLANILIŞI: a$=chr$(n)

Bu komut a$ değişkenine ASCII kodu 'n' olan karakteri atar.

KOMUT: Asc KULLANILIŞI: c=asc(a$)

Bu komut chr$ komutunun tersidir. Bir karaktere ait ASCII kodunu belirler.

KOMUT: Len KULLANILIŞI: a=len(a$)

Bu komut yardımıyla bir string'in uzunluğunu öğrenebilirsiniz.

Bu komut yardımıyla çok basit bir şifre programı yazmak mümkündür:

Rem** *********************** ** 
Rem**      AMIGA DÜNYASI 
** 
Rem** written by Burak Ozdemir ** 
Rem** AMOS copyright 1990 ** 
Rem** 
Mandarin/Jawx 
** 
Rem************************** ** 
Do 
Print "yazi dizisini girin" 
Input A$ 
Print "şifreyi girin" 
Input B 
Print "şifreleniyor!" 
C$="" 
ForI=lToLen(A$) 
C$=C$+Chr$( Asc(Mid$( A$,1,1 ))+B) 
Next I 
Print "işlem tamam" 
Print C$ 
Loop

Yukarıdaki programın şifrelediği string'lerin şifrelerini çözmek için aynı işlemi tersinden yapan bir program yazmak yeterlidir:

Rem** *********************** ** 
Rem** 
AMIGA 
DÜNYASI 
** 
Rem** written by Burak Ozdemir ** 
Rem** AMOS copyright 1990 ** 
Rem** 
Mandarin/Jawx 
** 
Rern** *********************** ** 
Do 
Print "yazi dizisini girin" 
Input A$ 
Print "şifreyi girin" 
Input B 
Print "şifre çözülüyor!" 
C$=""
For I=l To Len(A$) 
C$=C$+Chr$(Asc(Mid$(A$,I,l))-B) 
Next I 
Print "işlem tamam" 
Print C$ 
Loop

KOMUT: Val KULLANILIŞI: b=val(a$) b#=val(a$)

Bu komut bir string'in içindeki rakamları 'b' değişkenine aktarır. Eğer herhangi bir sebepten ötürü bunu yapamıyorsa b=0 olur.

Örneğin; b=val("12.321") ile b=12.321 aynı anlama gelir.

KOMUT: Str$ KULLANILIŞI: a$=str$(n)

Bu komut matematiksel bir değişkenin değerini bir karakter değişkenine atar.

Bunlardan başka iki tane de genel dizi komutu vardır. Bu komutlar her türlü dizilerde kullanılabilir.

KOMUT: Sort KULLANILIŞI:

sort a(0) sort a#(0) sort a$(0)

Bu komutla bir dizinin elemanlarını sıraya dizebilirsiniz. Aşağıdaki program verilen isimleri bu komut yardımıyla sıraya dizer.

Rem** *********************** ** 
Rem**      AMIGA DÜNYASI 
** 
Rem** written by Burak Ozdemir ** 
Rem** AMOS copyright 1990 
** 
Rem** 
Mandarin/Jawx 
** 
Rem** *********************** **
Input "isim sayisi=";N 
Dim A$(N) 
For I=1 ToN 
Print "isim ";I;"="; 
Input A$(I) 
Next I 
Sort A$(0) 
For 1=1 To N 
Print A$(I) 
Next I

KOMUT: Match KULLANILIŞI:

r=match(a(0),b) r=match(a#(0),b#) r=match(a$(0),b$)

Aşağıda bu komutla ilgili bir örnek program yazdım. Bu program yazı ile, sıfırdan 999.999'a kadar olan sayıları kelimelerine ayırıyor ve bu kelimelerle eş anlamlı sayılar yazıyor. Örneğin 'on dokuz bin yedi yüz otuz altı' yazınca, bunu '10 9 1000 7 100 30 6' olarak çeviriyor. Programa birkaç rutin daha ekleyerek bu sayı dizilerini gerçek rakamlara da dönüştürmek mümkün.

Rem** 
AMIGA DÜNYASI 
Rem** 
written by Burak Ozdemir   ** 
Rem** 
AMOS copyright 1990      ** 
Rem** 
Mandarin/Jawx
Dim R$(2l) 
Dim Q(21) 
For I=1 To 21 
Read R$(I) 
Next I 
For 1=1 To 21 
Read Q(I) 
Next I 
Input "sayi=";S$ 
S$=S$+"" 
Rem 
Rem kac kelime 
Rem 
K=0
For I=1 To Len(S$) 
If Mid$(S$,l,l)=" "Then K=K+1 
Next I 
Print "kelime savisi=";K 
Dim K$(K) 
Dim W(K) 
N=l 
For 1=I To K 
F=lnstr(S$," ",N) 
K$(I)=Mid$(S$,N,F-N) 
N=F+1 
Next I 
Print "kelimeler=" 
For I=1 ToK 
Print KS(I) 
Next I 
For I=1 To K 
R=Match(R$(0),K$(I)) 
W(I)=Q(R) 
Print W(I) 
Next I 
Print "rakamlar" 
For I=1 ToK 
Print W(I) 
Next I
Data "alti"."altmiş", "bes","bin","bir" 
Data "doksan","dokuz","dört"."elli","iki" 
Data "kirk","on","otuz","sekiz". "seksen" 
Data "sifir'', "uc","yedi","yetmiş" 
Data "yirmi","yuz" 
Data 6,60,5,1000,1,90,9,4,50,2,40,10,- 
30,8,80 
Data 0,3,7,70,20,100

Sıra geldi okuyucu köşemize. Bu ayki şanslı okuyucumuz Biga/Çanakkale'den sayın Dr. Ali Hatay. Bu okuyucumuzdan sürekli mektup almamıza rağmen ancak cevap verme imkanı bulabildik. Bunun sebebi her ay sınırlı sayıda mektuba cevap verebilmemiz. Şimdi tekrar ilginize teşekkür edip sorularınızın cevabını veriyorum:

İlk olarak AMOS'ta kalın çizgi çizmek için bir komut olup olmadığını sormuşsunuz. Bunun için özel bir komut mevcut değil. Tabii bu kalın çizgilerin çizilemeyeceği anlamına gelmiyor. Bunu ayrı prosedürler tanımlayarak kolayca yapabilirsiniz. Gelecek sayımızda bunlara çeşitli örnekler vereceğim.

Değişkenleri sıfırlayıp oyunu yeniden başlatmak için, oyunun bittiği yere 'run program ismi.amos' yazmak yeterli olur. Bu şekilde program bitmeden evvel kendini yeniden çalıştırır. Yine bu tekniği kullanarak başka programları da çalıştırmak mümkündür. Böylece adventure oyunları gibi çok bellek isteyen programları birkaç değişik parçada hazırlayabilirsiniz.

Karakter setleri ve komut kısaltmalarını ise geçen sayımızda yazmıştım.

Sonix ve Soundtracker gibi müzik programlarının modüllerini AMOS'ta çalmak için AMOS disketlerinin içinde iki adet program mevcut. Bunları kullanarak bu müzikleri AMOS'ta çalabilirsiniz.

Bu ayki yazımız da burada bitiyor sevgili arkadaşlar. Bir dahaki sayıda buluşmak üzere hoşça kalın.