Forumteams.com ForumTeams M.

Konu

#11
Koşullu seçimler

"switch" ve "case"

Kod:
system("chcp 65001")

input "1 ve 5 arası bir numara girin : " numara

switch numara
  case 1
      print "Elma"
      break
  case 2
      print "Armut"
      break
  case 3
      print "Ayva"
      break
  case 4
      print "Erik"
      break
  case 5
      print "Muz"
      break
  default
      print numara," seçenekler arasında yok"
end switch

"switch" sizden (önceden) alınan bir değeri "case" ile saklanan verilere yönlendiriyor.
"case" seçenekleri aşılırsa "default" ile belirlenen veriye yönlendiriyor.
Blok (Kalıp) "end switch" ile kapanıyor.
"break" kullanılmadığı durumda program ilk seçim ve tüm arkasından gelenleri çalıştırıyor.

"if","elsif","else"
Kod:
system("chcp 65001")

for numara = 1 to 15
    if numara = 5 then
        print "Beş"
    elsif numara = 10 then
        print "On"
    elsif numara = 15 then
        print "Onbeş"
    else
        print numara
    endif
next numara

"if" ile belirlenen koşul oluşmuşsa belirlenen işlem gerçekleşir. Aksi durumda "if" bloğu atlanır
ve programa devam edilir.
"elsif" ek koşullar sunma olanağı tanır.
"else" istenilen hiç bir koşul gerçekleşmemiş olma durumunda bir varsayılan çıkış yolu gösterir.
"if" dışındaki koşullalar opsionel (isteğe bağlı).
"endif" bloğu sonlandırır.

"if" kalıbı genelde seçim öncesi yazılır. Önce kuşulların belirlenmesi ve sonra seçimin gelmesi
duruma ve işleyişe göre daha mantıklı.
#12
Bir kardan adam çizelim.

[Resim: rbqcr35.png]

Kodları aşağıdaki gibi.

Kod:
open window 800,600
backcolor 0,200,200
clear window

// Karlı zemin
color 200,200,200
fill rectangle 0,400, 800,450
color 210,210,210
fill rectangle 0,450, 800,500
color 220,220,220
fill rectangle 0,500, 800,600

// Kardan adam

// Alt gövde
color 225,225,225
fill circle 400,400,100
color 230,230,230
fill circle 400,400,85
color 235,235,235
fill circle 400,400,60

// Üst gövde
color 225,225,225
fill circle 400,280,70
color 230,230,230
fill circle 400,280,55
color 235,235,235
fill circle 400,280,40

// Kafa
color 225,225,225
fill circle 400,180,60
color 230,230,230
fill circle 400,180,55
color 235,235,235
fill circle 400,180,45

// Sol kol
color 225,225,225
fill circle 330,250,30
color 230,230,230
fill circle 330,250,25
color 235,235,235
fill circle 330,250,20

// Sağ kol
color 225,225,225
fill circle 470,250,30
color 230,230,230
fill circle 470,250,25
color 235,235,235
fill circle 470,250,20

// Şapka
color 50,50,50
fill triangle 300,160, 380,120, 500,130
fill triangle 350,140, 370,70, 420,80
fill triangle 445,130, 366,80, 415,70
fill rectangle 370,100, 430,130             rem Yama
// Band
color 60,30,0
fill rectangle 353,118, 442,129

// Gözler
color 0,0,0
fill rectangle 380,160, 385,165
fill rectangle 420,160, 425,165

// Ağız
fill rectangle 370,200, 375,205
fill rectangle 430,200, 435,205
fill rectangle 390,210, 395,215
fill rectangle 410,210, 415,215

// Düğmeler
fill rectangle 400,260, 405,265
fill rectangle 400,290, 405,295

fill rectangle 400,370, 405,375
fill rectangle 400,400, 405,405

// Sol parmaklar
for parmaklar = 10 to 30 step 10
    for parmak = 1 to 5
        line 300,parmaklar+210+parmak, 315,parmaklar+220+parmak
    next parmak
next parmaklar

// Sağ parmaklar
for parmaklar = 10 to 30 step 10
    for parmak = 1 to 5
        line 485,parmaklar+220+parmak, 500,parmaklar+210+parmak
    next parmak
next parmaklar

// Burun
color 100,0,0
fill triangle 400,175, 400, 190, 455,185

#13
GOTO ve GOSUB yapıları

Geleneksel Basic programları üst'ten aşağı bir şekilde bir liste halinde işlenir ve çalıştırılır.
"goto" yapısı bu işleyiş içinde farklı konuma atlamaya olanak tanır.

Kod:
system("chcp 65001")

input "Lütfen adını yaz : " isim$

if len(isim$) < 6 then
    goto kisa
else
    goto uzun
endif

label kisa
    print "Adın kısaymış."
end

label uzun
    print "Adın uzunmuş."
end

Bu örneğimizde kod işleyişi "label" ile tanımlanmış iki bölümden birine yönlendiriyor.
Bu yönlendirme için ölçek olarak kullanılan "len()" fonksiyonu, Yabasic'te bilinen bir dizi
metin işleme fonksiyonlarından birisi. "len()" bir karakter dizisi içinde bulunan bir karakterlerin
boyutunu ölçer. Bu örnekte, karakter veya harf sayısı altı'dan az olan isimler için "kisa" isimli
bölüme yönlendirilir.

"goto" ile yönlendirilen kod kümeleri bir "end" ile sonlandırıldılar. Aynı zamanda "end" tüm programı sonlandırıyor.

"goto"nun  belli bir yazılış düzeni yok. Tanımlanan her yere atlayabilir. Düzeni sağlamak programcıya
düşer.

Kardeşi "gosub" bir düzene sahip ve sık kullanılan aynı kod düzenini tekrarlamayı önlemeyi amaçlar.
Bir kere yazarsınız ve programın farklı bölümlerinden her gereksinim duyduğunuzda  "gosub"
sayesinde tekrar erişirsiniz.

Kod:
system("chcp 65001")

input "Ön adınız : " isim$
gosub denetle

input "Soy adınız : " isim$
gosub denetle

print "Teşekkür ederiz."
end

label denetle
    print "Adınız ",len(isim$)," harften oluşuyor."
return

Bu örneğimizde iki farklı giriş sonunda tekrar aynı "label"a erişilyor ve farklı sonuçlar alınıyor.
"gosub" ile yönlendirilen bölümler "return" ile sonlandırılır. "return" bir geri dönüş komutu.
"label" içindeki kodlar işlemi gerçekleştirdiklerinde, tekrar ilk çağrının yapıldığı konumun bir satır
altına dönülür ve program kaldığı yerden devam eder.

Programımızın bitişine bir "end" eklemeyi unutursak, program "label"lar bölümüne doğru çalışmaya devam eder ve "label"da değil, ilk "return"de hata verir. Çünkü bu durumda geri dönülecek nokta
belirsiz.
#14
Yabasic'e kendi kodlarımızı ekleyelim.

Kendi Fonksiyonlarımızı Yazalım

Yabasic'e kendi programımız dahilinde kendi yazdığımız fonksiyonlar ekleyebiliriz.
İlk örneğimiz, girilen bir kelimeyi tersten okuyabilen bir fonksiyon olsun.

Kod:
system("chcp 65001")

input "Bir kelime gir : " kelime$

print kelime$," tersten okunuşu ";
terstenyaz$(kelime$)
print ""

sub terstenyaz$(oku$)   
    for say=len(oku$) to 0 step -1
        terstenoku$=left$(oku$, say)
        print right$(terstenoku$, 1);
    next say
end sub

 Fonksiyonumuz programın alt bölümünde.
"sub" ile başlar ve "end sub" ile sonlanır. Fonksiyonun ismi "terstenyaz$(oku$)"
Fonksiyon ve değişken yada "label" isimlerinde Türkçe karakterler kullanmayalım.
Foksiyonumuzun parantezler içinde bir parametresi var. Fonsiyonumuzun adının
sonunda ve parantezler içindeki değişken sonunda ekli olan "$" işareti
Fonksiyonumuzun karakter dizini türünde veri işleyebildiğini gösterir. Kısaca metin
işliyor. Kalıp içindeki işlemleri ise bir "for" döngüsü yürütüyor.
Kullanıcıdan alınan bir kelime uzunluğu kadar uznluktan geri sayılıyor ve "left$()"
fonksiyonu tarafından sol'dan başlayarak okutuluyor. "right$() fonksiyonu en sağdan
ilk (sayımdan kalan) harfi okuyor ve "print" kodumuz bu harfi yazdırıyor. Satırın sonuna
eklenen noktalı virgül sayasinde okunan karakterler aşağı doğru değil, yan yana
yazılıyor.

Fonksiyonumuzu çalıştırmak için Fonksiyon_Adı(Değişken) şeklinde programımızın
istediğimiz yerinde yazıyoruz. Fonsiyon bölümünden önceki son boş "print" kodumuz
görsel amaçlı eklenmiş. İmleç sonu çıktı ile aynı satırda çıkmaması için.

Bir Fonsiyon daha yazalım. Bu sefer grafik ortam için olsun.  Gülümseme 


Kod:
open window 600,600

color 255,0,0
baklava (100,200, 400,500)

color 0,0,255
text 150,100,"Bu bir baklava dilimi :)","swiss24"

sub baklava(x1,y1, x2,y2)
  line (x1+((x2/2)-(x1/2))),y1, x2,((y2/2)+(y1/2))
  line x2,((y2/2)+(y1/2)), (x1+((x2/2)-(x1/2))),y2
  line (x1+((x2/2)-(x1/2))),y2, x1,((y2/2)+(y1/2))
  line x1,((y2/2)+(y1/2)), (x1+((x2/2)-(x1/2))),y1
end sub

Bu fonksiyonumuz grafik ekrana bir baklava (çapraz kare) çizdiriyor.
Fonksiyonumuz bizden dört veri alıyor.  "rectangle" fonksiyonunda olduğu gibi
sol üst köşe ve sağ alt köşe için piksel alan kodlarını alıyor ve o alan içine baklavamızı
çiziyor. Bu veriler her bir (dürt) çizim için, her farklı veri girişinde orantılı bir ve birleşik
çizimler verebilmek için, veriler birbirleri ile bölünüyor, çıkarılıyor, toplanıyor.
Fonksiyonumuzun göze karışık gelmesinin sebebi, bu işlemin rakamlar ile değil, o
rakamları temsil eden değişkenlerle yapılmış olması. Rakamlar değişebilir.

İsterseniz farklı rakamlar girerek fonksiyonu deneyebilirsiniz.
#15
Veri işleme

Yabasic veri işleme için Basic'te geleneksel olan bir yöntem kullanıyor. Verilerimiz "data" olarak adlandırılan
satırlarda saklanır. Ve "read" komutu ile okunur. "read" her zaman aranan veri türünde bulduğu ilk veriyi okur.
Veya bir döngü içinde kullanıldığında sıraya göre okur. Verilerin sırası ve türü belli olmak zorunda. Belli bir veri
arıyorsak, tüm verileri okutup bir diziye kaydetmeliyiz ve dizi içinden aradığımız veriyi seçmeliyiz.

Kod:
system("chcp 65001")

dim isim$(12)
dim yas(12)
dim sehir$(12)

for isimler = 1 to 12
    read isim$(isimler)
next isimler

for yaslar = 1 to 12
    read yas(yaslar)
next yaslar

for sehirler = 1 to 12
    read sehir$(sehirler)
next sehirler

print isim$(11)," hanım ",yas(11)," yaşında ve yaşadığı şehir ",sehir$(11),"."

data "Aysel","Hatice","Nuray","Semiha","Ebru","Nurcan"
data "Nermin", "Fatmanur", "Esmanur", "Serpil", "Sevinç", "Ayşe"
data 18, 22, 33, 28, 26, 64
data 23, 54, 34, 21, 45, 17
data "Sivas", "Ankara", "Trabzon", "Samsun", "Antalya","İzmir"
data "İstanbul", "Erzurum","Tokat","Manisa","Hatay","Mersin"

"data" satırlar programın sonunda bulunur ve türleri belli olmalı. Karakter dizileri (metin/harf) çift tırnaklar
içinde ve rakamlar tırnaksız olarak ve bir sonraki veriden virgül ile ayrılarak yazılır. "dim" ile atanan diziler
ve okutulacak veri ve döngü ile saydırlan değerler simetrik olmalı. Aksi durumda hata bildirimi ile program sonlanır.

Varsayalım, bu bir çüpçatan uygulaması ve aranan eşlerin isimleri, yaşları ve yaşadıkları şehirler sıra sayısına göre
yazılmış olsunlar. İsterseniz kendi tanıdığınız insanları ve onları doğru yaş ve memleketlerini yazın. Bir hikâyesi olan
işlemler daha kolay akılda kalır.
#16
Dosya işlemleri

Yabasic'te bir dosya üzerinde bir işley yapabilmek için önce o dosya yabasic ile açılmalı.
Dosya açılırken hangi işlem için açıldığı belirtilmeli. Belirtilen işlen için yabasic dosya üzerinde yetki vermiş oluyoruz.
Ve açılan dosyaya bir işlem numarası verilmeli. Çünkü aynı anda bir den fazla dosyayı açabiliriz.

"open" komutu ile ve dosya adı vererek bir dosya açabiliriz. Dosyalar üzerinde üç farklı işlem yapabiliriz.
Bu işlemler "okumak", "yazmak" veya dosyaya "eklemek" oluyor. Yazmak için açtığımız bir dosya var değilse,
yabasic o isimli bir dosya oluşturur. Diğer işlemlerde aranan isimli dosya eksikse, yabasic hata vererek işlemi sonlandırır.

İlk olarak yazmak amaçlı bir dosya açalım.
Kod:
open "deneme.txt" for writing as #1
print #1 "Merhaba"
print #1 "Bugün hava çok güzel"
close #1

İlk satır ile dosya açılır.
"open" ile "deneme.txt" isimli bir dosya açtık.  "writing" ile yabasic'e bu yeni dosyamıza yazma izni verdik. Ve dosyamıza
"#1" bir işleme numarası ekledik. Bundan sonraki işlemlerde dosyanın işleme numarası dosya adı gibi kullanılır.

İkinci ve üçüncü satırlarda dosyamıza, dosya numarası belirtilerek iki ayrı satır ekledik.

Son satırda "close" ile dosyamızı kapattık. Dosya kapatılana kadar işlemler hafızada saklı kalır ve dosya kapandıktan sonra
dosyaya işlenirler. Şimdi dosyamızı açıp okuyabiliriz. ".txt" uzantılı dosyalar her sistemde her editör ile açılıp okunabilir.

Şimdi "deneme.txt" isimli dosyamızı yabasic ile açıp okuyalım.
Kod:
open "deneme.txt" for reading as #2
input #2 a$
line input #2 b$
print a$
print b$
close #2

Bu sefer dosyamızı "reading" ile okuma yetkisi ile açtık ve işleme sayısı olarak "#2" verdik. Satırları okumak için "input"
kullanıyoruz ve işlem numarasına bir de karakter dizisi veri türünde bir değişken ekliyoruz ve okunan veri o değişkene
atanayor. Sonra o değişkeni "print" komutu ile konsola yazdırıyoruz. Her satır için ayrı bir değişken.
İkinci satırımızda uzun bir metin yazdığından, o satırı okumak için "line input" kullanıyoruz. "input" ilk boşlukta okumayı
bırakıyor. Ve yine "close" ve işlem numarası ile dosyayı kapatıyoruz.

Varolan bir dosyayı yazma yetkisi ile açtığımızda, tüm önceki veriler silinir ve son yazılanlar kaydedilir.

Varolan bir dosyaya ekleme yapmak istediğimizde, ekleme yetkisi ile açmalıyız.
Kod:
open #3, "deneme.txt", "a"
print #3 "Benim adım Orhan Gencebay"
print #3 "Memleketim Samsum"
print #3 "Mesleğim müzisyen."
close #3

Bu örnekte "deneme.txt" isimli dosyamızı "a" (appending) ile "ekleme" yetkisi ile açtık ve üç yeni satır ekledik.

Dosyamızı tekrar yabasic ile okuyalım.
Kod:
open "deneme.txt" for reading as #4

while !eof(#4)
    line input #4 oku$
    print oku$
wend

close #4

Bu örnekte okuma ve konsola yazdırma işlemini bir "while" döngüsü içinden apıyoruz. Okuyacağımız dosyanın satır
sayısını bilmiyorsak "eof()" fonksiyonunu kullanabiliriz. "!" ile birlikte"eof()" okunan dosyanın son satırı olmadığı süre
anlamına gelir. (eof()=End Of File)
Parantezler içine okunan dosyanın işlem numarasını eklemeyi unutmuyoruz.
#17
Hatalı işlemler ile başa çıkmak

Biz bir hatalı işlem yaptığımızda, yabasic hata bildirir ve işlemi sonlandırır. bu bildirimler yapılan hatalı işlem
hakkında bize bilgi verir ve hata bildiriminden hatamızın nedenini çözmeye çalışırız. Bu hata bildirimlerini
anlayabilmek ve yazılış şekline alışmak zaman alır.

Kullanıcılar da hatalı işlemler yapabilir. Biz de onlar için hata bildirimi ekleyebiliriz. Veya onların anlayamayacağı
olası bir durumu açıklayıcı ve tabi Türkçe olarak yazabiliriz.

"error" komutu bize kendi hata bildirimimizi eklememise olanak tanır. Ve ardından programı durdurur.
Kod:
system("chcp 65001")

print "Bu program sadece 5 ve 2 sayılarını giriş kabul eder."
input "2 veya 5 gir : " sayi


if sayi = 5 then
    print "Beş girdiniz."
elsif sayi = 2 then
    print "İki girdiniz."
else
    error "Yanlış girdiniz"
endif

Bu örneğimizde "if" koşulları içinde bir "error" bildirimi ekledik. Bu bildirim olmadığı durumda program sonuçsuz kapanır.
Bildiri, kullanıcıya neden bir sonuç alamadığını açıklar.

Her hatalı işlem sonucu programı yeniden başlatmak biraz can sıkıcı olabilir. Buna kendimiz bir çözüm üretebiliriz.
Kod:
system("chcp 65001")

print "Bu program sadece 5 ve 2 sayılarını giriş kabul eder."
label yeniden
input "2 veya 5 gir : " sayi


if sayi = 5 then
    print "Beş girdiniz."
elsif sayi = 2 then
    print "İki girdiniz."
else
    goto hata
endif

end

label hata
    print "Yanlış girdiniz, tekrar deneyin"
    goto yeniden

Burada "error" kullanmadan kendi çözümümüzü ürettik ve program bize önce bir bildiri verip, sonra başa dönüyor.
Bunu da bizden istenen doğru verilerden birini girene kadar tekrarlıyor.
#18
MODÜLER PROGRAMLAMA

Bazı işlemlerimizi başka programlarımızda da tekrar kullanmayı düşünebiliriz. Bu işlemlerimizi bir
dosyaya kayıt edip sonra kopyala yapıştır yaparak yeni programımıza ekleyebiliriz.

Veya

Doğrudan diğer dosyadan da çalıştırabiliriz.

Bunu yapabilmek için "export" ve "import" komutlarından yaralanabiliriz. Ortak amaçları olan işlemlerimizi
fonsiyon olarak bir dosyaya "export" komutu ile tanımlayarak yazarsak, bütün yabasic programlarımızdan
kullanabileceğimiz bir kitaplık oluşturmuş oluruz. Kitaplığımızdaki fonksiyonları programımız içinden
"import" komutu ile, sanki programımız içinde yazılı gibi çalıştırabiliriz.

Bir Renk kitaplığı yazalım ve adını "renk.yab" koyalım

Kod:
# program : renk.yab

docu Grafik ekran için hazır renk secenekleri.
docu Secebileceginiz renkler :
docu kirmizi, mavi, lacivert, sari, yesil, siyah, beyaz
docu pembe, mor, kahverengi, turunju, gri.

export sub kirmizi()
    color 255,0,0
    backcolor 255,0,0
end sub

export sub mavi()
    color 0,0,255
    backcolor 0,0,255
end sub

export sub lacivert()
    color 0,0,127
    backcolor 0,0,127
end sub

export sub sari()
    color 255,255,0
    backcolor 255,255,0
end sub

export sub yesil()
    color 0,255,0
    backcolor 0,255,0
end sub

export sub siyah()
    color 0,0,0
    backcolor 0,0,0
end sub

export sub pembe()
    color 255,0,255
    backcolor 255,0,255
end sub

export sub beyaz()
    color 255,255,255
    backcolor 255,255,255
end sub

export sub mor()
    color 127,0,127
    backcolor 127,0,127
end sub

export sub kahverengi()
    color 127,64,0
    backcolor 127,64,0
end sub

export sub turunju()
    color 255,127,0
    backcolor 255,127,0
end sub

export sub gri()
    color 127,127,127
    backcolor 127,127,127
end sub

"renk.yab" isimli kitaplığımız tek başına çalıştırdığımızda hiç bir işlem yapmıyor.
İçerdiği her bir fonksiyon hem "color" komutu için, hem "backcolor" komutu için bir sabit renk tanımı
içeriyor.

Şimdi  bu fonksiyonları nasıl kullanabileceğimizi görelim.

Kod:
import renk

open window 800,600
lacivert()
clear window

turunju()
text 100,100,"Merhaba","swiss24"

"import renk" satırı ile kitaplık dosyamızı içe aktardık. ".yab" uzantısını kullanmadık, ancak dosya isminde
var olmalı. Yabasic başka dosya uzantılarını tanımaz. Kitaplığımızdaki fonksiyonları kullanırken
sadece fonksiyon ismi giriyoruz.  Fonksiyonlarımızdan birinde bir hata varsa, bu bize programımızda varmış
gibi yansır. Çünkü kullanmadığımız fonksiyonlar da aslında programımız içinde mevcut. Sanki
tek bir dosyada yazılmışlar gibi.

Bu şekilde, yeterince kitaplıklarımız var olduğunda, daha az kod yazarak daha iyi başarılar elde
edebiliriz. Ve kodlarımızı da daha anlaşılabilir yazabiliriz.
Son Düzenleme: 27-03-2022 Saat 13:03, Düzenleyen: Kurgu.
#19
Animasyon

Bir de animasyon örneği ekleyeyim. Hareketli nesnelerin mantığını çözelim  Gülümseme

Kod:
open window 800,600

color 255,0,255

label baslat

for kayar = 50 to 750 step 5
    fill circle kayar, 300, 50
    sleep 0.1
    clear window
next kayar

for kayar = 750 to 50 step -5
    fill circle kayar, 300, 50
    sleep 0.1
    clear window
next kayar

goto baslat

Nesnemiz bir pembe küre ve sağa ve sola hareket ediyor. Bunun için iki "for" döngüsü kullanıyoruz. Her ilerleme
5 piksel ileri veya 5 piksel geri şeklinde oluyor. Hareket mesafesi ekran boyutuna göre hesaplandı ve küre soldan
veya sağdan ekran dışına çıkmıyor. "sleep" komutu ile bir geçikme yaratarak göz bozucu titreşimleri engellemiş olduk.
"clear window" ile tüm ekranı temizleyerek, kürenin önceki konumda görünmesini engelliyoruz. Aksi durumda her
yeni çizim bir öncekinin bir köşesine olur ve bir boyama efekti yaratır. "goto" ile de işlemi sürekli tekrarlatıyoruz.

Film kareleri nasıl sıralandığını biliyorsanız, animasyonlar da o şekilde, resim karelerini ard arda sıralayarak oluşur.
Prensip tamamen aynı. Siz bu efekti kodlayarak yansıtmalısınız. Kafanızdaki düşünceyi koda dökmelisiniz.

Animasyonlara kullanıcı etkileşimi eklediğiniz zaman, bu olay video oyunlarına doğru evrilir.  Gülümseme  Gülümseme  Gülümseme

Not: İlerleme adımını ("step" komutundaki piksel sayısını) veya bekleme ("sleep") süresini değiştirerek hızı
düşürebilir veya artırabiliriz.
Son Düzenleme: 27-03-2022 Saat 17:28, Düzenleyen: Kurgu.
#20
Daha önce yazmış olduğum bir Animasyon

Linkleri Görebilmeniz İçin Sitemize Ücretsiz Olarak Üye Olmanız veya Giriş Yapmanız Gerekmektedir.
[/url]
Linkleri Görebilmeniz İçin Sitemize Ücretsiz Olarak
Üye Olmanız veya Giriş Yapmanız Gerekmektedir.
Linkleri Görebilmeniz İçin Sitemize Ücretsiz Olarak Üye Olmanız veya Giriş Yapmanız Gerekmektedir.
Linkleri Görebilmeniz İçin Sitemize Ücretsiz Olarak Üye Olmanız veya Giriş Yapmanız Gerekmektedir.
Kod:
#!/usr/bin env yabasic
# Yabasic sürüm 2.78.0
# Yazar : K110
# Dosya : Nemo.yab
# Olay  : Akvaryum Animasyonu
# Lisans: Artistic
# Önsöz : Tüm, bu proje çalışmalarım esnasında beni destekleyen ve bana anlayış
#         gösteren, aileme, kedimize, köpeğimize, teşekkürlerimi sunarım.


// Akvaryum ---------------------------------------------------------------------

open window 960,600

backcolor 170,160,250
clear window

// Akvaryum zemini --------------------------------------------------------------

   color 120,80,0
   fill rectangle 0,530,960,600
   for x = 0 to 960 step 5+ran(10)
     fill circle x,530,ran(5)
   next x
   color 70,70,70
   for x = 10 to 950 step 20+ran(20)
     fill circle x,540,5+ran(5)
   next x
   color 130,90,0
   fill rectangle 0,540,960,600
   for x = 0 to 960 step 5+ran(12)
     fill circle x,540,ran(6)
   next x
   color 90,90,90
   for x = 10 to 950 step 30+ran(20)
     fill circle x,555,6+ran(5)
   next x
   color 140,100,0
   fill rectangle 0,555,960,600
   for x = 0 to 960 step 5+ran(15)
     fill circle x,555,ran(7)
   next x
   color 100,100,100
   for x = 10 to 950 step 50+ran(30)
     fill circle x,580,10+ran(10)
   next x
   color 110,70,0
   fill rectangle 0,570,960,600
   for x = 0 to 960 step 10+ran(20)
     fill circle x,570,ran(8)
   next x
   color 100,60,0
   for x = 0 to 960 step 20+ran(10)
     fill circle x,580+ran15,ran(8)
   next x
  
// Değişkenler ------------------- Değişkenler -------------------- Değişkenler

Oynat=0
y=0
x=100
my=0
mx=0
c=0
d=0
yy=700
xx=0
cx=0
cy=0
ny=840
n=0
oran=0.5
buran=0.5
suran=0.5
neren=0.5
kopuk1=520

// Ana Program ****************** Ana Program ********************** Ana Program

while(Oynat <> -100)
  Nimik()
  Nemo()
  Nemissa()
  Nimita()
  Kopuk()
  sleep 0.05
  clear fill rectangle 0,0,960,525
wend


// Nemo -------------- Nemo ---------------- Nemo ------------------------ Nemo

Sub Nemo()

   Son=ran(300)
   Don=ran(50)
   goto Nemo1
  
Label Ara2
   x=c
   y=d
   Son=ran(300)
   Don=ran(50)
   goto Nemo1
  
Label Nemo1

   if x > 500+Son then
     goto Ara1
   endif
  
   if y > 200+Don then
     oran = -0.5
   elsif y < -50
     oran = 0.5
   endif
   y=y+oran
   x=x+2
  
   color 250,250,0
   fill triangle x+30,y+90, x+50,y+70, x+90,y+110
   fill triangle x+30,y+110, x+50,y+130, x+90,y+90
   fill triangle x+12,y+100, x+30,y+100, x+0,y+65
   fill triangle x+12,y+100, x+30,y+100, x+0,y+135
   color 210,210,0
   fill triangle x+12,y+100, x+30,y+100, x+12,y+83
   fill triangle x+12,y+100, x+30,y+100, x+12,y+117
   color 25,25,0
   fill triangle x+40,y+82, x+40,y+118, x+18,y+100
   fill circle x+40,y+100,15
   color 230,230,0
   fill circle x+50,y+100,20
   color 25,25,0
   fill circle x+60,y+100,25
   color 50,50,0
   fill circle x+50,y+100,18
   color 230,230,0
   fill circle x+70,y+100,25
   color 250,250,0
   fill circle x+60,y+100,18
   color 25,25,0
   fill circle x+80,y+100,20
   color 50,50,0
   fill circle x+70,y+100,15
   color 230,230,0
   fill circle x+90,y+100,15
   color 250,250,0
   fill circle x+85,y+100,10
   color 170,160,250
   fill triangle x+97,y+90, x+105,y+100, x+101,y+90
   fill triangle x+97,y+110, x+105,y+100, x+101,y+110
   color 0,0,0
   fill circle x+90,y+95,3
   line x+95,y+105, x+100,y+105
   color 200,200,0
   fill triangle x+62,y+99, x+45,y+85, x+50,y+99
   fill triangle x+62,y+101, x+45,y+115, x+50,y+101
   c=x
   d=y
Return

Label Ara1
   mx=c
   my=d
   Son=ran(300)
   Don=ran(50)
   x=800
   goto Nemo2
   
Label Nemo2

   if mx < 6+Son then
     goto Ara2
   endif
  
   if my > 200+Don then
     oran = -0.5
   elsif my < -50
     oran = 0.5
   endif
   my=my+oran
   mx=mx-2
   color 250,250,0
   fill triangle mx+75,my+90, mx+55,my+70, mx+5,my+110
   fill triangle mx+75,my+110, mx+55,my+130, mx+5,my+90
   fill triangle mx+93,my+100, mx+75,my+100, mx+105,my+65
   fill triangle mx+93,my+100, mx+75,my+100, mx+105,my+135
   color 210,210,0
   fill triangle mx+93,my+100, mx+75,my+100, mx+93,my+83
   fill triangle mx+93,my+100, mx+75,my+100, mx+93,my+117
   color 25,25,0
   fill triangle mx+65,my+82, mx+65,my+118, mx+87,my+100
   fill circle mx+65,my+100,15
   color 230,230,0
   fill circle mx+55,my+100,20
   color 25,25,0
   fill circle mx+45,my+100,25
   color 50,50,0
   fill circle mx+55,my+100,18
   color 230,230,0
   fill circle mx+35,my+100,25
   color 250,250,0
   fill circle mx+45,my+100,18
   color 25,25,0
   fill circle mx+25,my+100,20
   color 50,50,0
   fill circle mx+35,my+100,15
   color 230,230,0
   fill circle mx+15,my+100,15
   color 250,250,0
   fill circle mx+20,my+100,10
   color 170,160,250
   fill triangle mx+6,my+90, mx+0,my+100, mx+2,my+90
   fill triangle mx+6,my+110, mx+0,my+100, mx+2,my+110
   color 0,0,0
   fill circle mx+15,my+95,3
   line mx+10,my+105, mx+5,my+105
   color 200,200,0
   fill triangle mx+43,my+99, mx+60,my+85, mx+55,my+99
   fill triangle mx+43,my+101, mx+60,my+115, mx+55,my+101
   c=mx
   d=my
Return

End Sub

// Nemissa --------------- Nemissa --------------- Nemissa ------------- Nemissa

Sub Nemissa()

   Sonra=ran(300)
   Daha=ran(50)
   goto Nemissa1

Label Tekrar2
   xx=cx
   yy=cy
   Sonra=ran(300)
   Daha=ran(50)
   goto Nemissa1
  
Label Nemissa1

   if yy<6+Sonra then
     goto Tekrar1
   endif
  
   if xx > 100+Daha then
     buran = -0.5
   elsif xx < -100
     buran = 0.5
   endif
  
   yy=yy-2
   xx=xx+buran
  
   color 250,250,0
   fill triangle yy+75,xx+190, yy+55,xx+170, yy+5,xx+210
   fill triangle yy+75,xx+210, yy+55,xx+230, yy+5,xx+190
   fill triangle yy+93,xx+200, yy+75,xx+200, yy+105,xx+165
   fill triangle yy+93,xx+200, yy+75,xx+200, yy+105,xx+235
   color 210,210,0
   fill triangle yy+93,xx+200, yy+75,xx+200, yy+93,xx+183
   fill triangle yy+93,xx+200, yy+75,xx+200, yy+93,xx+217
   color 25,25,0
   fill triangle yy+65,xx+182, yy+65,xx+218, yy+87,xx+200
   fill circle yy+65,xx+200,15
   color 230,230,0
   fill circle yy+55,xx+200,20
   color 25,25,0
   fill circle yy+45,xx+200,25
   color 50,50,0
   fill circle yy+55,xx+200,18
   color 230,230,0
   fill circle yy+35,xx+200,25
   color 250,250,0
   fill circle yy+45,xx+200,18
   color 25,25,0
   fill circle yy+25,xx+200,20
   color 50,50,0
   fill circle yy+35,xx+200,15
   color 230,230,0
   fill circle yy+15,xx+200,15
   color 250,250,0
   fill circle yy+20,xx+200,10
   color 170,160,250
   fill triangle yy+6,xx+190, yy+0,xx+200, yy+2,xx+190
   fill triangle yy+6,xx+210, yy+0,xx+200, yy+2,xx+210
   color 0,0,0
   fill circle yy+15,xx+195,3
   line yy+10,xx+205, yy+5,xx+205
   color 200,200,0
   fill triangle yy+43,xx+199, yy+60,xx+185, yy+55,xx+199
   fill triangle yy+43,xx+201, yy+60,xx+215, yy+55,xx+201
   cy=yy
   cx=xx
Return

Label Tekrar1
   cxx=cx
   cyy=cy
   Sonra=ran(300)
   Daha=ran(50)
   yy=6
   goto Nemissa2

Label Nemissa2

   if cyy > 500+Sonra then
     goto Tekrar2
   endif
  
   if cxx > 100+Daha then
     buran = -0.5
   elsif cxx < -100
     buran = 0.5
   endif
  
   cyy=cyy+2
   cxx=cxx+buran
  
   color 250,250,0
   fill triangle cyy+30,cxx+190, cyy+50,cxx+170, cyy+90,cxx+210
   fill triangle cyy+30,cxx+210, cyy+50,cxx+230, cyy+90,cxx+190
   fill triangle cyy+12,cxx+200, cyy+30,cxx+200, cyy+0,cxx+165
   fill triangle cyy+12,cxx+200, cyy+30,cxx+200, cyy+0,cxx+235
   color 210,210,0
   fill triangle cyy+12,cxx+200, cyy+30,cxx+200, cyy+12,cxx+183
   fill triangle cyy+12,cxx+200, cyy+30,cxx+200, cyy+12,cxx+217
   color 25,25,0
   fill triangle cyy+40,cxx+182, cyy+40,cxx+218, cyy+18,cxx+200
   fill circle cyy+40,cxx+200,15
   color 230,230,0
   fill circle cyy+50,cxx+200,20
   color 25,25,0
   fill circle cyy+60,cxx+200,25
   color 50,50,0
   fill circle cyy+50,cxx+200,18
   color 230,230,0
   fill circle cyy+70,cxx+200,25
   color 250,250,0
   fill circle cyy+60,cxx+200,18
   color 25,25,0
   fill circle cyy+80,cxx+200,20
   color 50,50,0
   fill circle cyy+70,cxx+200,15
   color 230,230,0
   fill circle cyy+90,cxx+200,15
   color 250,250,0
   fill circle cyy+85,cxx+200,10
   color 170,160,250
   fill triangle cyy+97,cxx+190, cyy+105,cxx+200, cyy+101,cxx+190
   fill triangle cyy+97,cxx+210, cyy+105,cxx+200, cyy+101,cxx+210
   color 0,0,0
   fill circle cyy+90,cxx+195,3
   line cyy+95,cxx+205, cyy+100,cxx+205
   color 200,200,0
   fill triangle cyy+62,cxx+199, cyy+45,cxx+185, cyy+50,cxx+199
   fill triangle cyy+62,cxx+201, cyy+45,cxx+215, cyy+50,cxx+201
   cy=cyy
   cx=cxx
Return

End Sub

// Nimik -------------- Nimik -------------------- Nimik ----------------- Nimik

Sub Nimik()

   Sonradan=ran(300)
   Dondu=ran(50)
   goto Nimik1

Label Arada2
   nx=cnx
   xy=axy
   Sonradan=ran(300)
   Dondu=ran(50)
   goto Nimik1
  
Label Nimik1

   if nx > 500+Sonradan then
     goto Arada1
   endif
   if xy > 100+Dondu then
     suran = -0.5
   elsif xy < -150
     suran = 0.5
   endif

   xy=xy+suran
   nx=nx+2
  
   color 250,200,0
   fill triangle nx+70,xy+285, nx+70,xy+315, nx+88,xy+300
   fill triangle nx+20,xy+280, nx+50,xy+300, nx+32,xy+300
   fill triangle nx+20,xy+320, nx+50,xy+300, nx+32,xy+300
   fill triangle nx+40,xy+275, nx+50,xy+300, nx+55,xy+290
   fill triangle nx+40,xy+325, nx+50,xy+300, nx+55,xy+310
   color 220,80,0
   fill circle nx+60,xy+300,15
   color 250,90,0
   fill circle nx+50,xy+300,10
   color 220,80,0
   fill circle nx+65,xy+300,15
   color 250,90,0
   fill circle nx+55,xy+300,10
   fill triangle nx+56,xy+285, nx+56,xy+315, nx+35,xy+298
   fill triangle nx+56,xy+285, nx+56,xy+315, nx+35,xy+302
   color 220,180,0
   fill circle nx+72,xy+300,10
   color 250,200,0
   fill circle nx+68,xy+300,8
   fill triangle nx+55,xy+295, nx+55,xy+305, nx+60,xy+300
   color 0,0,0
   fill circle nx+77,xy+297,2
   color 250,90,0
   line nx+84,xy+300, nx+86,xy+300
   cnx=nx
   cxy=xy
Return

Label Arada1
   anx=cnx
   axy=cxy
   Sonradan=ran(300)
   Dondu=ran(50)
   nx=840
   goto Nimik2

Label Nimik2

   if anx<8+Sonradan then
     goto Arada2
   endif
  
   if axy > 100+Dondu then
     suran = -0.5
   elsif axy < -150
     suran = 0.5
   endif

   axy=axy+suran
   anx=anx-2
  
   color 250,200,0
   fill triangle anx+38,axy+285, anx+38,axy+315, anx+20,axy+300
   fill triangle anx+88,axy+280, anx+58,axy+300, anx+76,axy+300
   fill triangle anx+88,axy+320, anx+58,axy+300, anx+76,axy+300
   fill triangle anx+68,axy+275, anx+58,axy+300, anx+53,axy+290
   fill triangle anx+68,axy+325, anx+58,axy+300, anx+53,axy+310
   color 220,80,0
   fill circle anx+48,axy+300,15
   color 250,90,0
   fill circle anx+48,axy+300,10
   color 220,80,0
   fill circle anx+43,axy+300,15
   color 250,90,0
   fill circle anx+53,axy+300,10
   fill triangle anx+52,axy+285, anx+52,axy+315, anx+73,axy+298
   fill triangle anx+52,axy+285, anx+52,axy+315, anx+73,axy+302
   color 220,180,0
   fill circle anx+36,axy+300,10
   color 250,200,0
   fill circle anx+40,axy+300,8
   fill triangle anx+53,axy+295, anx+53,axy+305, anx+48,axy+300
   color 0,0,0
   fill circle anx+31,axy+297,2
   color 250,90,0
   line anx+24,axy+300, anx+22,axy+300
   cnx=anx
   cxy=axy
Return

End Sub

// Nimita ---------------- Nimita ----------------- Nimita --------------- Nimita

Sub Nimita()

   DahaSonra=ran(300)
   Dahanereyekadar=ran(50)
   goto Nimita1

Label Tekrarla2
   ny=cc
   n=nc
   DahaSonra=ran(300)
   Dahanereyekadar=ran(50)
   goto Nimita1
  
Label Nimita1

   if ny<12+DahaSonra then
     goto Tekrarla1
   endif
  
   if n > 40+Dahanereyekadar then
     neren = -0.5
   elsif n < -250
     neren = 0.5
   endif
  
   ny=ny-2
   n=n+neren
  
   color 250,200,0
   fill triangle ny+38,n+385, ny+38,n+415, ny+20,n+400
   fill triangle ny+88,n+380, ny+58,n+400, ny+76,n+400
   fill triangle ny+88,n+420, ny+58,n+400, ny+76,n+400
   fill triangle ny+68,n+375, ny+58,n+400, ny+53,n+390
   fill triangle ny+68,n+425, ny+58,n+400, ny+53,n+410
   color 220,80,0
   fill circle ny+48,n+400,15
   color 250,90,0
   fill circle ny+48,n+400,10
   color 220,80,0
   fill circle ny+43,n+400,15
   color 250,90,0
   fill circle ny+53,n+400,10
   fill triangle ny+52,n+385, ny+52,n+415, ny+73,n+398
   fill triangle ny+52,n+385, ny+52,n+415, ny+73,n+402
   color 220,180,0
   fill circle ny+36,n+400,10
   color 250,200,0
   fill circle ny+40,n+400,8
   fill triangle ny+53,n+395, ny+53,n+405, ny+48,n+400
   color 0,0,0
   fill circle ny+31,n+397,2
   color 250,90,0
   line ny+24,n+400, ny+22,n+400
   cc=ny
   nc=n
Return

Label Tekrarla1
   bny=cc
   bn=nc
   DahaSonra=ran(300)
   Dahanereyekadar=ran(50)
   ny=8
   goto Nimita2

Label Nimita2

   if bny > 500+DahaSonra then
     goto Tekrarla2
   endif
   if bn > 40+Dahanereyekadar then
     neren = -0.5
   elsif bn < -250
     neren = 0.5
   endif
  
   bny=bny+2
   bn=bn+neren
  
   color 250,200,0
   fill triangle bny+70,bn+385, bny+70,bn+415, bny+88,bn+400
   fill triangle bny+20,bn+380, bny+50,bn+400, bny+32,bn+400
   fill triangle bny+20,bn+420, bny+50,bn+400, bny+32,bn+400
   fill triangle bny+40,bn+375, bny+50,bn+400, bny+55,bn+390
   fill triangle bny+40,bn+425, bny+50,bn+400, bny+55,bn+410
   color 220,80,0
   fill circle bny+60,bn+400,15
   color 250,90,0
   fill circle bny+50,bn+400,10
   color 220,80,0
   fill circle bny+65,bn+400,15
   color 250,90,0
   fill circle bny+55,bn+400,10
   fill triangle bny+56,bn+385, bny+56,bn+415, bny+35,bn+398
   fill triangle bny+56,bn+385, bny+56,bn+415, bny+35,bn+402
   color 220,180,0
   fill circle bny+72,bn+400,10
   color 250,200,0
   fill circle bny+68,bn+400,8
   fill triangle bny+55,bn+395, bny+55,bn+405, bny+60,bn+400
   color 0,0,0
   fill circle bny+77,bn+397,2
   color 250,90,0
   line bny+84,bn+400, bny+86,bn+400
   cc=bny
   nc=bn
Return

End Sub

// Kabarcıklar ................... Kabarcıklar .................... Kabarcıklar

Sub Kopuk()

Label Baloncuk1
   if kopuk1<100 kopuk1=520
   kopuk1=kopuk1-2
   color 250,250,250
   circle 200-ran(3),kopuk1-ran(3),4
   circle 260-ran(3),kopuk1-10-ran(3),4
   circle 230-ran(3),kopuk1-20-ran(3),4
Return

End Sub

 

[url=https://www.mediafire.com/file/yiq1cjq9utfdbtz/Nemo.zip/file]
Son Düzenleme: 28-03-2022 Saat 23:40, Düzenleyen: Kurgu.

Bir hesap oluşturun veya yorum yapmak için giriş yapın

Yorum yapmak için üye olmanız gerekiyor


Google Reklamları