Показать сообщение отдельно
Старый 22.02.2007, 21:54   #6
Vyacheslav
ПроЭктировщик
 
Регистрация: 03.01.2007
Сообщений: 133
Написано одно полезное сообщение
(для 4 участников)
Re: Как работать с массивом?

Буду комментировать только самое интересное

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
(Offline)
 
Ответить с цитированием