Топ-100
amiga apple retro amiga macintosh

   amigApple Programmers Section>>

 
TURRET DEFENCE GAME:


; Turret Defense game this is code part
; you can copy past this section
; game start Oyun Başlangıcı
Init:
    ; Ekranı temizle
    Cls

    ; Oyunun ilk ayarları
    score = 0
    enemiesDestroyed = 0
    enemySpawnTime = 50
    enemySpeed = 2
    turretX = 320
    turretY = 440
    enemyCount = 0
    bulletCount = 0
    maxLives = 3
    lives = maxLives
    backgroundColor = 0
    gameOver = False
   
    ; Oyun dцngьsьnь başlat
    GoTo MainLoop

; Dьşmanı Tanımla
CreateEnemy:
    enemyType = Rnd(2)  ; 0 = Dьşьk, 1 = Orta, 2 = Yьksek
    enemyX = Rnd(640)
    enemyY = 0
    enemyList[enemyCount] = enemyX + enemyY * 640 + enemyType * 1000  ; Dьşman konumunu ve tipini sakla
    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
   
    ; Ara birimler (input)
    If MouseButton(1) Then
        ; Mermiyi ateşle
        FireBullet(turretX, turretY)
    EndIf
   
    ; Dьşman yarat
    If FrameCount Mod enemySpawnTime = 0 Then
        Call CreateEnemy
    EndIf

    ; Dьşmanları hareket ettir
    For i = 0 To enemyCount - 1
        enemyPos = enemyList[i]
        enemyX = enemyPos Mod 640
        enemyY = enemyPos / 640 Mod 1000
        enemyType = enemyPos / 1000

        enemyY = enemyY + enemySpeed
        enemyList[i] = enemyX + enemyY * 640 + enemyType * 1000 ; Yeni konumu gьncelle

        ; 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

        ; Puan gьncelle
        Print "Score: " + score
        Print "Enemies Destroyed: " + enemiesDestroyed
        Print "Lives: " + lives

        ; Mermiler ile зarpışma kontrolь
        For j = 0 To bulletCount - 1
            If Collides(enemyX, enemyY, bulletX[j], bulletY[j]) Then
                enemiesDestroyed = enemiesDestroyed + 1
                score = score + (enemyType + 1) * 10  ; Dьşman tьrьne gцre puan ver
                enemyList[i] = enemyCount * -1    ; Dьşmanı yok say
                bulletY[j] = -1                    ; Mermiyi yok say
                Exit
            EndIf
        Next j
    Next i

    ; Ekrana yaz
    Wait(1)
    GoTo MainLoop

; Mermi Ateşleme
FireBullet(x, y):
    bulletX[bulletCount] = x
    bulletY[bulletCount] = y
    bulletCount = bulletCount + 1
    Return

; Зarpışma Kontrol Fonksiyonu
Collides(enemyX, enemyY, bulletX, bulletY):
    If (bulletY > 0) And (bulletX > enemyX - 20) And (bulletX < enemyX + 20) And (bulletY > enemyY - 20) And (bulletY < enemyY + 20) Then
        Return True
    EndIf
    Return False

; Dьşmanları Temizle
CleanEnemies:
    For i = 0 To enemyCount - 1
        If enemyList[i] < 0 Then
            enemyList[i] = enemyList[enemyCount - 1]
            enemyCount = enemyCount - 1
        EndIf
    Next i
    Return

; Oyun Başlangıcını Başlat
bulletCount = 0
enemyCount = 0
lives = maxLives
gameOver = False
GoTo Init
Turret Defense Game

to compile the code, you need to have AMOS Compiler. you can get it as ready distro here:
Amiga Programmer Edition AMOS PRO

New Features of the game
Different Enemy Types:

Enemies are randomly generated as one of the types (low, medium, high) and score according to their type.
Enemy type is used in score calculation. Stronger enemies bring more points.
Life System:

The player has three lives. Enemies lose life when they go off the screen and the game ends when the life count drops to zero.
Game Over Status:

A "Game Over" message is shown when the game is over and they must press the fire button to restart.
Scoring:

Scoring is done according to enemy type. Scores differ for low, medium and high enemies.
Other Features That Can Be Added
Graphics and Animations: Graphics can be added for enemies and bullets.
Background Music and Sound Effects: These elements can enrich the player's experience.
Advanced Enemy Behaviors: Different movement and attack patterns of enemies can be added.
Loading Screen and Level Transitions: Enemies that become more difficult can be added as the player passes levels.
This code includes more elements and features to create a basic turret defense game. You can continue to develop and increase the gameplay experience!

ps: we prepare it with Turkish comments, but the game in English :)
 
with more complex options:>
       ; Turret Defense Oyunu

; Oyun Başlangıcı
Init:
    Cls
    Call LoadGraphics
    Call LoadMusic
    Call LoadSounds
    Call ShowLoadingScreen
    PlayMusic
   
    score = 0
    enemiesDestroyed = 0
    enemySpawnTime = 50
    enemySpeed = 2
    turretX = 320
    turretY = 440
    enemyCount = 0
    bulletCount = 0
    maxLives = 3
    lives = maxLives
    backgroundColor = 0
    gameOver = False
   
    GoTo MainLoop

; Grafikleri Yükle
LoadGraphics:
    LoadSprite(1, "enemy_sprite.iff")    ; Düşman grafiği
    LoadSprite(2, "turret_sprite.iff")    ; Taret grafiği
    LoadSprite(3, "bullet_sprite.iff")    ; Mermi grafiği
    Return

; Müzik Yükleme
LoadMusic:
    LoadMod("background_music.mod")        ; Arka plan müziği
    Return

; Ses Efekti Yükleme
LoadSounds:
    LoadSample(1, "shot_sound.iff")       ; Ateş sesi
    LoadSample(2, "explosion_sound.iff")  ; Patlama sesi
    Return

; Yükleme Ekranı
ShowLoadingScreen:
    Cls
    Print "Loading..."
    Wait(100)
    Return

; Düşmanı Tanımla
CreateEnemy:
    enemyType = Rnd(3)  ; 0 = Düşük, 1 = Orta, 2 = Yüksek
    enemyX = Rnd(640)
    enemyY = 0
    enemyList[enemyCount] = enemyX + enemyY * 640 + enemyType * 1000 ; Düşman konumu ve tipini sakla
    enemyCount = enemyCount + 1
    Return

; Oyun Döngüsü
MainLoop:
    Cls
    DrawTurret
    DrawEnemy
    DrawBullet

    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
   
    ; Ara birimler (input)
    If MouseButton(1) Then
        Call FireBullet(turretX, turretY)
    EndIf
   
    ; Düşman yarat
    If FrameCount Mod enemySpawnTime = 0 Then
        Call CreateEnemy
    EndIf

    ; Düşmanları hareket ettir
    Call MoveEnemies

    ; Düşmanları kontrol et
    For i = 0 To enemyCount - 1
        enemyPos = enemyList[i]
        enemyX = enemyPos Mod 640
        enemyY = enemyPos / 640 Mod 1000
        enemyType = enemyPos / 1000

        ; 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

        ; Puan güncelleme bilgisi
        Print "Score: " + score
        Print "Enemies Destroyed: " + enemiesDestroyed
        Print "Lives: " + lives

        ; Mermiler ile çarpışma kontrolü
        For j = 0 To bulletCount - 1
            If Collides(enemyX, enemyY, bulletX[j], bulletY[j]) Then
                enemiesDestroyed = enemiesDestroyed + 1
                score = score + (enemyType + 1) * 10  ; Düşman türüne göre puan ver
                enemyList[i] = enemyCount * -1    ; Düşmanı yok say
                bulletY[j] = -1                    ; Mermiyi yok say
                Call PlayExplosionSound            ; Patlama sesi çal
                Exit
            EndIf
        Next j
    Next i

    If enemiesDestroyed Mod 10 = 0 Then
        Call LevelUp                         ; Seviye artışı
    EndIf

    Call CleanEnemies                     ; Temizleme işlemi

    Wait(1)
    GoTo MainLoop

; Mermi Ateşleme
FireBullet(x, y):
    bulletX[bulletCount] = x
    bulletY[bulletCount] = y
    bulletCount = bulletCount + 1
    Call PlayShotSound                     ; Ateş sesi çal
    Return

; Çarpışma Kontrol Fonksiyonu
Collides(enemyX, enemyY, bulletX, bulletY):
    If (bulletY > 0) And (bulletX > enemyX - 20) And (bulletX < enemyX + 20) And (bulletY > enemyY - 20) And (bulletY < enemyY + 20) Then
        Return True
    EndIf
    Return False

; Düşmanları Temizle
CleanEnemies:
    For i = 0 To enemyCount - 1
        If enemyList[i] < 0 Then
            enemyList[i] = enemyList[enemyCount - 1]
            enemyCount = enemyCount - 1
        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
       
        ; Rastgele sağa sola hareket
        If Rnd(1) > 0.5 Then
            enemyX = enemyX + enemySpeed
        Else
            enemyX = enemyX - enemySpeed
        EndIf
       
        ; Ekran sınırlarını kontrol et
        If enemyX < 0 Then enemyX = 0
        If enemyX > 640 Then enemyX = 640

        enemyY = enemyY + enemySpeed
        enemyList[i] = enemyX + enemyY * 640 + (enemyType * 1000); Yeni konumu güncelle
    Next i
    Return

; Seviye Geçişi
LevelUp:
    enemySpawnTime = Max(10, enemySpawnTime - 5) ; Zamanı azalt
    enemySpeed = enemySpeed + 0.5                 ; Hızı artır
    Print "Level Up! New level..."
    Wait(100)
    Return

; Ekrana Çizme
DrawTurret:
    Blit(2, turretX - 16, turretY - 16)  ; Taret
    Return

DrawEnemy:
    For i = 0 To enemyCount - 1
        enemyPos = enemyList[i]
        enemyX = enemyPos Mod 640
        enemyY = enemyPos / 640 Mod 1000
        Blit(1, enemyX - 16, enemyY - 16)  ; Düşman
    Next i
    Return

DrawBullet:
    For j = 0 To bulletCount - 1
        Blit(3, bulletX[j] - 4, bulletY[j] - 4)  ; Mermi
    Next j
    Return

; Oyun Başlangıcını Başlat
bulletCount = 0
enemyCount = 0
lives = maxLives
gameOver = False
GoTo Init

Descriptions
Graphics and Sounds: In the code, functions have been added to load the necessary graphics and sound files. These functions are called at the start of the game. You will need to place your own graphics and sound files in the appropriate directory.

Enemy Types: Defined how points are given based on the type of enemies. Also, enemies can now randomly move left or right on the screen.

Level Transitions: Configured to level up when a certain enemigo is destroyed, increasing the speed at which enemies are created and the speed at which they move.

Game Over Status: When the game is over, a "Game Over" message is displayed. To restart, the fire button (Mouse Button 1) must be pressed.

You can make improvements to this code using your own graphics and sounds. The game becomes more dynamic and fun. Now, you can test more and customize your game to add additional features. Have fun!
)
2022 @amigApple Software - Hardware