J'ai juste bricolé ce truc pour voir ce que ça donnerait , et donner des idées pour d'autres jeux de ce type.
Le moteur physique fait tout le boulot, c'est cool.
Barre espace pour lancer la bille, et les flèches gauche et droite pour diriger la raquette.
[EDIT]
Correction suite à la remarque de Mesa, et ajout d'une correction de la trajectoire de la balle, pour éviter qu'elle rebondisse indéfiniment entre 2 murs, et ajout d'une petite animation quand une brique est touchée.
Code : Tout sélectionner
IncludeFile #PB_Compiler_Home + "Examples/3D/Screen3DRequester.pb"
Macro CreateCadre(x, y, z, sx, sy, sz, m, r, f)
Cadre = CreateEntity(#PB_Any, MeshID(1), MaterialID(2), x, y, z)
ScaleEntity(Cadre, sx, sy, sz)
EntityPhysicBody(Cadre, #PB_Entity_BoxBody, m, r, f)
EndMacro
#CameraSpeed = 1
Define.f KeyX, KeyY, MouseX, MouseY, Angle = 145
NewList BriquesTouchees()
If InitEngine3D()
InitSprite()
InitKeyboard()
InitMouse()
If Screen3DRequester()
Add3DArchive(#PB_Compiler_Home + "Examples/3D/Data/Textures", #PB_3DArchive_FileSystem)
Add3DArchive(#PB_Compiler_Home + "Examples/3D/Data/Scripts",#PB_3DArchive_FileSystem)
Add3DArchive(#PB_Compiler_Home + "Examples/3D/Data/Packs/desert.zip", #PB_3DArchive_Zip)
Parse3DScripts()
WorldShadows(#PB_Shadow_Modulative)
WorldGravity(0)
;-Materials
CreateMaterial(0, LoadTexture(0, "Wood.jpg"))
GetScriptMaterial(1, "SphereMap/SphereMappedRustySteel")
GetScriptMaterial(2, "Color/Blue")
GetScriptMaterial(3, "Scene/GroundBlend")
;-Mesh
CreateCube(1, 1.0)
CreateSphere(2, 1, 30, 30)
;-Entity
Sphere = CreateEntity(#PB_Any, MeshID(2), MaterialID(1), 0, 50, 0)
EntityPhysicBody(Sphere, #PB_Entity_SphereBody, 1, 1, 0)
EntityLinearFactor(Sphere, 1, 1, 0)
; Cadre
CreateCadre( 0, 0, 0, 50, 1, 4, 0, 1.0, 0)
CreateCadre( 0, 90, 0, 50, 1, 4, 0, 1.0, 0)
CreateCadre(-25, 45, 0, 1, 90, 4, 0, 1.0, 0)
CreateCadre( 25, 45, 0, 1, 90, 4, 0, 1.0, 0)
;Briques
For j=0 To 3
For i = 0 To 10
n + 1
Brique = CreateEntity(n, MeshID(1), MaterialID(0), 20 - i * 4, 80 - j * 4, 0)
ScaleEntity(n, 2, 2, 2)
EntityPhysicBody(n, #PB_Entity_BoxBody, 0, 1, 0)
Next
Next
;Raquette
Raquette = CreateEntity(#PB_Any, MeshID(1), MaterialID(1), 0, 40, 0)
ScaleEntity(Raquette, 6, 1, 2)
EntityPhysicBody(Raquette, #PB_Entity_BoxBody, 0, 1, 0)
;-Camera
CreateCamera(0, 0, 0, 100, 100)
MoveCamera(0, 0, 45, -110, #PB_Absolute)
CameraLookAt(0, 0, 45, 0)
;-Skybox
SkyBox("desert07.jpg")
;-Light
CreateLight(0, RGB(255, 255, 255), 100, 800, -500)
AmbientColor(RGB(20, 20, 20))
Repeat
Screen3DEvents()
ExamineMouse()
If ExamineKeyboard()
If KeyboardPushed(#PB_Key_Left) And EntityX(Raquette) < 22
MoveEntity(Raquette, EntityX(Raquette)+0.5, EntityY(Raquette), EntityZ(Raquette),#PB_Absolute)
ElseIf KeyboardPushed(#PB_Key_Right) And EntityX(Raquette) > -22
MoveEntity(Raquette, EntityX(Raquette)-0.5, EntityY(Raquette), EntityZ(Raquette),#PB_Absolute)
EndIf
If KeyboardReleased(#PB_Key_Space)
ApplyEntityImpulse(Sphere, Random(20)-10, -60, 0)
EndIf
EndIf
If Abs(GetEntityAttribute(Sphere, #PB_Entity_LinearVelocityY)) < 2 And GetEntityAttribute(Sphere, #PB_Entity_LinearVelocityX) <> 0
ApplyEntityImpulse(Sphere, 0, GetEntityAttribute(Sphere, #PB_Entity_LinearVelocityY) * 3, 0)
Debug "correction Y" + StrF(GetEntityAttribute(Sphere, #PB_Entity_LinearVelocityY))
EndIf
If Abs(GetEntityAttribute(Sphere, #PB_Entity_LinearVelocityX)) < 2 And GetEntityAttribute(Sphere, #PB_Entity_LinearVelocityY) <> 0
ApplyEntityImpulse(Sphere, GetEntityAttribute(Sphere, #PB_Entity_LinearVelocityX) * 3, 0, 0)
Debug "correction X" + StrF(GetEntityAttribute(Sphere, #PB_Entity_LinearVelocityX))
EndIf
SetEntityAttribute(Sphere, #PB_Entity_MaxVelocity, 60)
If ExamineWorldCollisions(#False)
While NextWorldCollision()
If SecondWorldCollisionEntity() <= n
AddElement(BriquesTouchees())
x.f = EntityX(SecondWorldCollisionEntity())
y.f = EntityY(SecondWorldCollisionEntity())
z.f = EntityZ(SecondWorldCollisionEntity())
BriquesTouchees() = CreateEntity(#PB_Any, MeshID(1), MaterialID(0), x, y, z)
ScaleEntity(BriquesTouchees(), 2, 2, 2)
FreeEntity(SecondWorldCollisionEntity())
ElseIf FirstWorldCollisionEntity() <= n
FreeEntity(FirstWorldCollisionEntity())
EndIf
Wend
EndIf
ForEach BriquesTouchees()
RotateEntity(BriquesTouchees(), 1, 1, 1, #PB_Relative)
MoveEntity(BriquesTouchees(), 0, -0.3, 0, #PB_Relative)
If EntityY(BriquesTouchees()) < 35
FreeEntity(BriquesTouchees())
DeleteElement(BriquesTouchees())
EndIf
Next
If EntityY(Sphere) < 35
MoveEntity(Sphere, 0, 50, 0, #PB_Absolute)
EndIf
RenderWorld(10)
Screen3DStats()
FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape) Or Quit = 1
EndIf
Else
MessageRequester("Error", "The 3D Engine can't be initialized",0)
EndIf
End