Basic Univers
#TailleMapX = 40
#TailleMapY = 40
#TailleTileX = 16
#TailleTileY = 8
Structure World
X.f
Y.f
Z.f
WaveHeight_A.f
WaveHeight_B.f
EndStructure
Global WaveSpeed.f : WaveSpeed = 10
Global Dim Map.World(#TailleMapX, #TailleMapY)
If InitSprite()= 0 Or InitMouse()= 0 Or InitKeyboard()= 0
MessageRequester("Erreur", "Impossible d'initialiser DirectX")
End
EndIf
OpenScreen(800 , 600, 32, "")
Declare UpdateMap()
Declare Initialisation_MapIso()
Initialisation_MapIso()
Repeat
ExamineKeyboard() : ExamineMouse() : ClearScreen(RGB(0, 0, 0))
UpdateMap()
FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape)
Procedure UpdateMap()
StartDrawing(ScreenOutput())
DrawingMode(4|1)
FrontColor(RGB(255, 255, 255))
WaveSpeed + 0.1
For Y = 1 To #TailleMapY
For X = 1 To #TailleMapX
Map(x, y)\WaveHeight_A = x*Cos((x*20*2*0.144)+ WaveSpeed)
Map(y, x)\WaveHeight_B = x*Cos((x*20*2*0.144)+ WaveSpeed)
Map(X, Y)\Z =(Map(x, y)\WaveHeight_A + Map(x, y)\WaveHeight_B)/2
If x =>1 And x<#TailleMapX And y =>1 And y<#TailleMapY
LineXY(352 + Map(X, Y)\X , 150 + Map(X, Y)\Y - Map(X, Y)\Z , 352 + Map(X + 1, Y)\X , 150 + Map(X + 1, Y)\Y - Map(X + 1, Y)\Z)
LineXY(352 + Map(X, Y)\X , 150 + Map(X, Y)\Y - Map(X, Y)\Z , 352 + Map(X, Y + 1)\X , 150 + Map(X, Y + 1)\Y - Map(X, Y + 1)\Z)
EndIf
Next : Next
StopDrawing()
EndProcedure
Procedure Initialisation_MapIso()
Shared DecalageX.l, DecalageY.l, Offset.l
For Y = 1 To #TailleMapY
For X = 1 To #TailleMapX
DecalageX = DecalageX +(#TailleTileX/2)
DecalageY = DecalageY +(#TailleTileY/2)
Map(X, Y)\X = DecalageX
Map(X, Y)\Y = DecalageY
Next X
Offset + 1
DecalageX = -(Offset*(#TailleTileX/2))
DecalageY =(#TailleTileY/2)*Offset
Next Y
EndProcedure