QBASIC Köşesi

Uzun süredir dergimizde QBASIC programlarına yer vermiyorduk. Ama fanatik QBASIC’çi okurlarımızın ısrarlarını kıramadık ve bu ay dergimize bir QBASIC köşesi eklemeye karar verdik. Umarız QBASIC kurtları hazırladığımız bu köşeden memnun kalırlar. Köşemizde neler yok ki. Bir müzik kutusu, metin dönüştürme programı, grafik programları... Haydi bilgisayarın başına!

QBASIC ile basit bir müzik kutusu (MUZIK.BAS)

İlk programınız güzel ve basit bir müzik kutusu. Programınız ona parametre olarak verilen müzik dosyalarını açıp içeriğini çalabilir. Maalesef QBASIC 1.0’ın komut satırından parametre almak gibi bir özelliği olmadığından QBASIC 1.0 kullananlar, program içindeki COMMAND$ değişkenini çalmak istedikleri dosya ismiyle değiştirmelidirler. QBASIC 4.5 yada daha üzeri sürümleri kullananlar ise programlarını derledikten sonra istedikleri müzik dosyalarını programa parametre olarak verip çaldırabilirler. Şunun gibi
C:\>MUZIK BACH.SNG
Ya da istedikleri dosyanın ismini RUN menüsünden Modify COMMAND$ seçeneğine girerek belirleyebilirler.
Müzik kutunuz sadece QBASIC’te PLAY komutuyla çaldırdığınız değişkenleri tanıyabilir. Yani yaratacağınız müzik dosyaları bu formatta olmalıdır. Bu formatla oluşturulmuş ve aşağıda listelenmiş iki dosyayı bir metin editörüyle yazıp kaydedin ve müzik kutunuzla çaldırın... Oldukça hoşunuza gidecektir.
CLS
ON ERROR GOTO hata    		'Programda herhangi bir hata ortaya çıkarsa "hata" adlı etikete git.
PRINT "Çalmak istediğiniz müzik dosyasını programa parametre olarak veriniz. J"
Dosya$ = COMMAND$   'Programa verilen parametre Dosya$ değişkenine atanıyor.
OPEN Dosya$ FOR INPUT AS #1  	'Dosyayı sadece okumak için aç
PRINT "Çalınıyor...";
DO WHILE NOT EOF(1)          	'Dosya sonuna kadar oku.
LINE INPUT #1, sng$         	'Dosyadan tam bir satır oku.
IF LEFT$(sng$, 1) = ";" THEN GOTO atla  'Eğer satırın ilk karakteri ";" 'ise o satırı atla (Açıklamalar yazabilirsiniz!)
PLAY "MB"			'Satırın arka planda çalınmasını sağla.
PLAY sng$			'Satırı çal
atla:
LOOP
CLOSE #1
END
hata:
SOUND 80, 1: PRINT "Hata kodu:"; ERR 	'Hata kodunu ver.
IF ERR = 52 THEN PRINT "Dosya adı verilmemiş."
IF ERR = 53 THEN PRINT "Verilen dosya bulunamadı."
RESUME hata2
hata2:
END
İşte örnek şarkılarınız. Bu şarkıları bir metin editörüyle yazıp sonra istediğiniz herhangi bir isimle kaydedin.

;Minuet in G Major
;Johann Sebastian Bach
;
T120O4L4MLDL8O3GABO4CL4DMSO3GGMLO4EL8CDEF#L4GMSO3GG
O4CL8DCO3BAL4BO4L8CO3BAGL4F#L8GABGL4BL2A
T120O4L4DL8O3GABO4CL4DMSO3GGMLO4EL8CDEF#L4GMSO3GG
O4CL8DCO3BAL4BO4L8CO3BAGL4AL8BAGF#L1G
T120O4L4MLDL8O3GABO4CL4DMSO3GGMLO4EL8CDEF#L4GMSO3GG
O4CL8DCO3BAL4BO4L8CO3BAGL4F#L8GABGL4BL2A
T120O4L4DL8O3GABO4CL4DMSO3GGMLO4EL8CDEF#L4GMSO3GG
O4CL8DCO3BAL4BO4L8CO3BAGL4AL8BAGF#L1G
O4L4BL8GABGL4AL8DEF#DL4GL8EF#GDL4C#L8O3BO4C#L4O3A
L8ABO4C#DEF#L4MSGF#EMLF#O3MSAO4C#MLL1D
L4DO3L8GF#L4GO4EL8O3GF#L4GO4MSDCO3BMLL8AGF#GL4A
L8DEF#GABMSL4O4CO3BAMLL8BO4DO3MSL4GF#MLL1G
O4L4BL8GABGL4AL8DEF#DL4GL8EF#GDL4C#L8O3BO4C#L4O3A
L8ABO4C#DEF#L4MSGF#EMLF#O3MSAO4C#MLL1D
L4DO3L8GF#L4GO4EL8O3GF#L4GO4MSDCO3BMLL8AGF#GL4A
L8DEF#GABMSL4O4CO3BAMLL8BO4DO3MSL4GF#MLL1G


;Ramblin' Wreck
;
T200O3
E4D8C4C8C4D8E4E8E8D8C8D8E8D8C4O2B8O3MLC2C8MN
D8e4e8e4f8g4g8g4g8g4D8d4e8MLd2d8MN
G8A4F8A4F8A8O4MLC4C8MNO3B8A8G4E8G4E8G2
E4D8C4C8C4D8E4E8E8D8C8D8E8D8C4O2B8O3MLC2C8MN
T250O3mf

Renkli Yelpaze

İkinci programımız ise ekrana güzel ve 15 renkli bir yelpaze çizer. Programın kaynak kodlarını değiştirerek çok değişik görüntükler elde edebilirsiniz. DRAW komutunun parametrelerini ise QBASIC’in yardım komutunu kullanarak öğrenebilirsiniz.
SCREEN 9: COLOR 8, 0: CLS
PRINT "15 Renkli güzel bir yelpaze"
FOR I = 0 TO 35
CLR = I MOD 15 + 1
VC$ = VARPTR$(CLR)
FOR J = 0 TO 9
ACI = 10 * I + J
VA$ = VARPTR$(ACI)
DRAW "C=" + VC$ + "TA=" + VA$ + "NR159 "
NEXT: NEXT

Toplar...

Aşağıdaki program 256 gri ton kullanarak ekrana baloncuklar çizer. Kodlar çok kısa olmasına rağmen ekrana oldukça güzel şekiller çiziyor.
SCREEN 13
DO
x = RND * 320: y = RND * 240: C = 31
R = RND * 25 + 10: CS = C / R / 2.3
FOR I = 1 TO R: CIRCLE (x, y), I, C
FOR a = 1 TO 10: NEXT a
CIRCLE (x, y - 1), I, C
C = C - CS
NEXT
LOOP UNTIL INKEY$ <> ""

Zig zag’lar

Bu program ekranda rastgele noktalar belirleyip en son bulunduğu noktadan seçilen son noktaya bir çizgi çekiyor, böylece zig zag’lar çiziyormuş gibi bir izlenim veriyor.
SCREEN 12
DO
xat = INT(RND * 640): yat = INT(RND * 480)  ‘ Rastgele bir nokta belirle
xat = x2at: yat = y2at			
FOR a = 1 TO 1000: NEXT a		‘Biraz bekle
COLOR INT(RND * 15)			‘Bir renk seç
x2at = INT(RND * 640): y2at = INT(RND * 480)
LINE (xat, yat)-(x2at, y2at)		‘Çizgiyi çiz
LOOP UNTIL INKEY$ <  >   ""		‘ Bir tuşa basılana kadar devam et

Windows Write’dan salt metine...

Size son olarak kullanışlı bir metin çeviricisi veriyoruz... Programın yaptığı Windows ortamında yazılan metinlerin DOS ortamına aktarılması. Bildiğiniz gibi Türkçe karakterler Windows’ta ayrı DOS’ta ayrı karakter kodları taşıyorlar. Bu yüzden DOS programları ile çalışırken Windows altında yazılmış olan metinleri açtığınızda ekranda abuk karakterler görüyorsunuz. Programınız her ne kadar Windows’tan DOS’a transfer yapmak için yapıldıysa da CASE satırlarındaki değerleri değiştirerek bunun tam tersini sağlayabilirsiniz. CASE satırları ayrıca salt metin haline dönüştürülen metin içindeki “garip” karakterleri de temizlememize yarıyor. Programınız içeriğinde resim dosyaları ve bunun gibi OLE eklentileri barındıran Write dosyalarını başarılı olarak çeviremeyebilir. Bu yüzden Write dosyalarını çevirmeden bu gibi eklentileri Write dosyasından çıkartmalısınız.

' MS-Windows Write dosyalarını MS-DOS Text formatına çevirir.
CLS : INPUT "MS-DOS Textine çevrilecek Write dosyası: ", wr$
INPUT "Oluşturulacak yeni dosyanın ismi: ", tx$
OPEN wr$ FOR INPUT AS #1	‘Windows dosyasını okumak için,
OPEN tx$ FOR OUTPUT AS #2	‘Metin dosyasını yazmak için aç
DO WHILE NOT EOF(1)		‘Dosyanın sonuna kadar devam et
s$ = INPUT$(1, #1)		‘Dosyadan bir karakter oku
IF s$ >  CHR$(0) AND s$ <  CHR$(10) THEN s$ = "": GOTO yapildi
SELECT CASE s$
CASE "²": s$ = "ı": GOTO yapildi		‘Karakteri değiştir ve “yapildi”ya dallan
CASE "³": s$ = "ü": GOTO yapildi		
CASE "÷": s$ = "ö": GOTO yapildi
CASE CHR$(254): s$ = "ş": GOTO yapildi
CASE CHR$(231): s$ = "ç": GOTO yapildi
CASE CHR$(221): s$ = "İ": GOTO yapildi
CASE CHR$(214): s$ = "Ö": GOTO yapildi
CASE CHR$(240): s$ = "ğ": GOTO yapildi
CASE CHR$(222): s$ = "Ş": GOTO yapildi
CASE CHR$(220): s$ = "Ü": GOTO yapildi
CASE CHR$(208): s$ = "Ğ": GOTO yapildi
CASE CHR$(199): s$ = "Ç": GOTO yapildi
END SELECT
IF s$ >  CHR$(126) AND s$ <  CHR$(255) THEN s$ = ""
IF s$ >  CHR$(13) AND s$ <  CHR$(26) THEN s$ = ""
IF s$ >  CHR$(10) AND s$ <  CHR$(13) THEN s$ = ""
yapildi:
PRINT #2, s$;		‘Dosyaya bir karakter yaz
LOOP
CLOSE
PRINT "Dosyanız oluşturuldu."
END