Ping Pong Small Basic para pequeños (código)


pong

Small Basic   The Official Blog of Small Basic

http://blogs.msdn.com/b/smallbasic/archive/2013/06/10/small-basic-for-little-kids-series-pong.aspx
Versión 2

‘ v2
‘ bounces well, left to right

‘ make background
GraphicsWindow.Width = “700”
GraphicsWindow.Height = “500”

‘set pen
GraphicsWindow.PenColor = “gray”
GraphicsWindow.PenWidth = “50”

‘draw border
GraphicsWindow.DrawRectangle(0,0,700,500)

‘ set brush
GraphicsWindow.BrushColor = “white”

‘ make left goal, size 100, from (0,200) to (0,300)
GraphicsWindow.FillRectangle(0,200,26,100)

‘ make right goal, size 100, from (674,200) to (674,300)
GraphicsWindow.FillRectangle(674,200,26,100)

‘ set brush
GraphicsWindow.BrushColor = “black”

‘ make paddles
GraphicsWindow.FillRectangle(30,220,10,60)
GraphicsWindow.FillRectangle(664,220,10,60)

‘ draw ball
Sub DrawBall
GraphicsWindow.BrushColor = “black”
GraphicsWindow.FillEllipse(BallX,BallY,10,10)
EndSub

‘ erase ball
Sub EraseBall
GraphicsWindow.PenWidth = “2”
GraphicsWindow.BrushColor = “white”
GraphicsWindow.FillEllipse(BallX,BallY,10,10)
GraphicsWindow.PenColor = “white”
GraphicsWindow.DrawEllipse(BallX,BallY,10,10)
EndSub

‘ sleep
Timer.Interval = 1
Timer.Tick = RunGame

StepSize = 2

StepX = StepSize
StepY = 0

BallX=345
‘ BallY=245
BallY=100

LeftWallX = 27
RightWallX = 660

DrawBall()

Sub RunGame
EraseBall()
BallX = BallX + StepX
BallY = BallY + StepY

‘ Hit right wall
If BallX >= RightWallX Then
StepX = -StepSize
EndIf

‘ Hit left wall
If BallX <= LeftWallX Then
StepX = StepSize
EndIf

DrawBall()
EndSub

Small Basic: juego on- line en 3D


3D

3D RayCaster Maze – Featured Small Basic Game

Echa un vistazo a este fantástico juego de 3D ​​en tiempo real (que se ejecuta en línea).  Por Old Basic Coder  ( tester de software)

http://blogs.msdn.com/b/smallbasic/archive/2013/05/27/3d-raycaster-maze-featured-small-basic-game.aspx

Hice un programa de tipo “3D Maze” como ejercicio. No había nada programado para unos 25 años, nos apetecía volver a estar en ella, y descargar la versión gratuita de Visual Studio. Se apareció con la opción de SmallBASIC, así que pensé que empezaría el primero.
Descarga el código del programa de : http://smallbasic.com/program/?DWV967

Ilustrativo juego en MS Small Basic (código)


mines

Microsoft Small Basic    Program Listing: FMN979-0 – by Nonki Takahashi

Challenge of the Month – May 2013

‘ Minesweeper for Small Basic 0.2
‘ Copyright (c) 2013 Nonki Takahashi. All rights reserved.

‘ History:
‘ 0.2 13/05/2013 Supported mouse right button. (FMN979-0)
‘ 0.1b 07/05/2013 Created. (FMN979)

GraphicsWindow.Title = “Minesweeper for Small Basic 0.2”
Init()
While “True”
Game()
playing = “True”
While playing
Program.Delay(500)
EndWhile
EndWhile
Sub Init
CRLF = Text.GetCharacter(13) + Text.GetCharacter(10)
nMines = 10
nCols = 9
nRows = 9
bgColor = “#949FB5”
cellColor = “#D6E3F3”
coverColor = “#4A64CF”
frameColor = “#222323”
markColor = “White”
flagColor = “Red”
color = “1=#414FBD;2=#206602;3=#AA0406;4=#020282;5=#790101;6=#06787F;7=#A70604;8=#AA0808;✸=Black;”
GraphicsWindow.BackgroundColor = bgColor
x0 = 31
y0 = 30
sizeX = 31
sizeY = 30
GraphicsWindow.Width = (nCols + 2) * sizeX
GraphicsWindow.Height = (nRows + 3) * sizeY
GraphicsWindow.BrushColor = “Black”
x = x0
y = y0 + (nRows + 0.5) * sizeY
GraphicsWindow.FontSize = sizeY
GraphicsWindow.DrawText(x, y – 0.12 * sizeY, “◯”)
GraphicsWindow.FontSize = sizeY * 0.8
GraphicsWindow.DrawText(x + 0.09 * sizeX, y + 0.02 * sizeY, “└”)
GraphicsWindow.FontSize = sizeY
x = x0 + (nCols – 1) * sizeX
GraphicsWindow.DrawText(x, y – 0.12 * sizeY, “✸”)
x = x0 + sizeX
GraphicsWindow.FontSize = sizeY * 0.6
oTime = Controls.AddTextBox(x, y)
Controls.SetSize(oTime, 2 * sizeX, sizeY)
x = x0 + (nCols – 3) * sizeX
oMines = Controls.AddTextBox(x, y)
GraphicsWindow.FontSize = sizeY
Controls.SetSize(oMines, 2 * sizeX, sizeY)
dirCol = “1=1;2=1;3=0;4=-1;5=-1;6=-1;7=0;8=1;”
dirRow = “1=0;2=-1;3=-1;4=-1;5=0;6=1;7=1;8=1;”
‘ The following line could be harmful and has been automatically commented.
‘ path = File.GetSettingsFilePath()
‘ The following line could be harmful and has been automatically commented.
‘ settings = File.ReadContents(path)
If settings[“nWins”] = “” Then
settings[“nWins”] = 0
EndIf
If settings[“nPlays”] = “” Then
settings[“nPlays”] = 0
EndIf
If settings[“record”] = “” Then
settings[“record”] = 999
EndIf
‘ The following line could be harmful and has been automatically commented.
‘ File.WriteContents(path, settings)
EndSub
Sub Game
time = 0
remain = nMines
covered = nCols * nRows
Controls.SetTextBoxText(oTime, time)
Controls.SetTextBoxText(oMines, remain)
CreateStage()
ShowStage()
waiting = “True”
Timer.Interval = 1000
Timer.Pause()
GraphicsWindow.MouseDown = OnMouseDown
EndSub
Sub OnMouseDown
GraphicsWindow.MouseDown = DoNothing
x = GraphicsWindow.MouseX
y = GraphicsWindow.MouseY
iCol = Math.Floor((x – x0) / sizeX) + 1
iRow = Math.Floor((y – y0) / sizeY) + 1
If cover[iCol][iRow] <> “” Then
If waiting Then
waiting = “False”
Timer.Tick = OnTick
Timer.Resume()
EndIf
If Mouse.IsLeftButtonDown Then
If toggle[iCol][iRow] <> 1 Then
OpenCover()
EndIf
Else
ToggleMark()
EndIf
EndIf
GraphicsWindow.MouseDown = OnMouseDown
EndSub
Sub DoNothing
OnMouseDown = “”
EndSub
Sub OnTick
time = time + 1
Controls.SetTextBoxText(oTime, time)
EndSub
Sub OpenCover
Shapes.Remove(question[iCol][iRow])
Shapes.Remove(flag[iCol][iRow])
Shapes.Remove(pole[iCol][iRow])
Shapes.Remove(cover[iCol][iRow])
cover[iCol][iRow] = “”
covered = covered – 1
If stage[iCol][iRow] = “” Then
If nMines < covered Then
checked = “”
OpenAdjacents()
EndIf
If nMines = covered Then
Win()
EndIf
ElseIf stage[iCol][iRow] = “✸” Then
Lose()
Else ‘ numbers
If covered = nMines Then
Win()
EndIf
EndIf
EndSub
Sub ToggleMark
toggle[iCol][iRow] = toggle[iCol][iRow] + 1
If toggle[iCol][iRow] = 3 Then
toggle[iCol][iRow] = 0
EndIf
If toggle[iCol][iRow] = 0 Then
Shapes.HideShape(question[iCol][iRow])
ElseIf toggle[iCol][iRow] = 1 Then
Shapes.ShowShape(flag[iCol][iRow])
Shapes.ShowShape(pole[iCol][iRow])
remain = remain – 1
Controls.SetTextBoxText(oMines, remain)
ElseIf toggle[iCol][iRow] = 2 Then
Shapes.HideShape(flag[iCol][iRow])
Shapes.HideShape(pole[iCol][iRow])
Shapes.ShowShape(question[iCol][iRow])
remain = remain + 1
Controls.SetTextBoxText(oMines, remain)
EndIf
EndSub
Sub Win
Timer.Pause()
If time < settings[“record”] Then
settings[“record”] = time
EndIf
settings[“nWins”] = settings[“nWins”] + 1
settings[“nPlays”] = settings[“nPlays”] + 1
‘ The following line could be harmful and has been automatically commented.
‘ File.WriteContents(path, settings)
SetMessage()
GraphicsWindow.ShowMessage(msg, “You win”)
time = 0
playing = “False”
EndSub
Sub Lose
Timer.Pause()
OpenMines()
settings[“nPlays”] = settings[“nPlays”] + 1
‘ The following line could be harmful and has been automatically commented.
‘ File.WriteContents(path, settings)
SetMessage()
GraphicsWindow.ShowMessage(msg, “You lose”)
time = 0
playing = “False”
EndSub
Sub SetMessage
msg = “Time: ” + time + ” sec” + CRLF
msg = msg + “High Score: ” + settings[“record”] + ” sec” + CRLF
msg = msg + “Game Play Times: ” + settings[“nPlays”] + CRLF
msg = msg + “Wins: ” + settings[“nWins”] + CRLF
msg = msg + “Rate: ” + Math.Floor(settings[“nWins”] / settings[“nPlays”] * 100) + ” %”
EndSub
Sub OpenAdjacents
‘ param iCol, iRow – space cell
checked[iCol][iRow] = “True”
For dir = 1 To 8
Stack.PushValue(“local”, iCol)
Stack.PushValue(“local”, iRow)
Stack.PushValue(“local”, dir)
iCol = iCol + dirCol[dir]
iRow = iRow + dirRow[dir]
If (1 <= iCol) And (iCol <= nCols) And (1 <= iRow) And (iRow <= nRows) Then
If checked[iCol][iRow] = “” Then
If cover[iCol][iRow] <> “” And toggle[iCol][iRow] <> 1 Then
Shapes.Remove(question[iCol][iRow])
Shapes.Remove(flag[iCol][iRow])
Shapes.Remove(pole[iCol][iRow])
Shapes.Remove(cover[iCol][iRow])
cover[iCol][iRow] = “”
covered = covered – 1
EndIf
If stage[iCol][iRow] = “” Then
OpenAdjacents()
Else
checked[iCol][iRow] = “True”
EndIf
EndIf
EndIf
dir = Stack.PopValue(“local”)
iRow = Stack.PopValue(“local”)
iCol = Stack.PopValue(“local”)
EndFor
EndSub
Sub OpenMines
For iRow = 1 To nRows
For iCol = 1 To nCols
If stage[iCol][iRow] = “✸” Then
Shapes.HideShape(cover[iCol][iRow])
EndIf
EndFor
EndFor
EndSub
Sub CreateStage
stage = “”
toggle = “”
For iMine = 1 To nMines
iCol = Math.GetRandomNumber(nCols)
iRow = Math.GetRandomNumber(nRows)
While stage[iCol][iRow] = “✸”
iCol = Math.GetRandomNumber(nCols)
iRow = Math.GetRandomNumber(nRows)
EndWhile
stage[iCol][iRow] = “✸”
EndFor
For iRow = 1 To nRows
For iCol = 1 To nCols
AddNumbers()
EndFor
EndFor
EndSub
Sub AddNumbers
If stage[iCol][iRow] = “✸” Then
For dir = 1 To 8
jCol = iCol + dirCol[dir]
jRow = iRow + dirRow[dir]
If (1 <= jCol) And (jCol <= nCols) And (1 <= jRow) And (jRow <= nRows) And (stage[jCol][jRow] <> “✸”) Then
stage[jCol][jRow] = stage[jCol][jRow] + 1
EndIf
EndFor
EndIf
EndSub
Sub ShowStage
GraphicsWindow.FontSize = sizeY
For iRow = 1 To nRows
For iCol = 1 To nCols
x = x0 + (iCol – 1) * sizeX
y = y0 + (iRow – 1) * sizeY
ShowCover()
ShowCell()
EndFor
EndFor
EndSub
Sub ShowCover
‘ param iCol, iRow – to show
‘ param x, y – left top coordinate
If cover[iCol][iRow] = “” Then
GraphicsWindow.BrushColor = coverColor
GraphicsWindow.PenWidth = 2
GraphicsWindow.PenColor = frameColor
cover[iCol][iRow] = Shapes.AddRectangle(sizeX, sizeY)
Shapes.HideShape(cover[iCol][iRow])
Shapes.Move(cover[iCol][iRow], x, y)
GraphicsWindow.BrushColor = flagColor
GraphicsWindow.PenWidth = 0
flag[iCol][iRow] = Shapes.AddTriangle(0, 0.2 * sizeY, 0.6 * sizeX, 0, 0.6 * sizeX, 0.4 * sizeY)
Shapes.HideShape(flag[iCol][iRow])
Shapes.Move(flag[iCol][iRow], x + 0.2 * sizeX, y + 0.2 * sizeY)
GraphicsWindow.BrushColor = markColor
pole[iCol][iRow] = Shapes.AddRectangle(0.1 * sizeX, 0.6 * sizeY)
Shapes.HideShape(pole[iCol][iRow])
Shapes.Move(pole[iCol][iRow], x + 0.7 * sizeX, y + 0.2 * sizeY)
question[iCol][iRow] = Shapes.AddText(“?”)
Shapes.HideShape(question[iCol][iRow])
Shapes.Move(question[iCol][iRow], x + 0.2 * sizeX, y – 0.12 * sizeY)
Else
Shapes.HideShape(flag[iCol][iRow])
Shapes.HideShape(pole[iCol][iRow])
Shapes.HideShape(question[iCol][iRow])
EndIf
Shapes.ShowShape(cover[iCol][iRow])
EndSub
Sub ShowCell
‘ param iCol, iRow – to show
‘ param x, y – left top coordinate
GraphicsWindow.BrushColor = cellColor
GraphicsWindow.FillRectangle(x, y, sizeX, sizeY)
GraphicsWindow.PenWidth = 2
GraphicsWindow.PenColor = frameColor
GraphicsWindow.DrawRectangle(x, y, sizeX, sizeY)
GraphicsWindow.BrushColor = color[stage[iCol][iRow]]
If stage[iCol][iRow] = “✸” Then
dx = 0
Else
dx = 0.2 * sizeX
EndIf
GraphicsWindow.DrawText(x + dx, y – 0.12 * sizeY, stage[iCol][iRow])
EndSub

‘ C opyright (c) Microsoft Corporation. All rights reserved.

Tancraft (Desarrollado con Small Basic)


a24
Aquí hay otro juego que hice con pequeña base. La llamé Tancraft. Es un juego de 2 jugadores se puede jugar con uno de tus amigos.

Estoy muy agradecido a litdev por sus impresionantes extensiones. Usé su extensión para usar una imagen animada (la explosión de los tanques) en mi juego.

Al principio cada jugador coloca sus tanques en cualquier lugar en su propia tierra (tierras están separadas con la línea roja), y luego a partir del mejor jugador hace clic en algún lugar que poseen tierras. Una vez que se hace clic allí el punto correspondiente en el otro lado de la línea roja  será destruído. Si hay tanque del enemigo allí el tanque explotaría.

Puedes descargar el juego desde aquí (en la parte superior de la página)
Behnam Azizi

http://gallery.technet.microsoft.com/Tanks-Game-a619a22a

Guerra aérea – 1942 (código)


aer1

Microsoft Small Basic  Program Listing:   ID: KJW676  http://smallbasic.com/smallbasic.com/program/?ZZD394

  1. ‘ 1942 like Game ID: KJW676
    ‘ Copyright (C) 2010, Laurent GIRAUD laurent.giraud1@free.fr
    ‘ License: MIT license http://www.opensource.org/licenses/mit-license.php
    ‘most of Game artwork created by Ari Feldman ari@arifeldman.com”
    ‘ and others grabed from free web sprites‘————————-
    ‘replace by your directory path
    ‘Path =”file://C:/Users/Laurent/Desktop/small basic/images1942/”
    Path= “http://imode.free.fr/images1942/&#8221;
    ‘replace by your directory path
    ‘————————-‘ Game area controls
    gameWidth  = 640
    gameHeight = 480
    fps = 50
    bgs = 2 ‘backgroundspeed
    Player_Lives = 10

    nbrisland = 5 ‘nomber of island images
    islandcount = 5 ‘nomber of island in the wall field

    ‘ Window title
    gameTitle = “1942, Score: ”

    GraphicsWindow.Hide()
    GraphicsWindow.Title = gameTitle + “0”
    GraphicsWindow.CanResize = “False”
    GraphicsWindow.Width = gameWidth
    GraphicsWindow.Height = gameHeight

    ‘Presentation
    ‘ todo

    ‘ Start game
    Init()
    define_paths()
    TimePlay = 0
    pathNBR = 1
    ‘create_enemies1()
    Play()

    ‘ Setup world
    Sub Init
    GraphicsWindow.Hide()

    Mouse.HideCursor()
    ‘ addImage in the right order is needed to define the shapes depth

    island4= ImageList.LoadImage(Path + “island4.png”)
    island1= ImageList.LoadImage(Path + “island1.png”)
    island2= ImageList.LoadImage(Path + “island2.png”)
    island3= ImageList.LoadImage(Path + “island3.png”)
    island5= ImageList.LoadImage(Path + “island5.png”)
    player0 = ImageList.LoadImage(Path + “myplane1.png”)
    background = ImageList.LoadImage(Path + “fond.png”)
    bullet0 = ImageList.LoadImage(Path + “bullet.png”)
    enemy= ImageList.LoadImage(Path + “enemy1.png”)
    enemy2 = ImageList.LoadImage(Path + “enemy2.png”)
    enemy_expl1=ImageList.LoadImage(Path + “explo1.png”)
    enemy_expl2=ImageList.LoadImage(Path + “explo2.png”)
    player_expl=ImageList.LoadImage(Path + “explo2.png”)
    Enemy_bullet=ImageList.LoadImage(Path + “E_bullet.png”)
    end = ImageList.LoadImage(Path + “End.png”)

    enemy_Array = “EnemyArray” ‘Array that contain all the enemies
    ‘ every enemy in tha array has 5 informations
    ‘ TimeLine: each enemy has its own timeline
    ‘ PathNBR: the precalculated path defineing the movement
    ‘ the movement is decomposed in LineNbr differents lines
    ‘ each line is define in the enemy_path table with rotation, deltaY and deltaY
    ‘ PositonX, PositonY: position in space


    enemy_TimeLine = “EnemyTimeLine”
    enemy_line = “enemyLineNbr”
    enemy_PosX = “enemyPositonX”
    enemy_PosY = “enemyPositonY”
    enemy_PathNBR=”enemy_PathNBR”

    enemy_Nbr = 6
    enemy_Count = 0
    enemy_speed = 4
    ‘enemy_NextRemove = 1
    enemy_Life = 10
    player_size= 65
    enemy_size = 32
    enemy_ammo_size = 8
    player_bullet_size = 32

    island_Array = “Island array”
    IslandsPosition()
    create_level1()

    fond= Shapes.AddImage(background)
    Array.SetValue(island_Array,1,Shapes.AddImage(island1))
    Array.SetValue(island_Array,2,Shapes.AddImage(island2))
    Array.SetValue(island_Array,3,Shapes.AddImage(island3))
    Array.SetValue(island_Array,4,Shapes.AddImage(island4))
    Array.SetValue(island_Array,5,Shapes.AddImage(island5))
    For i = 6 to  islandcount
    Array.SetValue(island_Array,i,Array.getValue(island_Array,Math.Remainder(i,4)))
    Endfor

    player = Shapes.AddImage(player0)
    GraphicsWindow.FontSize = 20
    GraphicsWindow.BackgroundColor = “Grey”
    GraphicsWindow.PenColor = “Yellow”

    Player_Ammo = “Player_AmmoArray”
    Player_AmmoAge = “Player_AmmoAge”
    Player_AmmoMax = 50
    Player_AmmoCount = 0
    Player_Ammospeed = bgs +4
    Player_AmmoLife = 100

    Enemy_Ammo = “Enemy_AmmoArray”
    Enemy_AmmoAge = “Enemy_AmmoAge”
    Enemy_Ammo_Angle=”Enemy_Ammo_Angle”
    Enemy_AmmoMax = 30
    Enemy_AmmoCount = 0
    Enemy_Ammospeed = bgs +4
    Enemy_AmmoLife = 50
    Enemy_Agresivity = 200
    score = 0
    EndSub

    ‘ Main gane routine
    Sub Play
    GraphicsWindow.Show()

    ‘ Main loop
    play = 1
    pause = 0
    incx =0   ‘ X-axis increment for background
    incy = 0  ‘ Y-axis increment for background
    incbx = 0  ‘increment for bullets and all objects on X
    incby = 0 ‘increment for bullets and all objects on Y
    squadron = 1
    ‘ Island initial position
    j= 0

    For i= 1 To islandcount
    j=Math.Remainder(i,6)
    posy[i]= islandPos[j][2]
    posx[i]= islandPos[j][3]
    incislandx[i] = 0
    incislandy[i] = 0
    EndFor
    TimePlay = 0
    Shapes.Move(player, gameWidth/2 , gameHeight -80 )
    While(play = 1)
    Program.Delay(1000/fps)
    TimePlay = TimePlay +1

    If (pause = 0) Then
    If (TimePlay = level1[squadron][1]) then

    pathNBR = level1[squadron][2]
    enemyPosX1 = level1[squadron][3]  ‘X position
    enemyPosY1 = level1[squadron][4]  ‘Y position
    enemy_Nbr = level1[squadron][6]
    enemy_type = level1[squadron][7]
    if (level1[squadron][5]=1) then
    create_enemies_left()
    Else
    create_enemies_right()
    endif
    squadron = squadron + 1
    endif
    If (TimePlay > 4000) then
    Shapes.Move(Shapes.addImage(end), 230,200)
    Program.Delay(5000)
    Program.End()
    Endif
    moveall()

    GraphicsWindow.MouseMove = OnMouseMove
    GraphicsWindow.MouseDown = OnMouseDown

    AgePlayer_Ammo()

    EndIf
    EndWhile

    EndSub

    Sub OnMouseMove
    paddleX = GraphicsWindow.MouseX – player_size/2
    paddleY = GraphicsWindow.MouseY- player_size

    If (paddleX < 0) then
    paddleX = 0
    endif
    Shapes.Move(player, paddleX , paddleY )
    EndSub
    Sub OnMouseDown
    ShootX = GraphicsWindow.MouseX – 15 ‘ in order to be from the neck of the plane
    ShootY = GraphicsWindow.MouseY – 80
    Fire()
    EndSub

    Sub moveall
    incbx = 0
    incby =0
    GraphicsWindow.Title = gameTitle + score +” Lives:”+Player_Lives

    If (paddleX >(gameWidth-62) ) Then
    incx = incx – bgs
    incbx = incbx – bgs
    For i= 1 To islandcount
    incislandx[i] = incislandx[i] – bgs
    EndFor
    If (incx = -32 ) Then
    incx =0
    Endif
    Endif
    If (paddleX < 64 ) Then
    incx = incx + bgs
    incbx = incbx + bgs
    For i= 1 To islandcount
    incislandx[i] = incislandx[i] + bgs
    EndFor
    If (incx = 32 ) Then
    incx =0
    Endif
    Endif
    Shapes.Move(fond,incx -32 ,incy – 32)

    For i= 1 To islandcount
    islx = posx[i]+incislandx[i]
    isly = posy[i]+incislandy[i]
    Shapes.Move(Array.GetValue(island_Array,i),islx,isly)
    EndFor

    incy = incy + bgs
    incby = incby+ bgs
    For i= 1 To islandcount
    incislandy[i] = incislandy[i] + bgs
    EndFor

    If (incy = 32) Then
    incy =0
    Endif

    For i= 1 To islandcount
    If ((posy[i]+incislandy[i]) > (gameHeight+15)) Then ‘relaunch island if no more visible
    R= Math.Round(Math.GetRandomNumber(nbrisland))
    AA = Math.Remainder(TimePlay,6)
    ‘give new coordinates
    posx[i]= islandPos[AA][2]
    posy[i]= islandPos[AA][3]
    Shapes.move(Array.GetValue(island_Array,R),posx[i],posy[i])
    incislandy[i]=0
    incislandx[i]=0
    EndIf
    ENDFOR
    ‘ Move playerammo
    For i = 1 To Player_AmmoCount
    Player_Ammox = Shapes.GetLeft(Array.GetValue(Player_Ammo, i)) +incbx
    Player_Ammoy = Shapes.GetTop(Array.GetValue(Player_Ammo, i)) – Player_Ammospeed
    Shapes.Move(Array.GetValue(Player_Ammo, i), Player_Ammox, Player_Ammoy)
    Array.SetValue(Player_AmmoAge, i, Array.GetValue(Player_AmmoAge, i) + 1)
    EndFor
    ‘ Move Enemy ammo
    For iea = 1 To Enemy_AmmoCount
    dx =(Math.Sin((Array.GetValue(Enemy_Ammo_Angle, iea) )) * Enemy_Ammospeed)
    dy =(Math.Cos((Array.GetValue(Enemy_Ammo_Angle, iea) ))* Enemy_Ammospeed)
    Enemy_Ammox = Shapes.GetLeft(Array.GetValue(Enemy_Ammo, iea)) +dx+incbx
    Enemy_Ammoy = Shapes.GetTop(Array.GetValue(Enemy_Ammo, iea)) +dy+incby*0.1
    Shapes.Move(Array.GetValue(Enemy_Ammo, iea), Enemy_Ammox, Enemy_Ammoy)
    Array.SetValue(Enemy_AmmoAge, iea, Array.GetValue(Enemy_AmmoAge, iea) + 1)
    EndFor

    ‘ move ennemies
    For i=1 To enemy_Count
    ‘ move as TimeLine and Path say
    eNBR= Array.GetValue(enemy_PathNBR,i)
    uu =Array.GetValue(enemy_line,i)
    Time= Array.GetValue(enemy_TimeLine, i)
    etl=enemyPath[eNBR][1][uu]  ‘enemy own timeLine
    IF (Time=etl) Then  ‘it’s time to rotate enemy
    rr = enemyPath[eNBR][2][uu+1]
    Shapes.Rotate(Array.GetValue(enemy_Array,i),rr)
    EndIf
    IF (Time > etl)  Then
    uu = uu+1
    Array.SetValue(enemy_line,i,uu)    ‘ next line for enemy move
    EndIf
    xx1=Array.GetValue(enemy_PosX,i)
    yy1= Array.GetValue(enemy_PosY,i)
    xx = xx1+enemyPath[eNBR][3][uu]+incbx
    yy = yy1+enemyPath[eNBR][4][uu]+incby*0.1
    ‘ Randomly fire-enemy
    If (Math.GetRandomNumber(Enemy_Agresivity)=1) Then
    Enemy_ShootX = xx1 + 16
    Enemy_ShootY = yy1 + 4
    If (yy1 > 0 AND xx1 > 0 And yy1< gameHeight And xx1 < gameWidth) then
    ‘this avoid enemy fire from outside the screen
    fire_Enemy()
    Endif
    EndIf

    Shapes.Move(Array.GetValue(enemy_Array,i),xx,yy)
    Array.SetValue(enemy_PosX,i,xx)
    Array.SetValue(enemy_PosY,i,yy)
    Array.SetValue(enemy_TimeLine, i, Time + 1)
    If ((uu > enemyPath[eNBR][0][0]) And (Time > etl)) Then ‘ if last timelife remove the enemy sprite
    next_enemy_remove = i
    remove_enemy()
    endif
    Collision_pbe()
    Collision_ep()
    EndFor

    EndSub

    Sub RemovePlayer_Ammo
    Shapes.Remove(Array.GetValue(Player_Ammo, Player_Ammo_nextRemove))
    For iz = Player_Ammo_nextRemove To Player_AmmoCount – 1
    Array.SetValue(Player_Ammo, iz, Array.GetValue(Player_Ammo, iz+1))
    Array.SetValue(Player_AmmoAge, iz, Array.GetValue(Player_AmmoAge, iz+1))
    EndFor
    Array.RemoveValue(Player_Ammo, Player_AmmoCount)
    Array.RemoveValue(Player_AmmoAge, Player_AmmoCount)
    Player_AmmoCount = Player_AmmoCount – 1
    EndSub

    Sub RemoveEnemy_Ammo
    Shapes.Remove(Array.GetValue(Enemy_Ammo, Enemy_Ammo_nextRemove))
    For irea = Enemy_Ammo_nextRemove To Enemy_AmmoCount – 1
    Array.SetValue(Enemy_Ammo, irea, Array.GetValue(Enemy_Ammo, irea+1))
    Array.SetValue(Enemy_AmmoAge, irea, Array.GetValue(Enemy_AmmoAge, irea+1))
    Array.SetValue(Enemy_Ammo_Angle, irea, Array.GetValue(Enemy_Ammo_Angle,irea+1))

    EndFor
    Array.RemoveValue(Enemy_Ammo, Enemy_AmmoCount)
    Array.RemoveValue(Enemy_AmmoAge, Enemy_AmmoCount)
    Array.RemoveValue(Enemy_Ammo_Angle,Enemy_AmmoCount)
    Enemy_AmmoCount = Enemy_AmmoCount – 1
    EndSub

    Sub fire
    ‘ Remove additional player Ammo
    While(Player_AmmoCount > Player_AmmoMax )
    Player_Ammo_nextRemove = 1
    RemovePlayer_Ammo()
    EndWhile

    ‘ Add the player Ammo

    Player_AmmoCount = Player_AmmoCount + 1
    Array.SetValue(Player_Ammo, Player_AmmoCount, Shapes.AddImage(bullet0))
    Shapes.Move(Array.GetValue(Player_Ammo, Player_AmmoCount), ShootX, ShootY)
    EndSub

    Sub fire_Enemy
    ‘ Remove additional Enemy Ammo
    While(Enemy_AmmoCount > (Enemy_AmmoMax – 1))
    Enemy_Ammo_nextRemove = 1
    RemoveEnemy_Ammo()
    EndWhile

    ‘ Add the Enemy Ammo

    Enemy_AmmoCount = Enemy_AmmoCount + 1
    Array.SetValue(Enemy_Ammo, Enemy_AmmoCount, Shapes.AddImage(Enemy_bullet))
    Array.SetValue(Enemy_Ammo_Angle, Enemy_AmmoCount,Math.ArcTan((paddleX- Enemy_ShootX+player_size/2)/(paddleY-Enemy_ShootY)))
    Shapes.Move(Array.GetValue(Enemy_Ammo, Enemy_AmmoCount), Enemy_ShootX, Enemy_ShootY)
    EndSub

    ‘Check playerammo age
    Sub AgePlayer_Ammo
    While (Array.GetValue(Player_AmmoAge, 1) > Player_AmmoLife)
    Player_Ammo_nextRemove = 1
    RemovePlayer_Ammo()
    EndWhile
    EndSub
    ‘Check enemy ammo age
    Sub AgeEnemy_Ammo
    While (Array.GetValue(Enemy_AmmoAge, 1) > Enemy_AmmoLife)
    Enemy_Ammo_nextRemove = 1
    RemoveEnemy_Ammo()
    EndWhile
    EndSub

    Sub remove_enemy
    Shapes.remove(Array.GetValue(enemy_Array,next_enemy_remove))
    ‘ Remove all references from the arrays
    For ii = next_enemy_remove To enemy_Count – 1
    Array.SetValue(enemy_Array, ii, Array.GetValue(enemy_Array, ii+1))
    Array.SetValue(enemy_line, ii, Array.GetValue(enemy_line, ii+1))
    Array.SetValue(enemy_PosX, ii, Array.GetValue(enemy_PosX, ii+1))
    Array.SetValue(enemy_PosY, ii, Array.GetValue(enemy_PosY, ii+1))
    Array.SetValue(enemy_TimeLine, ii, Array.GetValue(enemy_TimeLine, ii+1))
    Array.SetValue(enemy_PathNBR, ii , Array.GetValue(enemy_PathNBR, ii+1))
    EndFor
    Array.RemoveValue(enemy_Array, enemy_Count)
    Array.RemoveValue(enemy_line, enemy_Count)
    Array.RemoveValue(enemy_PosX, enemy_Count)
    Array.RemoveValue(enemy_PosY, enemy_Count)
    Array.RemoveValue(enemy_TimeLine, enemy_Count)
    Array.RemoveValue(enemy_PathNBR,enemy_Count)
    enemy_Count = enemy_Count – 1
    EndSub

    Sub create_enemies_left

    TimeLine1 =0
    For i=1 To enemy_Nbr
    enemy_Count= enemy_Count + 1
    Array.SetValue(enemy_PathNBR,enemy_Count,pathNBR)
    If (enemy_type = 2) Then
    Array.SetValue(enemy_Array, enemy_Count,Shapes.AddImage(enemy2))
    Else
    Array.SetValue(enemy_Array, enemy_Count,Shapes.AddImage(enemy))
    EndIf
    Array.SetValue(enemy_line,enemy_Count,1)
    Array.SetValue(enemy_PosX, enemy_Count,enemyPosX1)
    Array.SetValue(enemy_PosY, enemy_Count,enemyPosY1)
    Array.SetValue(enemy_TimeLine, enemy_Count, TimeLine1)

    enemyPosX1 = enemyPosX1 – 64 ‘distance between ennemies
    TimeLine1 = TimeLine1 – 64 / enemy_speed
    EndFor
    For i=(enemy_Count-enemy_Nbr+1) To enemy_Count
    xxx=Array.GetValue(enemy_PosX,i)
    yyy= Array.GetValue(enemy_PosY,i)
    Shapes.Move(Array.GetValue(enemy_Array,i),xxx,yyy)
    EndFor
    EndSub
    Sub create_enemies_right

    TimeLine1 =0
    For i=1 To enemy_Nbr
    enemy_Count= enemy_Count + 1
    Array.SetValue(enemy_PathNBR,enemy_Count,pathNBR)
    Array.SetValue(enemy_Array, enemy_Count,Shapes.AddImage(enemy))
    Array.SetValue(enemy_line,enemy_Count,1)
    Array.SetValue(enemy_PosX, enemy_Count,enemyPosX1)
    Array.SetValue(enemy_PosY, enemy_Count,enemyPosY1)
    Array.SetValue(enemy_TimeLine, enemy_Count, TimeLine1)

    enemyPosX1 = enemyPosX1 + 64 ‘distance between ennemies
    TimeLine1 = TimeLine1 – 64 / enemy_speed
    EndFor
    For i=(enemy_Count-enemy_Nbr+1) To enemy_Count
    xxx=Array.GetValue(enemy_PosX,i)
    yyy= Array.GetValue(enemy_PosY,i)
    Shapes.Move(Array.GetValue(enemy_Array,i),xxx,yyy)
    EndFor
    EndSub
    Sub Collision_pbe   ‘for player-bullet and enemies

    For i1 = 1 To Player_AmmoCount
    ‘ player bullet position
    Player_Ammox = Shapes.GetLeft(Array.GetValue(Player_Ammo, i1))
    Player_Ammoy = Shapes.GetTop(Array.GetValue(Player_Ammo, i1))
    px1=Player_Ammox+player_bullet_size/3   ‘in order to have a more precise collison than the bullet image size
    py1=Player_Ammoy+player_bullet_size/3
    px2=px1+2*player_bullet_size/3
    py2=py1+2*player_bullet_size/3

    For i2 = 1 to enemy_Count
    ‘ enemy position

    ax1=Array.GetValue(enemy_PosX,i2)+enemy_size/4
    ay1=Array.GetValue(enemy_PosY,i2)+enemy_size/4

    ax2=ax1+3*enemy_size/4
    ay2=ay1+3*enemy_size/4

    If ( (ax1 < px1 And ax2 > px1) Or (ax1 < px2 And ax2 > px2) ) Then
    If ( (ay1 < py1 And ay2 > py1) Or (ay1 < py2 And ay2 > py2) ) Then
    ‘ collision between enemy nbr i2 and player bullet i
    ‘ remove bullet i and animate explosion and remove enemy i2
    Player_Ammo_nextRemove = i1
    RemovePlayer_Ammo()
    next_enemy_remove = i2
    remove_enemy()
    ‘ begin animation for explosion at coordinate ax1, ay1
    toto= Shapes.AddImage(enemy_expl1)
    Shapes.move(toto,ax1,ay1)
    Program.Delay(30)
    Shapes.Remove(toto)
    toto= Shapes.AddImage(enemy_expl2)
    Shapes.move(toto,ax1,ay1)
    Program.Delay(30)
    Shapes.Remove(toto)
    score = score +100
    EndIf
    EndIf
    EndFor

    Endfor

    EndSub

    Sub Collision_ep   ‘for enemies and player
    px1 = Shapes.GetLeft(player)
    py1 = Shapes.GetTop(player)
    px2 = px1 + player_size
    py2 = py1 + player_size

    ‘Shapes.Move(Shapes.AddRectangle(px2-px1 ,py2-py1), px1, py1)
    For i2 = 1 to enemy_Count
    ‘ enemy position

    ax1=Array.GetValue(enemy_PosX,i2)
    ay1=Array.GetValue(enemy_PosY,i2)

    ax2=ax1+enemy_size
    ay2=ay1+enemy_size
    ‘Shapes.Move(Shapes.AddRectangle(ax2-ax1 ,ay2-ay1), ax1, ay1)

    If ( (px1 < ax1 And px2 > ax1) Or (px1 < ax2 And px2 > ax2) ) Then
    If ( (py1 < ay1 And py2 > ay1) Or (py1 < ay2 And py2 > ay2) ) Then
    ‘ collision between enemy nbr i2 and player
    ‘ animate explosion and decrease lives
    next_enemy_remove = i2
    remove_enemy()
    ‘ begin animation for explosion at coordinate ax1, ay1
    toto= Shapes.AddImage(enemy_expl1)
    Shapes.move(toto,ax1,ay1)
    Program.Delay(30)
    Shapes.Remove(toto)
    toto= Shapes.AddImage(player_expl)
    Shapes.move(toto,ax1,ay1)
    Program.Delay(300)
    Shapes.Remove(toto)
    Player_Lives = Player_Lives -1
    If (Player_Lives = 0) THEN
    Program.End()
    EndIf
    EndIf
    EndIf
    EndFor
    px1 = paddleX
    py1 = paddleY
    px2 = px1 + player_size
    py2 = py1 + player_size
    ‘Shapes.Move(Shapes.AddRectangle(px2-px1 ,py2-py1), px1, py1)
    For i3 = 1 to Enemy_AmmoCount
    ‘ enemy position

    ax1=Shapes.GetLeft(Array.GetValue(enemy_Ammo,i3))
    ay1=Shapes.GetTop(Array.GetValue(enemy_Ammo,i3))

    ax2=ax1+enemy_ammo_size
    ay2=ay1+enemy_ammo_size
    ‘Shapes.Move(Shapes.AddRectangle(ax2-ax1 ,ay2-ay1), ax1, ay1)

    If ( (px1 < ax1 And px2 > ax1) Or (px1 < ax2 And px2 > ax2) ) Then
    If ( (py1 < ay1 And py2 > ay1) Or (py1 < ay2 And py2 > ay2) ) Then
    ‘ collision between enemy ammo nbr i3 and player
    ‘ animate explosion and decrease lives
    Enemy_Ammo_nextRemove = i3
    RemoveEnemy_Ammo()

    ‘ begin animation for explosion at coordinate ax1, ay1
    toto= Shapes.AddImage(enemy_expl1)
    Shapes.move(toto,paddleX+ player_size/2,paddleY+ player_size/2)
    Program.Delay(30)
    Shapes.Remove(toto)
    toto= Shapes.AddImage(player_expl)
    Shapes.move(toto,paddleX+ player_size/2,paddleY+ player_size/2)
    Program.Delay(300)
    Shapes.Remove(toto)
    Player_Lives = Player_Lives -1
    If (Player_Lives = 0) THEN
    Program.End()
    EndIf
    EndIf
    EndIf
    EndFor

    EndSub

    Sub IslandsPosition
    ‘ island positions, avoid randomGeneration and islands overlap
    islandPos[0][1]=1
    islandPos[0][2]=0
    islandPos[0][3]=-150

    islandPos[1][1]=1
    islandPos[1][2]=-Math.Round(gameWidth/2)
    islandPos[1][3]=-150

    islandPos[2][1]=2
    islandPos[2][2]=-2*Math.Round(gameWidth/3)
    islandPos[2][3]=-150

    islandPos[3][1]=1
    islandPos[3][2]=2*Math.Round(gameWidth/3)
    islandPos[3][3]=-150

    islandPos[4][1]=2
    islandPos[4][2]=gameWidth
    islandPos[4][3]=-150

    islandPos[5][1]=3
    islandPos[5][2]=Math.Round(gameWidth/3)
    islandPos[5][3]=-150

    islandPos[6][1]=3
    islandPos[6][2]=-gameWidth
    islandPos[6][3]=-150
    EndSub

    Sub define_paths
    enemyPath[0][0][0] = 3  ‘nbr of strait lines of path
    enemyPath[0][1][1] = 30  ‘from 0 to this in timeline
    enemyPath[0][1][2] = 100 ‘ from this to next in timeline
    enemyPath[0][1][3] = 400   ‘sprite goes up

    enemyPath[0][2][1] = 0 ‘first line rotation = 0
    enemyPath[0][2][2] = 45 ‘ second line rotation = 45
    enemyPath[0][2][3] = 45

    enemyPath[0][3][1] = enemy_speed ‘ first line x movment
    enemyPath[0][3][2] = enemy_speed ‘second line x movment
    enemyPath[0][3][3] = enemy_speed ‘ third line …

    enemyPath[0][4][1] = 0 ‘ first line y movment
    enemyPath[0][4][2] = enemy_speed
    enemyPath[0][4][3] = enemy_speed
    ‘———- second path
    enemyPath[1][0][0] = 4
    enemyPath[1][1][1] = 1
    enemyPath[1][1][2] = 1
    enemyPath[1][1][3] = 100
    enemyPath[1][1][4] = 400

    enemyPath[1][2][1] = 180
    enemyPath[1][2][2] = 135
    enemyPath[1][2][3] = 135
    enemyPath[1][2][4] = 90

    enemyPath[1][3][1] = -enemy_speed
    enemyPath[1][3][2] = -enemy_speed
    enemyPath[1][3][3] = -enemy_speed
    enemyPath[1][3][4] = 0

    enemyPath[1][4][1] = 0
    enemyPath[1][4][2] = 0
    enemyPath[1][4][3] = enemy_speed
    enemyPath[1][4][4] = enemy_speed
    ‘round r=5
    enemyPath[2][0][0]=21
    enemyPath[2][1][1]=50
    enemyPath[2][1][2]=55
    enemyPath[2][1][3]=60
    enemyPath[2][1][4]=65
    enemyPath[2][1][5]=70
    enemyPath[2][1][6]=75
    enemyPath[2][1][7]=80
    enemyPath[2][1][8]=85
    enemyPath[2][1][9]=90
    enemyPath[2][1][10]=95
    enemyPath[2][1][11]=100
    enemyPath[2][1][12]=105
    enemyPath[2][1][13]=110
    enemyPath[2][1][14]=115
    enemyPath[2][1][15]=120
    enemyPath[2][1][16]=125
    enemyPath[2][1][17]=130
    enemyPath[2][1][18]=135
    enemyPath[2][1][19]=140
    enemyPath[2][1][20]=145
    enemyPath[2][1][21]=350
    enemyPath[2][2][1]=0
    enemyPath[2][2][2]=18
    enemyPath[2][2][3]=36
    enemyPath[2][2][4]=54
    enemyPath[2][2][5]=72
    enemyPath[2][2][6]=90
    enemyPath[2][2][7]=108
    enemyPath[2][2][8]=126
    enemyPath[2][2][9]=144
    enemyPath[2][2][10]=162
    enemyPath[2][2][11]=180
    enemyPath[2][2][12]=198
    enemyPath[2][2][13]=216
    enemyPath[2][2][14]=234
    enemyPath[2][2][15]=252
    enemyPath[2][2][16]=-90
    enemyPath[2][2][17]=-72
    enemyPath[2][2][18]=-54
    enemyPath[2][2][19]=-36
    enemyPath[2][2][20]=-18
    enemyPath[2][2][21]=0
    enemyPath[2][3][1]=enemy_speed
    enemyPath[2][3][2]=0.95*enemy_speed
    enemyPath[2][3][3]=0.81*enemy_speed
    enemyPath[2][3][4]=0.59*enemy_speed
    enemyPath[2][3][5]=0.31*enemy_speed
    enemyPath[2][3][6]=0
    enemyPath[2][3][7]=-0.31*enemy_speed
    enemyPath[2][3][8]=-0.59*enemy_speed
    enemyPath[2][3][9]=-0.81*enemy_speed
    enemyPath[2][3][10]=-0.95*enemy_speed
    enemyPath[2][3][11]=-enemy_speed
    enemyPath[2][3][12]=-0.95*enemy_speed
    enemyPath[2][3][13]=-0.81*enemy_speed
    enemyPath[2][3][14]=-0.59*enemy_speed
    enemyPath[2][3][15]=-0.31*enemy_speed
    enemyPath[2][3][16]=0
    enemyPath[2][3][17]=0.31*enemy_speed
    enemyPath[2][3][18]=0.59*enemy_speed
    enemyPath[2][3][19]=0.81*enemy_speed
    enemyPath[2][3][20]=0.95*enemy_speed
    enemyPath[2][3][21]=enemy_speed
    enemyPath[2][4][1]=0
    enemyPath[2][4][2]=0.31*enemy_speed
    enemyPath[2][4][3]=0.59*enemy_speed
    enemyPath[2][4][4]=0.81*enemy_speed
    enemyPath[2][4][5]=0.95*enemy_speed
    enemyPath[2][4][6]=enemy_speed
    enemyPath[2][4][7]=0.95*enemy_speed
    enemyPath[2][4][8]=0.81*enemy_speed
    enemyPath[2][4][9]=0.59*enemy_speed
    enemyPath[2][4][10]=0.31*enemy_speed
    enemyPath[2][4][11]=0
    enemyPath[2][4][12]=-0.31*enemy_speed
    enemyPath[2][4][13]=-0.59*enemy_speed
    enemyPath[2][4][14]=-0.81*enemy_speed
    enemyPath[2][4][15]=-0.95*enemy_speed
    enemyPath[2][4][16]=-enemy_speed
    enemyPath[2][4][17]=-0.95*enemy_speed
    enemyPath[2][4][18]=-0.81*enemy_speed
    enemyPath[2][4][19]=-0.59*enemy_speed
    enemyPath[2][4][20]=-0.31*enemy_speed
    enemyPath[2][4][21]=0
    ‘round r=20
    enemyPath[3][0][0]=21
    enemyPath[3][1][1]=120
    enemyPath[3][1][2]=140
    enemyPath[3][1][3]=160
    enemyPath[3][1][4]=180
    enemyPath[3][1][5]=200
    enemyPath[3][1][6]=220
    enemyPath[3][1][7]=240
    enemyPath[3][1][8]=260
    enemyPath[3][1][9]=280
    enemyPath[3][1][10]=300
    enemyPath[3][1][11]=320
    enemyPath[3][1][12]=340
    enemyPath[3][1][13]=360
    enemyPath[3][1][14]=380
    enemyPath[3][1][15]=400
    enemyPath[3][1][16]=420
    enemyPath[3][1][17]=440
    enemyPath[3][1][18]=460
    enemyPath[3][1][19]=480
    enemyPath[3][1][20]=500
    enemyPath[3][1][21]=600
    enemyPath[3][2][1]=0
    enemyPath[3][2][2]=18
    enemyPath[3][2][3]=36
    enemyPath[3][2][4]=54
    enemyPath[3][2][5]=72
    enemyPath[3][2][6]=90
    enemyPath[3][2][7]=108
    enemyPath[3][2][8]=126
    enemyPath[3][2][9]=144
    enemyPath[3][2][10]=162
    enemyPath[3][2][11]=180
    enemyPath[3][2][12]=198
    enemyPath[3][2][13]=216
    enemyPath[3][2][14]=234
    enemyPath[3][2][15]=252
    enemyPath[3][2][16]=-90
    enemyPath[3][2][17]=-72
    enemyPath[3][2][18]=-54
    enemyPath[3][2][19]=-36
    enemyPath[3][2][20]=-18
    enemyPath[3][2][21]=0
    enemyPath[3][3][1]=enemy_speed
    enemyPath[3][3][2]=0.95*enemy_speed
    enemyPath[3][3][3]=0.81*enemy_speed
    enemyPath[3][3][4]=0.59*enemy_speed
    enemyPath[3][3][5]=0.31*enemy_speed
    enemyPath[3][3][6]=0
    enemyPath[3][3][7]=-0.31*enemy_speed
    enemyPath[3][3][8]=-0.59*enemy_speed
    enemyPath[3][3][9]=-0.81*enemy_speed
    enemyPath[3][3][10]=-0.95*enemy_speed
    enemyPath[3][3][11]=-enemy_speed
    enemyPath[3][3][12]=-0.95*enemy_speed
    enemyPath[3][3][13]=-0.81*enemy_speed
    enemyPath[3][3][14]=-0.59*enemy_speed
    enemyPath[3][3][15]=-0.31*enemy_speed
    enemyPath[3][3][16]=0
    enemyPath[3][3][17]=0.31*enemy_speed
    enemyPath[3][3][18]=0.59*enemy_speed
    enemyPath[3][3][19]=0.81*enemy_speed
    enemyPath[3][3][20]=0.95*enemy_speed
    enemyPath[3][3][21]=enemy_speed
    enemyPath[3][4][1]=0
    enemyPath[3][4][2]=0.31*enemy_speed
    enemyPath[3][4][3]=0.59*enemy_speed
    enemyPath[3][4][4]=0.81*enemy_speed
    enemyPath[3][4][5]=0.95*enemy_speed
    enemyPath[3][4][6]=enemy_speed
    enemyPath[3][4][7]=0.95*enemy_speed
    enemyPath[3][4][8]=0.81*enemy_speed
    enemyPath[3][4][9]=0.59*enemy_speed
    enemyPath[3][4][10]=0.31*enemy_speed
    enemyPath[3][4][11]=0
    enemyPath[3][4][12]=-0.31*enemy_speed
    enemyPath[3][4][13]=-0.59*enemy_speed
    enemyPath[3][4][14]=-0.81*enemy_speed
    enemyPath[3][4][15]=-0.95*enemy_speed
    enemyPath[3][4][16]=-enemy_speed
    enemyPath[3][4][17]=-0.95*enemy_speed
    enemyPath[3][4][18]=-0.81*enemy_speed
    enemyPath[3][4][19]=-0.59*enemy_speed
    enemyPath[3][4][20]=-0.31*enemy_speed
    enemyPath[3][4][21]=0

    ‘round r=10
    enemyPath[4][0][0]=21
    enemyPath[4][1][1]=110
    enemyPath[4][1][2]=120
    enemyPath[4][1][3]=130
    enemyPath[4][1][4]=140
    enemyPath[4][1][5]=150
    enemyPath[4][1][6]=160
    enemyPath[4][1][7]=170
    enemyPath[4][1][8]=180
    enemyPath[4][1][9]=190
    enemyPath[4][1][10]=200
    enemyPath[4][1][11]=210
    enemyPath[4][1][12]=220
    enemyPath[4][1][13]=230
    enemyPath[4][1][14]=240
    enemyPath[4][1][15]=250
    enemyPath[4][1][16]=260
    enemyPath[4][1][17]=270
    enemyPath[4][1][18]=280
    enemyPath[4][1][19]=290
    enemyPath[4][1][20]=300
    enemyPath[4][1][21]=500
    enemyPath[4][2][1]=0
    enemyPath[4][2][2]=18
    enemyPath[4][2][3]=36
    enemyPath[4][2][4]=54
    enemyPath[4][2][5]=72
    enemyPath[4][2][6]=90
    enemyPath[4][2][7]=108
    enemyPath[4][2][8]=126
    enemyPath[4][2][9]=144
    enemyPath[4][2][10]=162
    enemyPath[4][2][11]=180
    enemyPath[4][2][12]=198
    enemyPath[4][2][13]=216
    enemyPath[4][2][14]=234
    enemyPath[4][2][15]=252
    enemyPath[4][2][16]=-90
    enemyPath[4][2][17]=-72
    enemyPath[4][2][18]=-54
    enemyPath[4][2][19]=-36
    enemyPath[4][2][20]=-18
    enemyPath[4][2][21]=0
    enemyPath[4][3][1]=enemy_speed
    enemyPath[4][3][2]=0.95*enemy_speed
    enemyPath[4][3][3]=0.81*enemy_speed
    enemyPath[4][3][4]=0.59*enemy_speed
    enemyPath[4][3][5]=0.31*enemy_speed
    enemyPath[4][3][6]=0
    enemyPath[4][3][7]=-0.31*enemy_speed
    enemyPath[4][3][8]=-0.59*enemy_speed
    enemyPath[4][3][9]=-0.81*enemy_speed
    enemyPath[4][3][10]=-0.95*enemy_speed
    enemyPath[4][3][11]=-enemy_speed
    enemyPath[4][3][12]=-0.95*enemy_speed
    enemyPath[4][3][13]=-0.81*enemy_speed
    enemyPath[4][3][14]=-0.59*enemy_speed
    enemyPath[4][3][15]=-0.31*enemy_speed
    enemyPath[4][3][16]=0
    enemyPath[4][3][17]=0.31*enemy_speed
    enemyPath[4][3][18]=0.59*enemy_speed
    enemyPath[4][3][19]=0.81*enemy_speed
    enemyPath[4][3][20]=0.95*enemy_speed
    enemyPath[4][3][21]=enemy_speed
    enemyPath[4][4][1]=0
    enemyPath[4][4][2]=0.31*enemy_speed
    enemyPath[4][4][3]=0.59*enemy_speed
    enemyPath[4][4][4]=0.81*enemy_speed
    enemyPath[4][4][5]=0.95*enemy_speed
    enemyPath[4][4][6]=enemy_speed
    enemyPath[4][4][7]=0.95*enemy_speed
    enemyPath[4][4][8]=0.81*enemy_speed
    enemyPath[4][4][9]=0.59*enemy_speed
    enemyPath[4][4][10]=0.31*enemy_speed
    enemyPath[4][4][11]=0
    enemyPath[4][4][12]=-0.31*enemy_speed
    enemyPath[4][4][13]=-0.59*enemy_speed
    enemyPath[4][4][14]=-0.81*enemy_speed
    enemyPath[4][4][15]=-0.95*enemy_speed
    enemyPath[4][4][16]=-enemy_speed
    enemyPath[4][4][17]=-0.95*enemy_speed
    enemyPath[4][4][18]=-0.81*enemy_speed
    enemyPath[4][4][19]=-0.59*enemy_speed
    enemyPath[4][4][20]=-0.31*enemy_speed
    enemyPath[4][4][21]=0

    ‘round r=15 + exit down
    enemyPath[5][0][0]=27
    enemyPath[5][1][1]=120
    enemyPath[5][1][2]=125
    enemyPath[5][1][3]=150
    enemyPath[5][1][4]=165
    enemyPath[5][1][5]=180
    enemyPath[5][1][6]=195
    enemyPath[5][1][7]=210
    enemyPath[5][1][8]=225
    enemyPath[5][1][9]=240
    enemyPath[5][1][10]=255
    enemyPath[5][1][11]=270
    enemyPath[5][1][12]=285
    enemyPath[5][1][13]=300
    enemyPath[5][1][14]=315
    enemyPath[5][1][15]=330
    enemyPath[5][1][16]=345
    enemyPath[5][1][17]=360
    enemyPath[5][1][18]=375
    enemyPath[5][1][19]=390
    enemyPath[5][1][20]=405
    enemyPath[5][1][21]=600
    enemyPath[5][1][22]=615
    enemyPath[5][1][23]=630
    enemyPath[5][1][24]=645
    enemyPath[5][1][254]=660
    enemyPath[5][1][26]=675
    enemyPath[5][1][27]=800

    enemyPath[5][2][1]=0
    enemyPath[5][2][2]=18
    enemyPath[5][2][3]=36
    enemyPath[5][2][4]=54
    enemyPath[5][2][5]=72
    enemyPath[5][2][6]=90
    enemyPath[5][2][7]=108
    enemyPath[5][2][8]=126
    enemyPath[5][2][9]=144
    enemyPath[5][2][10]=162
    enemyPath[5][2][11]=180
    enemyPath[5][2][12]=198
    enemyPath[5][2][13]=216
    enemyPath[5][2][14]=234
    enemyPath[5][2][15]=252
    enemyPath[5][2][16]=-90
    enemyPath[5][2][17]=-72
    enemyPath[5][2][18]=-54
    enemyPath[5][2][19]=-36
    enemyPath[5][2][20]=-18
    enemyPath[5][2][21]=0

    enemyPath[5][2][22]=18
    enemyPath[5][2][23]=36
    enemyPath[5][2][24]=54
    enemyPath[5][2][25]=72
    enemyPath[5][2][26]=90
    enemyPath[5][2][27]=90

    enemyPath[5][3][1]=enemy_speed
    enemyPath[5][3][2]=0.95*enemy_speed
    enemyPath[5][3][3]=0.81*enemy_speed
    enemyPath[5][3][4]=0.59*enemy_speed
    enemyPath[5][3][5]=0.31*enemy_speed
    enemyPath[5][3][6]=0
    enemyPath[5][3][7]=-0.31*enemy_speed
    enemyPath[5][3][8]=-0.59*enemy_speed
    enemyPath[5][3][9]=-0.81*enemy_speed
    enemyPath[5][3][10]=-0.95*enemy_speed
    enemyPath[5][3][11]=-enemy_speed
    enemyPath[5][3][12]=-0.95*enemy_speed
    enemyPath[5][3][13]=-0.81*enemy_speed
    enemyPath[5][3][14]=-0.59*enemy_speed
    enemyPath[5][3][15]=-0.31*enemy_speed
    enemyPath[5][3][16]=0
    enemyPath[5][3][17]=0.31*enemy_speed
    enemyPath[5][3][18]=0.59*enemy_speed
    enemyPath[5][3][19]=0.81*enemy_speed
    enemyPath[5][3][20]=0.95*enemy_speed
    enemyPath[5][3][21]=enemy_speed
    enemyPath[5][3][22]=0.95*enemy_speed
    enemyPath[5][3][23]=0.81*enemy_speed
    enemyPath[5][3][24]=0.59*enemy_speed
    enemyPath[5][3][25]=0.31*enemy_speed
    enemyPath[5][3][26]=0
    enemyPath[5][3][27]=0

    enemyPath[5][4][1]=0
    enemyPath[5][4][2]=0.31*enemy_speed
    enemyPath[5][4][3]=0.59*enemy_speed
    enemyPath[5][4][4]=0.81*enemy_speed
    enemyPath[5][4][5]=0.95*enemy_speed
    enemyPath[5][4][6]=enemy_speed
    enemyPath[5][4][7]=0.95*enemy_speed
    enemyPath[5][4][8]=0.81*enemy_speed
    enemyPath[5][4][9]=0.59*enemy_speed
    enemyPath[5][4][10]=0.31*enemy_speed
    enemyPath[5][4][11]=0
    enemyPath[5][4][12]=-0.31*enemy_speed
    enemyPath[5][4][13]=-0.59*enemy_speed
    enemyPath[5][4][14]=-0.81*enemy_speed
    enemyPath[5][4][15]=-0.95*enemy_speed
    enemyPath[5][4][16]=-enemy_speed
    enemyPath[5][4][17]=-0.95*enemy_speed
    enemyPath[5][4][18]=-0.81*enemy_speed
    enemyPath[5][4][19]=-0.59*enemy_speed
    enemyPath[5][4][20]=-0.31*enemy_speed
    enemyPath[5][4][21]=0
    enemyPath[5][4][22]=0.31*enemy_speed
    enemyPath[5][4][23]=0.59*enemy_speed
    enemyPath[5][4][24]=0.81*enemy_speed
    enemyPath[5][4][25]=0.95*enemy_speed
    enemyPath[5][4][26]=enemy_speed
    enemyPath[5][4][27]=enemy_speed

    enemyPath[6][0][0]=3
    enemyPath[6][1][1]=1
    enemyPath[6][1][2]=80
    enemyPath[6][1][3]=200
    enemyPath[6][2][1]=0
    enemyPath[6][2][2]=90
    enemyPath[6][2][3]=-90
    enemyPath[6][3][1]=0
    enemyPath[6][3][2]=0
    enemyPath[6][3][3]=0
    enemyPath[6][4][1]=0
    enemyPath[6][4][2]=enemy_speed
    enemyPath[6][4][3]=-enemy_speed
    EndSub

    Sub create_level1   ‘this define the behavior of the différent squadron along the time play for level 1
    level1[1][1]=20    ‘when timeplay=level1[1][1]
    level1[1][2]= 2     ‘ lauch enemy with Path level1[1][2]
    level1[1][3]= -10   ‘ at x coordinate level1[1][3]
    level1[1][4] = 0      ‘ at y coordinate level1[1][4]
    level1[1][5] = 1      ‘ 1 for create enemy at the left side; 2 for the right side of screen
    level1[1][6] = 4      ‘level[1][6] is the number of enemies
    level1[1][7] = 1      ‘type of enemy

    level1[2][1]= 80
    level1[2][2]= 6
    level1[2][3]= gameWidth/2
    level1[2][4] = -500
    level1[2][5] = 1
    level1[2][6] = 3
    level1[2][7] = 1

    level1[3][1]= 150
    level1[3][2]= 0
    level1[3][3]= -10
    level1[3][4] = 0
    level1[3][5] = 1
    level1[3][6] = 6
    level1[3][7] = 2

    level1[4][1]= 280
    level1[4][2]= 4
    level1[4][3]= -10
    level1[4][4] = 0
    level1[4][5] = 1
    level1[4][6] = 3
    level1[4][7] = 2

    level1[5][1]= 410
    level1[5][2]= 6
    level1[5][3]= gameWidth/3
    level1[5][4] = -50
    level1[5][5] = 1
    level1[5][6] = 3
    level1[5][7] = 1

    level1[6][1]= 430
    level1[6][2]= 6
    level1[6][3]= 2*gameWidth/3
    level1[6][4] = -50
    level1[6][5] = 2
    level1[6][6] = 3
    level1[6][7] = 1

    level1[5][1]= 500
    level1[5][2]= 6
    level1[5][3]= gameWidth/3
    level1[5][4] = -50
    level1[5][5] = 1
    level1[5][6] = 6
    level1[5][7] = 2

    level1[6][1]= 590
    level1[6][2]= 5
    level1[6][3]= 100
    level1[6][4] = -80
    level1[6][5] = 1
    level1[6][6] = 3
    level1[6][7] = 3

    level1[7][1]= 690
    level1[7][2]= 6
    level1[7][3]= gameWidth/3
    level1[7][4] = -50
    level1[7][5] = 2
    level1[7][6] = 3
    level1[7][7] = 2
    For i= 1 To 10
    Level1[7+i][1]=700+50*i
    level1[7+i][2]= 6
    level1[7+i][3]=  math.GetrandomNumber(gameWidth)
    level1[7+i][4] = -50 +i
    level1[7+i][5] = math.GetrandomNumber(2)
    level1[7+i][6] = math.GetrandomNumber(3)
    level1[7+i][7] = math.GetrandomNumber(2)
    EndFor
    level1[18][1]= 1300
    level1[18][2]= 1
    level1[18][3]= gameWidth
    level1[18][4] = -10
    level1[18][5] = 2
    level1[18][6] = 6
    level1[18][7] = 2

    For i= 1 To 10
    Level1[18+i][1]=1330+50*i
    level1[18+i][2]= 4+math.GetrandomNumber(2)
    level1[18+i][3]=  math.GetrandomNumber(50)
    level1[18+i][4] = i
    level1[18+i][5] = 1
    level1[18+i][6] = math.GetrandomNumber(3)
    level1[18+i][7] = math.GetrandomNumber(2)
    EndFor
    For i= 1 To 10
    Level1[28+i][1]=1900+50*i
    level1[28+i][2]= 4+math.GetrandomNumber(2)
    level1[28+i][3]=  -math.GetrandomNumber(50)
    level1[28+i][4] = i
    level1[28+i][5] = 1
    level1[28+i][6] = math.GetrandomNumber(3)
    level1[28+i][7] = math.GetrandomNumber(2)
    EndFor
    For i= 1 To 10
    Level1[38+i][1]=2450+100*i
    level1[38+i][2]= 6
    level1[38+i][3]=  math.GetrandomNumber(gameWidth)
    level1[38+i][4] = -50 +i
    level1[38+i][5] = math.GetrandomNumber(2)
    level1[38+i][6] = math.GetrandomNumber(5)
    level1[38+i][7] = math.GetrandomNumber(2)
    EndFor

    EndSub

  2. // ‘ Copyright (c) Microsoft Corporation. All rights reserved.