Comment faire un jeu de lancer de dés en 3D

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Shadow
Messages : 1373
Inscription : mer. 04/nov./2015 17:39

Re: Comment faire un jeu de lancer de dés en 3D

Message par Shadow »

Ah ouais sympa en effet ^^
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Avatar de l’utilisateur
Guillot
Messages : 532
Inscription : jeu. 25/juin/2015 16:18

Re: Comment faire un jeu de lancer de dés en 3D

Message par Guillot »

si ça foire, commenter "WorldShadows..."

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)
Avatar de l’utilisateur
kernadec
Messages : 1594
Inscription : ven. 25/avr./2008 11:14

Re: Comment faire un jeu de lancer de dés en 3D

Message par kernadec »

bjr Guillot
très très chouette, vraiment excellent
merci pour le partage
Cordialement
Avatar de l’utilisateur
Fig
Messages : 1176
Inscription : jeu. 14/oct./2004 19:48

Re: Comment faire un jeu de lancer de dés en 3D

Message par Fig »

Super cool !
Mais pourquoi Worldshadow() plante ?
Il y a deux méthodes pour écrire des programmes sans erreurs. Mais il n’y a que la troisième qui marche.
Version de PB : 6.00LTS - 64 bits
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Comment faire un jeu de lancer de dés en 3D

Message par falsam »

Fig a écrit :Mais pourquoi Worldshadow() plante ?
Bonjour Fig. Parce que a priori tu n'as pas DirectX9.

Si ton ordinateur est sous Windows 10, l'environnement DirectX9 n'est pas installé et DirectX11 ou DirectX12 n'est pas rétrocompatible avec DirectX9

Deux solutions : Installer DirectX9c ou Bien dans les options de compilation, activé OpenGl en sous-system.

J'ai déja évoqué ce souci ici https://www.purebasic.fr/french/viewtop ... 17#p206117

Je ne sais pas si ce souci peut être régler en natif :wink:
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Ollivier
Messages : 4190
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: Comment faire un jeu de lancer de dés en 3D

Message par Ollivier »

Worldshadow() ne semble pas être présent dans la rubrique Bug report.

Donc ça peut durer encore longtemps...
Avatar de l’utilisateur
venom
Messages : 3072
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Re: Comment faire un jeu de lancer de dés en 3D

Message par venom »

Guillot... Que dire... Comme d'habitude tu gère de la 3D :D
Bravo bel exemple. Merci du partage :wink:

@falsam
C'est surement compliqué, mais purebasic ne peux pas rendre les fonctions compatibles DX11 et + ?






@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Avatar de l’utilisateur
Guillot
Messages : 532
Inscription : jeu. 25/juin/2015 16:18

Re: Comment faire un jeu de lancer de dés en 3D

Message par Guillot »

je pense qu'il faut passer à une version plus récente d'ogre
je sais pas à partir de quand c'est compatible DX11 dans la ligné ogre 1.x (actuellement 1.12)
Shadow
Messages : 1373
Inscription : mer. 04/nov./2015 17:39

Re: Comment faire un jeu de lancer de dés en 3D

Message par Shadow »

Whaaahooo c'est pas mal ça merci Guillot ! :D
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Avatar de l’utilisateur
Kwai chang caine
Messages : 6962
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Comment faire un jeu de lancer de dés en 3D

Message par Kwai chang caine »

Shadow a écrit :Whaaahooo c'est pas mal ça merci Guillot ! :D
Doux euphémisme.... :wink:
C'est splendide, merci du partage 8)
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Répondre