
Type Camera
Field obj
End Type
Global terrain
Dim masLand(32,6,32)
Graphics3D 640,480,16,2
SetBuffer BackBuffer()
Global fontA=LoadFont ("Arial",24)
SetFont fontA
fnCreateCam1()
fnCreateTerr()
light=CreateLight()
RotateEntity light,90,0,0
player=CreateCube()
EntityColor player,0,100,255
cube_for_copy=CreateCube()
EntityColor cube_for_copy,0,0,255
HideEntity cube_for_copy
Dim m(17,17)
SeedRnd MilliSecs()
;это не знаю, зачем, спросите у HolyDel, я не очень вникал
For i=0 To 17
m(i,0)=1
m(0,i)=1
m(i,17)=1
m(17,1)=1
Next
; здесь рандомом создаются единицы, чтобы потом знать, где блоки
For i=1 To 16
For j=1 To 16
m(i,j)=Rand(0,1)
Next
Next
; здесь я создал тип для блоков
Type N_Brick
Field mesh
Field x,y,z
End Type
m(1,1)=0
px=1:py=1
PositionEntity player,2.2,0,-2.2
; здесь размещаю блоки, i*2.2,0,-j*2.2 - исходя из i,j массива
For i=1 To 16
For j=1 To 16
If m(i,j)=1
block.N_Brick= New N_Brick
block\mesh=CopyEntity(cube_for_copy)
PositionEntity block\mesh,i*2.2,0,-j*2.2
EndIf
Next
Next
Repeat
; ну и здесь проверяется и двигается главный герой
If KeyHit(203) And m(px-1,py)=0
MoveEntity player,-2.2,0,0
px=px-1
EndIf
If KeyHit(205) And m(px+1,py)=0
MoveEntity player,2.2,0,0
px=px+1
EndIf
If KeyHit(208) And m(px,py+1)=0
MoveEntity player,0,0,-2.2
py=py+1
EndIf
If KeyHit(200) And m(px,py-1)=0
MoveEntity player,0,0,2.2
py=py-1
EndIf
UpdateWorld ()
RenderWorld ()
Flip
Until KeyDown(1)
Function fnCreateTerr()
terrain=CreateTerrain(32)
EntityColor terrain,0,128,255
EntityAlpha terrain,.5
MoveEntity terrain,-.5,0,-38
ScaleEntity terrain,1.2,1.2,1.2
End Function
Function freeTerrain()
FreeEntity terrain
End Function
Function fnCreateCam1.camera()
Local cam1.camera
cam1 = New Camera
cam1\obj = CreateCamera()
; CameraClsColor cam1\obj,0,255,0
PositionEntity cam1\obj,15,35,-20
RotateEntity cam1\obj,90,0,0
Return cam1
End Function
Function fnDeleteCam1(cam1.camera)
For cam1.camera = Each camera
FreeEntity cam1\obj
Delete cam1
Next
End Function