Re: Comment faire un jeu de lancer de dés en 3D
Publié : lun. 01/juin/2020 15:25
Ah ouais sympa en effet ^^
Forums PureBasic - Français
http://forums.purebasic.com/french/
Code : Tout sélectionner
Procedure.f POM(v.f)
ProcedureReturn (Random(v*1000)-v*500)/500
EndProcedure
Procedure create_dice(mesh,taille.f)
Protected i,j,k,kk, num
Protected.f vi,vj,vk,u,v
CreateMesh(mesh)
For kk=0 To 2
For k=0 To 1
AddSubMesh()
For i=0 To 1
For j=0 To 1
vi=(i-0.5)*taille
vj=(j-0.5)*taille
vk=(k-0.5)*taille
u=i*(k*2-1)
v=j
Select kk
Case 0:MeshVertex(vi,vk,vj,u,v,0)
Case 1:MeshVertex(-vk,vi,vj,u,v,0)
Case 2:MeshVertex(vi,vj,-vk,u,v,0)
EndSelect
Next
Next
If k
MeshFace(0,1,2)
MeshFace(1,3,2)
Else
MeshFace(2,1,0)
MeshFace(2,3,1)
EndIf
SetMeshMaterial(mesh,MaterialID(num+1),num)
num+1
Next
Next
FinishMesh(1)
NormalizeMesh(mesh)
EndProcedure
Define.f mousex,mousey,keyx,keyz,a,da
Define i,j,ex,ey,txt.s
InitEngine3D():InitSprite():InitKeyboard():InitMouse()
OpenWindow(0, 0, 0, 0,0, "souris + fleche - espace pour relancer",#PB_Window_Maximize)
ex=WindowWidth (0,#PB_Window_InnerCoordinate)
ey=WindowHeight(0,#PB_Window_InnerCoordinate)
OpenWindowedScreen(WindowID(0), 0, 0, ex, ey, 0, 0, 0)
CreateCamera(0, 0, 0, 100, 100):MoveCamera(0,0,10,-16)
CreateLight(0,$ffffff, 5, 5, 0)
AmbientColor($444444)
CameraBackColor(0,$0)
CameraLookAt(0,0,1,0)
LightAttenuation(0, 100,0.4)
; ----------------------------------------- table
CreateTexture(10,256,256)
StartDrawing(TextureOutput(10))
For i=0 To 255
For j=0 To 255
Plot(i,j,Random(150,100)*$000100)
Next
Next
StopDrawing()
CreateMaterial(10,TextureID(10))
ScaleMaterial(10,0.2,0.2)
CreateCylinder(10,8,0.2,64,1,1)
CreateEntity(10,MeshID(10),MaterialID(10)):CreateEntityBody(10,#PB_Entity_StaticBody,1,0.1,1)
CreateTube(11,8,7.5,2,64,1)
CreateEntity(11,MeshID(11),MaterialID(10)):CreateEntityBody(11,#PB_Entity_StaticBody,1,0.1,1)
; ----------------------------------------- dés
LoadFont(0, "Arial", 200)
For i=1 To 6
CreateTexture(i,256,256)
StartDrawing(TextureOutput(i))
BackColor($ff)
FrontColor($ffff)
Box(0,0,256,256,$ff)
DrawingFont(FontID(0))
txt=Str(i)
DrawText((256-TextWidth(txt))/2,(256-TextHeight(txt))/2,txt)
StopDrawing()
CreateMaterial(i,TextureID(i))
Next
Create_dice(0,1)
For i=0 To 4
CreateEntity(i,MeshID(0),#PB_Material_None):CreateEntityBody(i,#PB_Entity_BoxBody,1,0.5,1)
Next
WorldShadows(#PB_Shadow_Modulative)
Procedure drop_dice()
Protected i
For i=0 To 4
MoveEntity(i,pom(1),10+i*2,pom(1),#PB_Absolute)
ApplyEntityTorqueImpulse(i,pom(1),pom(1),pom(1),#PB_Local )
Next
EndProcedure
drop_dice()
Repeat
ExamineMouse()
MouseX = -MouseDeltaX() * 0.05
MouseY = -MouseDeltaY() * 0.05
ExamineKeyboard()
If KeyboardReleased(#PB_Key_Space):drop_dice():EndIf
keyx=(-Bool(KeyboardPushed(#PB_Key_Left)<>0)+Bool(KeyboardPushed(#PB_Key_Right)<>0))*0.1
keyz=(-Bool(KeyboardPushed(#PB_Key_Down)<>0)+Bool(KeyboardPushed(#PB_Key_Up )<>0)+MouseButton(1)-MouseButton(2))*0.1+MouseWheel()*1
RotateCamera(0, MouseY, MouseX, 0, #PB_Relative):MoveCamera (0, KeyX, 0, -keyz)
RenderWorld()
FlipBuffers()
Until WindowEvent() = #PB_Event_CloseWindow Or KeyboardReleased(#PB_Key_Escape) Or MouseButton(3)
Bonjour Fig. Parce que a priori tu n'as pas DirectX9.Fig a écrit :Mais pourquoi Worldshadow() plante ?
Doux euphémisme....Shadow a écrit :Whaaahooo c'est pas mal ça merci Guillot !