SyntaxBoom

Languages & Coding => BlitzBasic (Plus/3D variants) => Code Archive => Topic started by: Dabzy on Jun 22, 2025, 06:08 PM

Title: Turrent Shooter
Post by: Dabzy on Jun 22, 2025, 06:08 PM
Pretty much my little Competition (1) example but I've inflated the variable identifiers in the code to what they represent, instead of the one character ones which I used to save space.

Graphics3D 800,600,32,2

SetBuffer BackBuffer()
SeedRnd MilliSecs()

Global player=CreateCube()
ScaleEntity player,.5,.5,1
PositionEntity player,0,0,0

Global camera=CreateCamera()
PositionEntity camera,0,5,-10
RotateEntity camera,30,0,0

Dim bullets(100),enemies(100)
Global bulletIndex=0,enemySpawnCounter=0,score=0, lastShotTime=0

While Not KeyHit(1)
    If KeyDown(205) Then TurnEntity player,0,-2,0
    If KeyDown(203) Then TurnEntity player,0,2,0
    If KeyDown(57) And MilliSecs()-lastShotTime>200
        bullets(bulletIndex)=CreateCube()
        ScaleEntity bullets(bulletIndex),.1,.1,.5
        EntityColor bullets(bulletIndex),0,0,255 
        PositionEntity bullets(bulletIndex),EntityX(player),EntityY(player),EntityZ(player)
        RotateEntity bullets(bulletIndex),EntityPitch(player),EntityYaw(player),EntityRoll(player)
        bulletIndex=(bulletIndex+1) Mod 100
        lastShotTime=MilliSecs()
    EndIf
 
    For i=0 To 99
        If bullets(i)<>0
            MoveEntity bullets(i),0,0,1
            If EntityZ(bullets(i))>50 Then FreeEntity bullets(i):bullets(i)=0
        EndIf
    Next
 
    enemySpawnCounter=enemySpawnCounter+1
 
    If enemySpawnCounter>30
        For i=0 To 99
            If enemies(i)=0
                enemies(i)=CreateCube()
                PositionEntity enemies(i),Rnd(-8,8),0,50
                ScaleEntity enemies(i),.5,.5,.5
                EntityColor enemies(i),255,0,0
                Exit
            EndIf
        Next
        enemySpawnCounter=0
    EndIf
   
    For i=0 To 99
        If enemies(i)<>0
            MoveEntity enemies(i),0,0,-.1
            If EntityZ(enemies(i))<EntityZ(player) Or EntityDistance(player,enemies(i))<1
            Repeat
Cls
                Text 0,0,"Breached - Hits "+s
                Flip
Until KeyDown(1)
            EndIf
       
            For j=0 To 99
                If bullets(j)<>0 And enemies(i)<>0
                    If EntityDistance(bullets(j),enemies(i))<1
                        FreeEntity enemies(i)
                        enemies(i)=0
                        FreeEntity bullets(j)
                        bullets(j)=0
                        score=score+1
                    EndIf
                EndIf
            Next
        EndIf
    Next
    RenderWorld
    Text 0,0,score+" hit"
    Flip
delay 1
Wend

Left/Right arrows to rotate turret, space to fire at the onslaught of red cubes, once a red cube goes past the turret... Game over!

Dabz