; River Raid Benzeri Oyun
; Değişkenlerin Tanımlanması
score = 0
lives = 3
level = 1
enemyCount = 0
bulletCount = 0
maxEnemyCount = 10
gameOver = False
powerUpActive = False
powerUpType = 0
powerUpX = 0
powerUpY = 0
; Oyun Başlangıcı
Init:
Cls
Call LoadGraphics
Call LoadSounds
Print "Made by amigApple"
Wait(100)
score = 0
level = 1
lives = 3
enemyCount = 0
bulletCount = 0
gameOver = False
powerUpActive = False
Call ShowLoadingScreen
PlayMusic
GoTo MainLoop
; Grafiklerin Yüklenmesi
LoadGraphics:
LoadSprite(1, "player_ship.iff") ; Oyuncu Gemisi
LoadSprite(2, "enemy_ship_1.iff") ; Düşman Gemisi Tipi 1
LoadSprite(3, "enemy_ship_2.iff") ; Düşman Gemisi Tipi 2
LoadSprite(4, "bullet_sprite.iff") ; Mermi
LoadSprite(5, "powerup_sprite.iff") ; Güçlendirici
Return
; Müzik Yükleme
LoadSounds:
LoadMod("background_music.mod") ; Arka plan müziği
LoadSample(1, "shot_sound.iff") ; Ateş sesi
LoadSample(2, "explosion_sound.iff") ; Patlama sesi
LoadSample(3, "powerup_sound.iff") ; Güçlendirici sesi
Return
; Yükleme Ekranı
ShowLoadingScreen:
Cls
Print "Loading..."
Wait(100)
Return
; Düşman Gemisi Oluşturma
CreateEnemy:
enemyX = Rnd(640) ; Rastgele X konumu
enemyType = Rnd(2) ; 0 veya 1 - farklı düşman türleri
enemyY = Rnd(200) + 50 ; Yüksekliği ayarlar
enemyList[enemyCount] = enemyX + enemyY * 640 + enemyType * 1000
enemyCount = enemyCount + 1
Return
; Oyun Döngüsü
MainLoop:
Cls
If gameOver Then
Print "Game Over! Score: " + score
Print "Press Fire to Restart"
If MouseButton(1) Then
GoTo Init
EndIf
Wait(1)
GoTo MainLoop
EndIf
; Oyuncu Gemisinin Kontrolü
If MouseX < 20 Then
playerX = 20
ElseIf MouseX > 620 Then
playerX = 620
Else
playerX = MouseX
EndIf
DrawPlayer(playerX, 400) ; Oyuncu gemisini çizer
DrawEnemies() ; Düşmanları çizer
DrawBullets() ; Mermileri çizer
Call UpdatePowerUp() ; Güçlendiriciyi güncelle
; Düşman yaratma
If FrameCount Mod (60 - level * 5) = 0 Then ; Seviye arttıkça düşman yaratma sıklığı azalır
Call CreateEnemy
EndIf
; Düşmanların hareket ettirilmesi
Call MoveEnemies
; Mermilerin kontrolü
Call UpdateBullets
; Çarpışma Kontrolü
Call CheckCollisions
; Puan güncelleme
Print "Score: " + score
Print "Lives: " + lives
Print "Level: " + level
; Güçlendirici düşürme
If Not powerUpActive And (FrameCount Mod 300 = 0) Then
powerUpType = Rnd(2) ; 0: Mermi Hızlandirici 1: Can
powerUpX = Rnd(620) + 20 ; Rastgele X konumu
powerUpY = 0 ; Üstten düşmeli
powerUpActive = True
EndIf
; Seviye geçişi
If score >= level * 1000 Then
level = level + 1
Print "Level Up! New Level: " + level
Wait(100)
EndIf
Wait(1)
GoTo MainLoop
; Oyuncu Gemisini Çizme
DrawPlayer(x, y):
Blit(1, x - 16, y - 16) ; Oyuncu gemisini çiz
Return
; Düşmanları Çizme
DrawEnemies:
For i = 0 To enemyCount - 1
enemyPos = enemyList[i]
enemyX = enemyPos Mod 640
enemyY = enemyPos / 640 Mod 1000
enemyType = enemyPos / 1000
; Düşmanı çizme
If enemyType = 0 Then
Blit(2, enemyX - 16, enemyY - 16) ; Tip 1 Düşman
Else
Blit(3, enemyX - 16, enemyY - 16) ; Tip 2 Düşman
EndIf
Next i
Return
; Düşmanları Hareket Ettir
MoveEnemies:
For i = 0 To enemyCount - 1
enemyPos = enemyList[i]
enemyX = enemyPos Mod 640
enemyY = enemyPos / 640 Mod 1000
enemyY = enemyY + level ; Düşmanların hızını arttır
enemyList[i] = enemyX + enemyY * 640 + (enemyType * 1000) ; Güncelleme
; Düşman ekranın dışına çıktı mı?
If enemyY > 480 Then
lives = lives - 1 ; Yaşam kaybet
enemyList[i] = enemyCount * -1 ; Bu düşmanı yok say
If lives <= 0 Then
gameOver = True
EndIf
EndIf
Next i
Return
; Güçlendiriciyi Çizme
DrawPowerUp:
If powerUpActive Then
Blit(5, powerUpX - 16, powerUpY - 16) ; Güçlendiriciyi çiz
EndIf
Return
; Güçlendiricinin Güncellenmesi
UpdatePowerUp:
If powerUpActive Then
powerUpY = powerUpY + 2 ; Güçlendiricinin düşmesini sağla
If powerUpY > 480 Then ; Ekranın dışına çıktı mı?
powerUpActive = False
EndIf
Call DrawPowerUp ; Güçlendiriciyi çiz
EndIf
Return
; Mermi Ateşleme
FireBullet(x, y):
bulletX[bulletCount] = x
bulletY[bulletCount] = y
bulletCount = bulletCount + 1
Call PlayShotSound ; Ateş sesi çal
Return
; Mermilerin Kontrolü
UpdateBullets:
For j = 0 To bulletCount - 1
bulletY[j] = bulletY[j] - 2 ; Merminin yukarı doğru hareket etmesi
If bulletY[j] < 0 Then
bulletY[j] = -1 ; Mermiyi yok say
EndIf
Next j
Return
; Düşmanlar ile Mermiler Arasında Çarpışma Kontrolü
CheckCollisions:
For i = 0 To enemyCount - 1
enemyPos = enemyList[i]
enemyX = enemyPos Mod 640
enemyY = enemyPos / 640 Mod 1000
enemyType = enemyPos / 1000
For j = 0 To bulletCount - 1
If bulletY[j] >= 0 Then
If Collides(enemyX, enemyY, bulletX[j], bulletY[j]) Then
score = score + 100 ; Düşman yok edilince puan eklenir
enemyList[i] = enemyCount * -1 ; Düşmanı yok say
bulletY[j] = -1 ; Mermiyi yok say
Call PlayExplosionSound ; Patlama sesi
Exit
EndIf
EndIf
Next j
; Güçlendirici ile çarpışma kontrolü
If powerUpActive Then
If Collides(powerUpX, powerUpY, playerX, 400) Then
If powerUpType = 0 Then
bulletCount = Max(0, bulletCount + 1) ; Mermi sayısını arttır
Else
lives = Min(lives + 1, 5) ; Can arttır
EndIf
powerUpActive = False ; Güçlendirici alınmış
Call PlayPowerUpSound ; Güçlendirici sesi çal
EndIf
EndIf
Next i
Return
; Çarpışma Kontrol Fonksiyonu
Collides(targetX, targetY, objX, objY):
If (objY > 0) And (objX > targetX - 16) And (objX < targetX + 16) And (objY > targetY - 16) And (objY < targetY + 16) Then
Return True
EndIf
Return False
; Oyun Başlangıcı
bulletCount = 0
enemyCount = 0
GoTo Init
Descriptions
Boosters:
Boosters that drop randomly after enemies are destroyed provide extra advantages to the player.
Booster types can increase the player's health or give additional bullets.
Enemy Ships:
Booster ships move upwards depending on the level, providing both difficulty and continuity.
In-Game Support:
Throughout gameplay, a booster is destroyed every 300 frames and updated according to a certain pattern.
Graphics and Sounds:
At the beginning of the game, the player is supported by the "Made by amigApple" message with other visuals and sounds.
Level Passes:
A points system is used to increase the player's experience as they level up.