Bu sayfadaki yazılar
Sayfanın metni
Sayfa 15
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.
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 14
Ayrıca GFA BASIC, eksik olan yere gereğinde ünlem ya da noktalı virgülü kendisi koyar. Bir döngüyü kapamadan (FOR...NEXT'teki NEXT gibi) programı çalıştırmaya kalkışırsanız, programınız kesinlikle çalışmaz.
Editörün diğer iyi huylarından biri de, hemen hemen her komut için kısaltmalar olması. Bu sayede, amatörler programlarını normalden daha hızlı yazabilirler. Ayrıca girilen tüm değişkenler, istenirse kontrol ettirilebilir (New Names fonksiyonunu kullanarak). Bu durumda programda her yeni değişken ismi kullandığınız anda bir pencere çıkacak ve değişken isminin doğruluğunu onaylamanız istenecektir. Bu yine amatörler için oldukça faydalı bir fonksiyon.
GFA BASIC, galiba en başarılı yarışmacılarımızdan biri; çünkü normal BASIC komutlarının yanı sıra, fazladan 350 komutu daha var! Bu komutlarla bit kaydırma, matematiksel işlemler (ADD, SUB, MUL, DIV ve MOD) sıraya koyma işlemlerini (QSORT ve SSORT komutlarıyla quicksort ve shellsort) rahatlıkla yapabilirsiniz. Ayrıca ses ve grafik olarak Amiga'nın tüm gücünü kullanabileceğiniz bazı komutlar da var. Grafik komutları arasında Amiga'nın 4096 renklik HAM modunu ya da 64 renklik ExtraHalfBrite modunu açan komutlar da var. SGET komutu yardımıyla komple bir grafik ekranını bir matris değişkenine kopyalayabilirsiniz. FILL komutuyla kullanmak üzere 36 hazır temel brush var. Bunlarla bir bölgeyi ister noktalı, ister çizgili, isterseniz de karma şekilde doldurabilirsiniz. Ayrıca bir string değişkeni kullanarak kendi temel brush'larınızı da tanımlayabilirsiniz.
LOGO dilini kullananlar bilirler; bu dil yardımıyla, ekranda grafikleri son noktaya göre relatif olarak çizmek mümkündü. GFA BASIC'teki DRAW komutuyla aynı işlemi yapabilirsiniz. Bu arada x ve y eksenlerini skalalayarak oranlı çizimler de yapmanız mümkün.
Programlarında animasyon kullanmak isteyenler için sprite ve bob'ların kullanımına izin verilmiş. Fakat bunların ikisi de AmigaBASIC'te olduğundan çok daha hızlı ve akıcı bir şekilde hareket edebilmekte. Ayrıca bunları tanımlamak için string değişkenleri kullanıldığından bir günde bile basit oyunlar yazabilirsiniz. DEFMOUSE komutuyla özel bir sprite da değiştirilebilmekte: Mouse işaretçisi. İsterseniz hazır 7 işaretçiden birini kullanın, isterseniz kendi işaretçinizi kendiniz tanımlayın. Bu arada tanımlanan mouse işaretçisinin gereğinde sadece bir pencereye ait olmasını sağlayabilirsiniz. Bu şekilde 7 ayrı pencerede 7 ayrı mouse işaretçisi kullanabilirsiniz. Pencerelerden birini seçtiğiniz anda mouse işaretçisinin görünümü değişecektir.
Biraz da sistem rutinlerinin kullanımına bakalım; pencereler, GFA BASIC'te istenildiği gibi dizayn edilerek kullanılabilir. Bu arada normalde AmigaBASIC'ten mümkün olmayan intuition flag'larını kullanmak da mümkün. Ayrıca her pencereye ayrı bir message port (pencereyle ilgili sistem mesajlarının gönderilip alınabileceği data tablosu) açarak, o pencerede yapılan girdi/çıktıları otomatik olarak kontrol edebilir ve belirlediğiniz alt-rutine ya da prosedüre dallanabilirsiniz (ON MESSAGE GOSUB).
Hazır şartlı dallanma komutlarını inceliyoruz, diğer basit şartlı dallanmalara da bakabiliriz. ON MENU KEY ve ON MENU BUTTON ile sağ tuşa basılıp basılmadığını kontrol edebilirsiniz.
Menü çubuğundaki pull-down menülerin hepsini string değişkenleriyle tanımlayabilir ve ayrıca menülerdeki checkmark fonksiyonunu da kullanabilirsiniz. İstediğiniz her menü fonksiyonuna ayrı bir tuş tanımlayıp fonksiyonlara daha hızlı erişmeyi sağlayabilirsiniz.
GFA BASIC'e eklenen iki özel pencere yardımıyla belli bir işlemin sonucunu doğrulamak için sistem requester'ını kullanabilirsiniz. Fakat burada, üç seçenek hakkına sahipsiniz. Yapılan seçim, bir değişkene saklanır.
Dosyalama/kartoteks programı hazırlayanlar için gayet güzel bir komut da hazır olan Load/Save penceresini kullanmanızı sağlıyor.
INLINE komutu, yararlı komutlar arasında. Bu komutla, program içinde hafıza ayarlamayı otomatik olarak yapabilirsiniz. Bu sayede grafik ya da sesi yüklemek için ayrı bir tampon bölge (buffer) açmanıza gerek kalmaz. Bu komutu kullanan programlarınıza Assembler ya da C dilinde hazırlanmış ufak rutinleri de sorunsuz olarak ekleyebilirsiniz.
Sistem rutinlerini kullanmak isteyen profesyonel programcılar için EXIT Dos, Graphics, intuition, DiskFont, layers ve WorkBench library'lerin rutinleri komut gibi çağrılabilmekte. Bunlar için AmigaBASIC ya da HiSoft BASIC'de olduğu gibi daha önceden dosyaları yardımıyla BMP dosyalarını oluşturmanız gerekmemekte!
GFA BASIC'in compiler'ına gelince; compiler iki şekilde de çalışabiliyor: Dilerseniz doğrudan çalışır dosya yaratabilirsiniz, dilerseniz de link edip dosya yaratırsınız. İkincisini seçtiğinizde daha sonra ALINK ya da BLINK programlarını (C disketlerinde bulabilirsiniz) kullanarak hazırladığınız programa, istediğinizi ya da Assembler modüller eklemeniz gayet basit. Bu sayede programın hız gerektiren kısımlarını makine dilinde hazırlayarak verimi maksimuma çıkarabilirsiniz.
Son olarak da vereceğim iki saf test sonucu yardımıyla karşılaştırma yapabilirsiniz:
Floating point sayı kullanılarak yapılan 10000 bölme işi- GFA Interpreter'da 3.4 saniye sürerken, aynı işlem Compiler'dan geçirilince 1.5 saniye sürmekte. Oysa Amiga BASIC bu işlem için 26.0 saniye harcamakta.
10000 işlemli bölmeyi integer sayıya uyguladığımızda Interpreter 2.6, Compiler 0.5 saniye harcamakta. AmigaBASIC hız değişmeyip yine aynı kalıyor.
Gelelim ikinci testimize; burada da FOR ... NEXT döngüsü kullanıp 1'den 100000'e kadar saydırılıyor. İlk rakam floating point sayılarla: Interpreter 6 saniye, Compiler 4.4 saniye, AmigaBASIC ise 40.0 saniye.
Aynı işlemi integer sayılara uyguladığımızda, interpreter iki kat hızlanarak 3 saniyeye düşmekte, compiler ise bu durumda 1.4 saniye harcamakta. Amiga BASIC maksimum hızına ulaşarak 20.0 saniyede döngüyü bitirmekte.
Eh, bu kadar tanıtım yeter, artık karar sizin. İster AC-BASIC Compiler'ı, isterseniz HiSoft BASIC'i ya da GFA BASIC kullanın. Her üç durumda da sonunda memnun kalacağınıza eminim. Ne olsa programlarınızın normalden hızlı çalışması sizi ve programlarınızı kullananları sevindirecektir.
Bu üç program arasında benim favorim GFA BASIC oldu. Nedeni de bu kadar yeni komut, düzen ve modülerlik olması. Umarım bu yazı doğru seçimi yapmanıza yardımcı olur. Hepinize başarılı günler.