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
.png)







