Oyunun oynanacağı pencerenin rengini, boyutlarını ve başlığını belirlediğimiz kısımdır.


GraphicsWindow.BackgroundColor = "Black" ' Arka planı siyah yapar.

GraphicsWindow.Width = 600              ' Pencere genişliği 600 piksel.

GraphicsWindow.Height = 400             ' Pencere yüksekliği 400 piksel.

GraphicsWindow.Title = "Hızlı Sepet"    ' Pencerenin üstündeki başlık.

Bilgisayar ekranında sol üst köşe (X=0, Y=0) noktasıdır. Sağa gittikçe X, aşağı gittikçe Y değeri büyür.

Değişkenleri, içinde veri sakladığımız ve oyun boyunca güncellediğimiz "kutular" gibi düşünebiliriz.


skor = 0      ' Oyuncunun puanını tutar, 0'dan başlar.

sure = 100    ' Oyunun kalan süresini tutar.

topSayisi = 3 ' Ekranda aynı anda kaç top olacağını belirler.

Mavi sepeti, kırmızı topları ve ekrandaki yazıları bu bölümde çizdirip başlangıç konumlarına yerleştiriyoruz.

' Mavi renkli bir dikdörtgen sepet oluşturuluyor

GraphicsWindow.BrushColor = "Blue"

sepet = Shapes.AddRectangle(80, 20)

sepetX = 260 ' Sepetin yataydaki başlangıç yeri (Ekranın ortası)

sepetY = 360 ' Sepetin dikeydeki yeri (Ekranın alt kısmı)

Shapes.Move(sepet, sepetX, sepetY)

Ayrı ayrı 3 tane top kodu yazmak yerine, bir döngü kullanarak tek seferde 3 top oluşturuyoruz:

GraphicsWindow.BrushColor = "Red"

For i = 1 To topSayisi

  top[i] = Shapes.AddEllipse(20, 20)          ' i. topu oluştur (top[1], top[2]...)

  topX[i] = Math.GetRandomNumber(580)         ' Genişlik boyunca rastgele X konumu ver

  topY[i] = Math.GetRandomNumber(100) * -1    ' Toplar yukarıdan sıra sıra gelsin diye eksi Y konumu ver

  topHiz[i] = Math.GetRandomNumber(4) + 2     ' Her topa 2 ile 6 arasında rastgele hız ver

  Shapes.Move(top[i], topX[i], topY[i])       ' Topu yerine yerleştir

EndFor

Oyunun iki önemli dış uyarana tepki vermesini sağlıyoruz: Zamanın akması ve klavyeye basılması.

Timer.Interval = 1000 ' Bilgisayara "Her 1000 milisaniyede (1 saniye) bir alarm çal" der. Timer.Tick = ZamanAzalt ' Alarm her çaldığında "ZamanAzalt" isimli bölüme gitmesini söyler. GraphicsWindow.KeyDown = TusBasildi ' Klavyede bir tuşa basılırsa "TusBasildi" bölümüne git.

Oyunun kalbi burasıdır. While sure > 0 komutu, süre sıfırdan büyük olduğu sürece içerideki kodların saniyede onlarca kez başa sarıp tekrar çalışmasını sağlar.


While sure > 0

  For i = 1 To topSayisi

    topY[i] = topY[i] + topHiz[i] ' Topu hızı kadar aşağı kaydır.

    Shapes.Move(top[i], topX[i], topY[i])

    If topY[i] > 400 Then

      topX[i] = Math.GetRandomNumber(580)

      topY[i] = -20 ' Topu tekrar en yukarı ışınla.

      skor = skor - 1 ' Cezalandır ve 1 puan düş.

      Shapes.SetText(skorYazisi, "Skor: " + skor)

    EndIf

    ' Topun X ve Y koordinatları, sepetin sınırları içine girdi mi?

    If topY[i] >= sepetY - 20 And topY[i] <= sepetY And topX[i] >= sepetX - 10 And topX[i] <= sepetX + 80 Then

      skor = skor + 1 ' Ödüllendir ve 1 puan ekle.

      Shapes.SetText(skorYazisi, "Skor: " + skor)

      topX[i] = Math.GetRandomNumber(580)

      topY[i] = -20 ' Yakalanan topu yukarı ışınla.

      topHiz[i] = topHiz[i] + 0.3 ' Oyun zorlaşsın diye topu biraz hızlandır.

    EndIf

  EndFor

  Program.Delay(20)

' Bilgisayarı 20 milisaniye dinlendir (Oyunun aşırı hızlı akmasını önler).

EndWhile

Ana döngünün dışında duran, sadece çağrıldıklarında (tuşa basıldığında veya saniye değiştiğinde) çalışan paket kodlardır.


' --- SÜREYİ AZALTMA ---

Sub ZamanAzalt

  sure = sure - 1 ' Süreyi 1 azalt.

  Shapes.SetText(sureYazisi, "Süre: " + sure)

EndSub


' --- SEPETİ HAREKET ETTİRME ---

Sub TusBasildi

  If sure > 0 Then ' Oyun bitmediyse çalış.

    sonTus = GraphicsWindow.LastKey ' Basılan son tuşu öğren.

    

    If sonTus = "Left" And sepetX > 0 Then

      sepetX = sepetX - 45 ' Sola basıldıysa sepeti 45 piksel sola kaydır.

    EndIf

    

    If sonTus = "Right" And sepetX < 520 Then

      sepetX = sepetX - 45 ' Sağa basıldıysa sepeti 45 piksel sağa kaydır.

    EndIf

    

    Shapes.Move(sepet, sepetX, sepetY) ' Sepeti yeni yerine taşı.

  EndIf

EndSub

Kodların Tamamı: 

' --- OYUN ALANI AYARLARI ---

GraphicsWindow.BackgroundColor = "Black"

GraphicsWindow.Width = 600

GraphicsWindow.Height = 400

GraphicsWindow.Title = "Hızlı Sepet - Çoklu Top Yarışı!"


' --- DEĞİŞKENLER VE SÜRE ---

skor = 0

sure = 100

topSayisi = 3 


' --- NESNELERİ OLUŞTURMA ---

' Sepet (Oyuncu)

GraphicsWindow.BrushColor = "Blue"

sepet = Shapes.AddRectangle(80, 20)

sepetX = 260

sepetY = 360

Shapes.Move(sepet, sepetX, sepetY)


' DİZİLER İLE ÇOKLU TOP OLUŞTURMA

GraphicsWindow.BrushColor = "Red"

For i = 1 To topSayisi

  top[i] = Shapes.AddEllipse(20, 20)

  topX[i] = Math.GetRandomNumber(580)

  topY[i] = Math.GetRandomNumber(100) * -1 

  topHiz[i] = Math.GetRandomNumber(4) + 2 

  Shapes.Move(top[i], topX[i], topY[i])

EndFor


' Skor Yazısı

GraphicsWindow.BrushColor = "White"

GraphicsWindow.FontSize = 16

skorYazisi = Shapes.AddText("Skor: 0")

Shapes.Move(skorYazisi, 10, 10)


' Süre Yazısı

GraphicsWindow.BrushColor = "Yellow"

sureYazisi = Shapes.AddText("Süre: " + sure)

Shapes.Move(sureYazisi, 500, 10)


' --- ZAMANLAYICI (TIMER) AYARI ---

Timer.Interval = 1000 

Timer.Tick = ZamanAzalt 


' --- TUŞ KONTROLLERİ ---

GraphicsWindow.KeyDown = TusBasildi


' --- ANA OYUN DÖNGÜSÜ ---

While sure > 0

  For i = 1 To topSayisi

    topY[i] = topY[i] + topHiz[i]

    Shapes.Move(top[i], topX[i], topY[i])

    

    If topY[i] > 400 Then

      topX[i] = Math.GetRandomNumber(580)

      topY[i] = -20

      skor = skor - 1

      Shapes.SetText(skorYazisi, "Skor: " + skor)

    EndIf

    

    If topY[i] >= sepetY - 20 And topY[i] <= sepetY And topX[i] >= sepetX - 10 And topX[i] <= sepetX + 80 Then

      skor = skor + 1

      Shapes.SetText(skorYazisi, "Skor: " + skor)

      

      topX[i] = Math.GetRandomNumber(580)

      topY[i] = -20

      topHiz[i] = topHiz[i] + 0.3

    EndIf

  EndFor

  

  Program.Delay(20) 

EndWhile


' --- OYUN BİTTİ EKRANI ---

Timer.Pause() 

GraphicsWindow.BrushColor = "Red"

GraphicsWindow.FontSize = 40

oyunBittiYazisi = Shapes.AddText("OYUN BİTTİ!")

Shapes.Move(oyunBittiYazisi, 180, 150)


' --- SÜREYİ AZALTMA FONKSİYONU ---

Sub ZamanAzalt

  sure = sure - 1

  Shapes.SetText(sureYazisi, "Süre: " + sure)

EndSub


' --- TUŞ HAREKET FONKSİYONU ---

Sub TusBasildi

  If sure > 0 Then

    sonTus = GraphicsWindow.LastKey

    

    ' Sola hareket hızı artırıldı (45 piksel kayıyor)

    If sonTus = "Left" And sepetX > 0 Then

      sepetX = sepetX - 45 

    EndIf

    

    ' Sağa hareket hızı artırıldı (45 piksel kayıyor)

    If sonTus = "Right" And sepetX < 520 Then

      sepetX = sepetX + 45

    EndIf

    

    Shapes.Move(sepet, sepetX, sepetY)

  EndIf

EndSub