Bu sayfadaki yazılar
Sayfanın metni
Sayfa 24
SpritePtr -> SimpleSprite structure yapısı. , SpritelmPtr -> Spritelmage structure yapısı. GetSprite() fonksiyonu ise şöyle çalışıyor: Kullanımı: SpriteNr1 — GetSprite(SpritePtr,SpriteNr2); Fonksiyonu: SimpleSprite structure yapısına bağlı olarak o sprite'ı hazırlar. Parametreleri: SpriteNr1 -> Integer olarak, hazırlanan sprite numarasını verir. SpriteNr2 olarak verdiğimiz sprite doluysa, bu değerden farklı bir numara ile geri döner. SpriteNr2 -> Kullanmak istediğimiz sprite numarasını belirtir. SpritePtr -> SimpleSprite structure yapısını belirtir. GetSprite() ile açmış olduğumuz sprite'ı ise FreeSprite() ile şöyle kapatıyoruz: Kullanımı: FreeSprite(SpriteNT); Fonksiyonu: SpriteNr ile verilen numaradaki sprite'ı kapar. Parametreleri: SpriteNr -> Kapanmasını istediğimiz sprite numarası. MoveSprite()'ın kullanımı ise şöyledir: MoveSprite(ViewPort, SpritePtr, x, y); Fonksiyonu: Sprite'ın pozisyonunu değiştirir. Parametreleri: ViewPort -> ViewPort yapı değişkeni. SpritePtr -> SimpleSprite yapı değişkeni. X, Yy -> yeni pozisyon değerleri. Sprite'lar için kullandığımız fonksiyonlar bunlardan ibaret. Artık program örneğimize bir göz atabiliriz. Bu örneğimizde ilk olarak WorkBench ekranımız sağdan sola kayarak temizleniyor. Daha sonra ekrana sprite'ımız geliyor. Sol tuşa basarak programdan çıkıyoruz. /* Programming by CENKER OZKURT */ #include <stdio.h> #include <exec/types.h> #include <graphics/gfxbase.h> #include <graphics/sprite.h> #include <intuition/intuitionbase.h> struct İntuitionBase *IntuitionBase; struct GixBase *GfxBase; struct RastPort *rp; struct ViewPort *vp; struct Screen *screen; #define PI 3.14 int a; float /* Spritelmage yapısında hazırlanıyor.*/ USHORT sprite||
0,0, 0x0000,0x(ffE, 0xf000,0x0000, 0xf000,0x0000, 0xf000,0x0000, 0xf000,0x0000, 0xf000,0x0000, 0xf000,0x0000, 0xf000,0x0000, 0xf000,0x0000, 0xf000,0x0000, 0xf000,0x0000, 0x0000,0xfFfE, 0,0
struct SimpleSprite sp — ( 16,0,0,3
float sin(),cos(); UBYTE *m-0xbfe001; main() ( IntuitionBase-OpenLibrary("intuition.library",0); if(IntuitionBase--NULL) | printf("intuition An"); return(0);
| GfxBase-OpenLibrary("graphics.library",0); if(GfxBasez-NULL) | printf("graphics An"); CloseLibrary(İntuitionBase); return(0); | vp-&screen->ViewPort; SetRGB4 (vp,20,9,9,9); SetRGBA4A (vp,21,11,11,11); SetRGBA (vp,22,13,13,13); SetRGBA4A (vp,23,15,15,1 for(a-0;a<640;a4-5) | ScrollRaster(rp,5,0,0,0,640,256);
1 GetSprite(&sp,3); while(1) | for(a-0;a<360;a4-4) | MoveSprite(vp,&sp,(int)x,(int)y): WaitTOFO: if((*m&64)--0) goto son; /* Mouse kontrol */
| son: FreeSprite(3); CloseLibrary(GfxBase); CloseLibrary(IntuitionBase);
/* Program Sonu */ Şimdi programımızı kısaca açıklayalım. Programımızda ilk olarak #include önişlem komutları ile gerekli olan makrolar ve kullanılacak olan structure yapıları tanımlanıyor. Daha sonra library ve diğer değişkenler hazırlanıyor. #define PI 3.14 satırı ile pi sayısını bir makro olarak hazırlıyoruz. USHORT sprite[] satırında ise sprite'ımızın şeklini SpriteImage structure yapısına göre hazırlıyoruz. sp değişkeni ise, SimpleSprite yapısını oluşturuyor. Burada posctldata yerine sprite'ımızın adresini vermeyi unutmuyoruz. Diğer sayılar ise sırasıyla yükseklik, başlangıç x-y koordinatları ve sprite numarasını belirtiyor. Programımızda sin() ve cos() fonksiyonları kullandığımızdan dolayı, float olarak tanımlamamız gerekiyor. Aksi takdirde sin() ve cos() fonksiyonları doğru çalışmaz. Programın devamında library'ler açılıyor ve sprite renkleri belirleniyor. Bu işlemlerden sonra ScrollRaster() fonksiyonu vasıtasıyla WorkBench ekranımız temizleniyor. GetSprite(&sp,3); satırı ile de, sprite'ımız kullanıma hazır hale geliyor. while döngüsü içinde, sprite ekranda mouse tuşuna basılana kadar daire çizmeye devam ediyor. Sol tuşa basılmışsa, library'leri kapayarak programdan çıkıyoruz. Böylece, bu ayki yazımızın da sonuna gelmiş bulunuyoruz. Gelecek ay, WorkBench ekranı üzerinde çalışmamızı sağlayan screen komutları ve diğer pratik örnekler üzerinde duracağız. Gelecek ay buluşmak üzere şimdilik hepinize iyi çalışmalar dilerim...
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 25
DİLLER
Merhaba... Bu ay Basic yazı dizimiz teorik olarak bitiyor. Bundan böyle değişik Basic örnekleri ve özel kullanım şekilleri ile birlikte olacağız. İşte, bu ay inceleyeceğimiz son birkaç komut: WHİLE.... WEND KOMUTU Kullanım şekli: ifade Amiga Basic' in bir diğer döngü komutu olan WHİLE .... WEND, yönergeler kısmında verilen komut dizinini, ifade kısmında koyulan şart doğru olduğu sürece çalıştırır. yönergeler, bir ya da daha fazla sayıda Amiga Basic komut satırından meydana gelir ve WHİLE ile WEND arasına yerleştirilir. Program, ifade kısmında verilen koşul olumsuz olana kadar bu bölümdeki işlemleri yapar. Koşul yanlış olduğunda, program WEND yönergesinden sonraki satırdan itibaren çalışmasına devam eder. WHİLE ve WEND programın aynı satırında olabileceği gibi, iki ayrı satırında da olabilir. En tipik örneği klavyeden bir tuşa basılmasını bekleyen döngülerdir: ınkey$ — "" : WEND WHILE..WEND döngüleri de diğer döngüler gibi içiçe girebilecekleri gibi diğer döngülerle karışık bir yapı oluşturabilir. Azx65 'A'nın Ascii değeri kayıt-1 'adres defterinin ilk kaydı. alfabetik: WHİLE A<-90 *2'nin Ascii değeri WHİLE kayıt<sayfa 'genişlik IF LEFT$(defter$ (kayıt,1),1)— CHR$ (A) THEN FOR J- To kayıt PRINT# 1, defter$ NEXT J : PRİNT # 1,"
END İF * kayıt işaretçisi; WEND kayıt-1 artır WEND
AMIGA BASIC
Bu örnekte gördüğünüz gibi üç ayrı döngü iç içe girebilir. WIDTH KOMUTU Kullanım şekli: WIDTH (uzunluk|, tab genişliği) WIDTH LPRINT| genişliği| WIDTH genişliği| WIDTH Cihaz adı|,uzunluk||,tab genişliği) Dört farklı geçerli kullanım şeklini verdiğimiz WIDTH komutu yazım satırının uzunluğunu ve tab genişliğini tespit etmek için kullanılır. Çıkış, herhangi bir çıkış cihazının standart karakter genişliği ile belirlenir. Çıkış cihazı "SCRN:", "COM1:" ya da "LPT1:" olarak verilebilir. Herhangi bir cihaz belirtilmezse çıkış cihazı SCRN: yani ekran kabul edilir. LPT1:, satır yazıcıyı belirtir. WIDTH LPRINT formatı, printer genişliğini tespit etmenin alternatif bir yoludur. uzunluk, çıkış cihazının bir satırına sığabilecek standart karakter sayısıdır. Ancak yazı kursoru veya printer kafasının pozisyonu POS ya da LPOS yönergesi ile değiştirilmişse, 255'ten kalan kısım uzunluk için esas alınır. Amiga'nın ekran tanımlı satır uzunluğu 255'tir. Örneğin bir satırda 60 karakter istenirse, WIDTH 60 kullanılır. Komutta kullanılan tab genişliği ise
taramak için kullanılır. Çıkış satırlar arası ve başlangıç pozisyonları için ayarlamalar tab genişliği ile belirlenebilir. Komutun birinci ve ikinci kullanım şekilleri arasındaki tek fark, ikincinin printer için kullanılmasıdır. Komutun dosya no bulunan kullanım şekli, dosyaya yeni bir uzunluk ataması için kullanılır ve dosyanın yazı uzunluğunu tespit eder. Burada uzunluk, dosyada o anda kullanılan fontun standart karakter genişliği ile belirlenir. Tab genişliği ise kayıttaki dataları ayıran virgülün pozisyonunu belirleyecektir. WIDTH 255: PRINT STRING$(800, "!") WINDOW KOMUTU Kullanım şekli: WINDOW (x2, y2)) WINDOW(x) WINDOW CLOSE pencere-no WINDOW OUTPUT pencere-no Bu komutlardan yeni bir pencere yaratmak ve onu kullanmak için yararlanılabilir. Her pencere, ona kolayca erişilebilmesini sağlayan bir pencere numarasına sahiptir. BASIC penceresi de bir numaraya sahiptir ve bu numara 1'dir. Bu nedenle kullanıcı tarafından yaratılacak yeni pencerelerin numaraları 2 ve daha büyük sayı olmalıdır. Komutun ilk kullanım şekli, yeni bir çıktı penceresi yaratır ve onu ekrandaki tüm pencerelerden öne yerleştirir.
pencere no, yeni yaratılan pencereye verilen numara; başlık, varsa pencerenin başlık çubuğunda görüntülenecek isimdir, (x1, y1) parametreleri pencerenin sol üst ve sağ alt köşelerini belirleyerek pencere genişliğini tespit eder. Bu parametreler AMIGA BASIC, pencere için tüm ekranı kullanır. tip argümanı, pencereye birtakım özellikler ekleyen sayı olarak girilir. Bu sayılar şunlardır: 1 Pencerenin sağ alt köşesine genişletme kutucuğu koyar. Bu kutucuk aracılığıyla, mouse yardımıyla pencereyi büyütüp küçültmek mümkün olur. 2 Pencere mouse ile başlık çubuğundan tutularak hareket ettirilebilir. 4 Pencereye, arkaya alma kutucuğunu ekler. Bu kutu kliklenerek pencere ekranındaki diğer pencerelerin arkasına atılabilir. 8 Pencerenin sol üst köşesine kapatma kutucuğu yerleştirir. Bu kutucuk mouse ile kliklenerek pencere kapatılabilir. 16 Pencerenin ekrandaki yeri değiştirildiğinde, içinde bulunanlar tekrar yerleştirilir. Bu opsiyona, özellikle pencerede PAINT komutu kullanmak istenirse ihtiyaç duyulur. tip argümanı olarak bu değerlerin iki ya da daha fazlası birlikte kullanılabilir. Örneğin 3 verilirse, bu 1 ve 2. özelliklerin toplamı olarak kabul edilir; oluşturulan pencere başlık çubuğundan tutulup hareket ettirilebilir ve genişletme kutusuyla boyutları değiştirilebilir. Tip için atanacak değer 0 ile 31 arasında olabilir. Verilecek özelliklerin sayısal değerleri toplanarak tip argümanı olarak komuta ilave edildiğinde, AMIGA BASIC pencerede verilen özellik kombinasyonunu kullanacaktır. Bu özelliklerin hiçbirini kullanmayacaksanız; WINDOW pencere-no komutu ile pencereyi ön plana yerleştirip çıktı penceresi olarak kullanabilirsiniz. Komutun ikinci kullanım şekli, WINDOW'un fonksiyon versiyonudur. Bu fonksiyonu kullanarak o anki çıktı penceresi hakkında bilgiler alabilirsiniz. x, 0 ile 8 arasında bir sayı olabilir. WINDOW(0), seçili çıktı penceresinin pencere-no'sunu verir. o anda aktif çıktı penceresi yoksa, işlem mouse ile son kliklenen pencere için yapılır. WINDOW(1), o anki çıktı penceresininki bu AMIGA BASIC'in tüm ekran çıkışlarını gönderdiği penceredir- pencere-no'sunu verir. WINDOW(2), o anki çıktı penceresinin pixel olarak genişliğini verir. WINDOW(3), o anki çıktı penceresinin pixel olarak yüksekliğini verir. WINDOW(4), o anki çıktı penceresindeki son yerleşimin pixel olarak x- koordinatını verir. Bu nokta, çıktı kursorunun