FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  GroupesGroupes  Connexion  
Derniers sujets
» Projet de planétarium virtuel.
par Pedro Alvarez Hier à 17:29

» Quantité de mémoire utilisée par un exe
par Navigateur Hier à 14:52

» Problème avec 'file_load'.
par Pedro Alvarez Hier à 8:12

» Version instantanée V 0.9.28i20 du 13/06/2018
par jjn4 Sam 16 Juin 2018 - 14:25

» string$(0,chr$(32)) sans erreur
par silverman Ven 15 Juin 2018 - 19:56

» Version instantanée V 0.9.28i19 du 13/06/2018
par Minibug Ven 15 Juin 2018 - 19:14

» PanExpress : l'éditeur Panoramic avec création d'objet
par Jean Claude Ven 15 Juin 2018 - 7:52

» Mes souhaits d'amélioration de Panoramic.
par Pedro Alvarez Jeu 14 Juin 2018 - 20:17

» [RÉSOLU] Message d'erreur impossible à indentifier
par Minibug Mer 13 Juin 2018 - 20:52

» Cadre pour image
par Jean Claude Mar 12 Juin 2018 - 16:31

» Créateur d'objets Panoramic
par Minibug Mar 12 Juin 2018 - 14:02

» Planétarium gratuit.
par Jean Claude Sam 9 Juin 2018 - 18:50

» Comment afficher une image sans fond.
par JL35 Sam 9 Juin 2018 - 14:16

» image_width(n) et image_height(n)
par silverman Sam 9 Juin 2018 - 11:22

» Site sur la programmation sympa
par Jean Claude Jeu 7 Juin 2018 - 11:20

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Juin 2018
LunMarMerJeuVenSamDim
    123
45678910
11121314151617
18192021222324
252627282930 
CalendrierCalendrier

Partagez | 
 

 Roue pour jeu

Aller en bas 
AuteurMessage
Marc

avatar

Nombre de messages : 793
Age : 57
Localisation : TOURS
Date d'inscription : 17/03/2014

MessageSujet: Roue pour jeu   Lun 28 Mai 2018 - 15:37

Bonjour à tous !

Une roue !
Cette roue est réalisée à partir d'instructions 3D. Visuellement, elle n'a aucun effet 3D.
J'en profite pour remercier Jack d'avoir inclus dans Panoramic ce moteur 3D.
C'est le style de roue que l'on voit dans certains jeux télévisés.

Le principe : vous cliquez sur la roue. Lorsque vous relâchez le bouton de la souris, la roue s'élance pour s'arrêter quelques secondes plus tard. Vous ne pouvez pas relancer la roue tant qu'elle n'est pas à l'arrêt.
Plus vous cliquez longuement, plus la roue fera de tours (limité à 5 secondes).

Dans le source, lignes 21 à 23 pour changer la couleur de fond.
21     BackColor_r% = 242
22     BackColor_v% = 236
23     BackColor_b% = 223

Ligne 24 pour supprimer le centre de la roue.
24     CenterOption% = 1        => mettre  0 pour supprimer le disque central.

...et toutes les autres lignes pour personnaliser sa propre roue.
Pour ceux qui le souhaitent, servez-vous !

Code:
' ------------------------------------------------------------------------------
'  PANORAMIC 3D Wheel / Roue 3D
'  Marc - May 2018 - Panoramic v0.9.28.i18
'  http://panoramic-language.pagesperso-orange.fr/French/index.html
'  http://panoramic.top-forum.net
' ------------------------------------------------------------------------------
' main
    Init()
    Skin()
    Wheel()
    Index()
    Instructions()
    ON_MOUSE_DOWN 100,Action
 END
' ------------------------------------------------------------------------------
SUB Init()
    LABEL Action,result,Quit
    DIM c,x,y,t,alea
    DIM BackColor_r%,BackColor_v%,BackColor_b%
    DIM CenterOption%
    BackColor_r% = 242
    BackColor_v% = 236
    BackColor_b% = 223
    CenterOption% = 1
    DEGREES
    c=1
    HEIGHT 0,540 + HEIGHT(0)-HEIGHT_CLIENT(0)
    WIDTH 0,500 + WIDTH(0)-WIDTH_CLIENT(0)
    LEFT 0,(SCREEN_X-WIDTH(0))/2
    TOP 0,(SCREEN_Y-HEIGHT(0))/2
    PICTURE 1
    WIDTH 1,500
    HEIGHT 1,500
    ON_CLOSE 0, Quit
END_SUB
' ------------------------------------------------------------------------------
SUB Wheel()
    DIM_LOCAL i%
    SCENE3D 100
    HEIGHT 100,500
    WIDTH 100,500
    COLOR 100,BackColor_r%,BackColor_v%,BackColor_b%
    CAM_MOVE -2.6
    3D_PLANE 1
    3D_V_TILE 1,1
    3D_U_TILE 1,1
    3D_IMAGE_TEXTURE 1,10
    3D_X_ROTATE 1,0
END_SUB
' ------------------------------------------------------------------------------
SUB Index()
    SCENE2D 200
    HEIGHT 200,40
    WIDTH 200,31
    COLOR 200,BackColor_r%,BackColor_v%,BackColor_b%
    LEFT 200,235
    PICTURE 201
    HEIGHT 201,40
    WIDTH 201,31
    COLOR 201,BackColor_r%,BackColor_v%,BackColor_b%
    2D_TARGET_IS 201
    2D_PEN_COLOR 50,50,50
    2D_POLY_FROM 0,0
    2D_POLY_TO 15,39
    2D_POLY_TO 30,0
    2D_POLY_TO 15,10
    2D_POLY_TO 0,0
    2D_FLOOD 15,20,50,50,50
    IMAGE 202
    2D_IMAGE_COPY 202,0,0,31,40
    SPRITE 1
    SPRITE_IMAGE_LOAD 1,202      
END_SUB
' ------------------------------------------------------------------------------
SUB Skin()
    DIM_LOCAL i%,x,y,r%,v%,b%
    2D_TARGET_IS 1
    COLOR 1,BackColor_r%,BackColor_v%,BackColor_b%
    2D_PEN_COLOR 100,100,100
    2D_CIRCLE 250,250,210
    FOR i% = 0 to 360 STEP 24
        x = COS(i%)*210+250
        y = SIN(i%)*210+250
        2D_LINE 250,250,x,y
    NEXT i%
    FOR i% = 12 to 354 STEP 24
        x = COS(i%)*190+250
        y = SIN(i%)*190 +250
        READ r%
        READ v%
        READ b%
        2D_FLOOD x,y,r%,v%,b%
    NEXT i%
    Center(CenterOption%)
    IMAGE 10
    2D_IMAGE_COPY 10,0,0,500,500
END_SUB
' ------------------------------------------------------------------------------
SUB Center(a)
    IF a = 1
        2D_FILL_COLOR BackColor_r%,BackColor_v%,BackColor_b%
        2D_CIRCLE 250,250,40
        PRINT_TARGET_IS 1
        FONT_NAME 1,"Times New Roman"
        FONT_SIZE 1,22
        PRINT_LOCATE 233,215
        PRINT "3D"
        FONT_SIZE 1,12
        PRINT_LOCATE 218,245
        PRINT "Panoramic"
        PRINT_LOCATE 230,265
        PRINT "Wheel"
    END_IF
END_SUB
' ------------------------------------------------------------------------------
SUB Instructions()
    PICTURE 50
    HEIGHT 50,40
    WIDTH 50,500
    TOP 50,500
    COLOR 50,200,200,200
    2D_TARGET_IS 50
    2D_FILL_COLOR 200,200,200
    PRINT_TARGET_IS 50
    FONT_NAME 50,"Times New Roman"
    FONT_SIZE 50,18
    FONT_ITALIC 50
    PRINT_LOCATE 55,8
    PRINT "Click on the wheel / Cliquez sur la roue"
END_SUB                        
' ------------------------------------------------------------------------------
Action:
    OFF_MOUSE_DOWN 100
    ON_MOUSE_UP 100, Result
    c = NUMBER_TICKS
RETURN
' ------------------------------------------------------------------------------
Result:
    OFF_MOUSE_UP 100
    alea = NUMBER_TICKS - c + RND(360)
    IF alea > 5000
        alea = 4000 + RND(360) + RND(180)
    END_IF
    Animation()
    ON_MOUSE_DOWN 100,Action
RETURN
' ------------------------------------------------------------------------------
SUB Animation()
    WHILE alea > 5
        c=alea/100
        3D_Z_ROTATE 1,WRAP_VALUE((c+t)*-1)
        t=c+t
        DISPLAY
        PAUSE 20
        alea=alea-c
        c = c*.95
    END_WHILE
 END_SUB
' ------------------------------------------------------------------------------
DATA 0,255,255
DATA 0,0,0
DATA 0,0,255
DATA 255,0,255
DATA 0,128,0
DATA 128,128,128
DATA 0,255,0
DATA 128,0,0
DATA 0,0,128
DATA 255,255,255
DATA 128,128,0
DATA 128,0,128
DATA 255,0,0
DATA 0,128,128
DATA 255,255,0
' ------------------------------------------------------------------------------
Quit:
    TERMINATE
RETURN


Spoiler:
 

EDIT : mise à jour du source : suppression des variables devenues inutiles et de quelques parenthèses.


Dernière édition par Marc le Lun 28 Mai 2018 - 21:17, édité 4 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jean Claude

avatar

Nombre de messages : 5472
Age : 64
Localisation : 83 Var
Date d'inscription : 07/05/2009

MessageSujet: Re: Roue pour jeu   Lun 28 Mai 2018 - 16:49

Bravo et merci Marc ! cheers
C'est super !

Il faudra qu'un jour je refasse mon jeu "La roue de la fortune" et cette roue pourrait bien servir.

Est-il possible d'avoir la possibilité de connaître dans une variable "résultat" le numéro de la section sur laquelle s'arrête la roue (entre 1 et 15).
Ceci permettrait de l'utiliser pour le jeu.
Heu.... j'abuse.... Embarassed

A+
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Marc

avatar

Nombre de messages : 793
Age : 57
Localisation : TOURS
Date d'inscription : 17/03/2014

MessageSujet: Re: Roue pour jeu   Lun 28 Mai 2018 - 17:25

Merci Jean-Claude !

Citation :
Est-il possible d'avoir la possibilité de connaître dans une variable "résultat" le numéro de la section sur laquelle s'arrête la roue

Oui, on connait le positionnement de la roue au degré près en sortie de boucle WHILE ligne 159.
Une simple calcul permet de savoir avec précision dans quelle section est arrêtée la roue, en fonction de la position de ton index et du nombre de sections que tu souhaites dessiner.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jean Claude

avatar

Nombre de messages : 5472
Age : 64
Localisation : 83 Var
Date d'inscription : 07/05/2009

MessageSujet: Re: Roue pour jeu   Lun 28 Mai 2018 - 18:47

J'ai réussi avec difficulté, mais c'est bon ! cheers

Dans le code ci-dessous la section en rouge vif est la section numéro 15/15. Il suffit de compter les sections, dans l'ordre des aiguilles d'une montre, pour vérifier.
Après 15 on repart à 1.

Code:
' ------------------------------------------------------------------------------
'  PANORAMIC 3D Wheel / Roue 3D
'  Marc - May 2018 - Panoramic v0.9.28.i18
'  http://panoramic-language.pagesperso-orange.fr/French/index.html
'  http://panoramic.top-forum.net
' ------------------------------------------------------------------------------
' main
    Init()
    Skin()
    Wheel()
    Index()
    Instructions()
    ON_MOUSE_DOWN 100,Action
 END
' ------------------------------------------------------------------------------
SUB Init()
    LABEL Action,result,Quit
    DIM on,c,x,y,t,d,alea,section%
    DIM BackColor_r%,BackColor_v%,BackColor_b%
    DIM CenterOption%
    BackColor_r% = 0
    BackColor_v% = 50
    BackColor_b% = 50
    CenterOption% = 0
    DEGREES
    c=1
    HEIGHT 0,540 + HEIGHT(0)-HEIGHT_CLIENT(0)
    WIDTH 0,500 + WIDTH(0)-WIDTH_CLIENT(0)
    LEFT 0,(SCREEN_X-WIDTH(0))/2
    TOP 0,(SCREEN_Y-HEIGHT(0))/2
    PICTURE 1
    WIDTH 1,500
    HEIGHT 1,500
    ON_CLOSE 0, Quit
END_SUB
' ------------------------------------------------------------------------------
SUB Wheel()
    DIM_LOCAL i%
    SCENE3D 100
    HEIGHT 100,500
    WIDTH 100,500
    COLOR 100,BackColor_r%,BackColor_v%,BackColor_b%
    CAM_MOVE -2.6
    3D_PLANE 1
    3D_V_TILE 1,1
    3D_U_TILE 1,1
    3D_IMAGE_TEXTURE 1,10
    3D_X_ROTATE 1,0
END_SUB
' ------------------------------------------------------------------------------
SUB Index()
    SCENE2D 200
    HEIGHT 200,40
    WIDTH 200,31
    COLOR 200,BackColor_r%,BackColor_v%,BackColor_b%
    LEFT 200,235
    PICTURE 201
    HEIGHT 201,40
    WIDTH 201,31
    COLOR 201,BackColor_r%,BackColor_v%,BackColor_b%
    2D_TARGET_IS 201
    2D_PEN_COLOR 50,50,50
    2D_POLY_FROM 0,0
    2D_POLY_TO 15,39
    2D_POLY_TO 30,0
    2D_POLY_TO 15,10
    2D_POLY_TO 0,0
    2D_FLOOD 15,20,150,150,150
    IMAGE 202
    2D_IMAGE_COPY 202,0,0,31,40
    SPRITE 1
    SPRITE_IMAGE_LOAD 1,202      
END_SUB
' ------------------------------------------------------------------------------
SUB Skin()
    DIM_LOCAL i%,x,y,r%,v%,b%
    2D_TARGET_IS 1
    COLOR 1,BackColor_r%,BackColor_v%,BackColor_b%
    2D_PEN_COLOR 100,100,100
    2D_CIRCLE 250,250,210
    FOR i% = 0 to 360 STEP 24
        x = COS(i%)*210+250
        y = SIN(i%)*210+250
        2D_LINE 250,250,x,y
    NEXT i%
    FOR i% = 12 to 354 STEP 24
        x = COS(i%)*190+250
        y = SIN(i%)*190 +250
        READ r%
        READ v%
        READ b%
        2D_FLOOD x,y,r%,v%,b%
    NEXT i%
    Center(CenterOption%)
    IMAGE 10
    2D_IMAGE_COPY 10,0,0,500,500
END_SUB
' ------------------------------------------------------------------------------
SUB Center(a)
    IF a = 1
        2D_FILL_COLOR BackColor_r%,BackColor_v%,BackColor_b%
        2D_CIRCLE 250,250,40
        PRINT_TARGET_IS 1
        FONT_NAME 1,"Times New Roman"
        FONT_SIZE 1,22
        PRINT_LOCATE 233,215
        PRINT "3D"
        FONT_SIZE 1,12
        PRINT_LOCATE 218,245
        PRINT "Panoramic"
        PRINT_LOCATE 230,265
        PRINT "Wheel"
    END_IF
END_SUB
' ------------------------------------------------------------------------------
SUB Instructions()
    PICTURE 50
    HEIGHT 50,40
    WIDTH 50,500
    TOP 50,500
    COLOR 50,200,200,200
    2D_TARGET_IS 50
    2D_FILL_COLOR 200,200,200
    PRINT_TARGET_IS 50
    FONT_NAME 50,"Times New Roman"
    FONT_SIZE 50,18
    FONT_ITALIC 50
    PRINT_LOCATE 55,8
    PRINT "Cliquez sur la roue"
END_SUB                        
' ------------------------------------------------------------------------------
Action:
    OFF_MOUSE_DOWN 100
    ON_MOUSE_UP 100, Result
    c = NUMBER_TICKS
RETURN
' ------------------------------------------------------------------------------
Result:
    OFF_MOUSE_UP 100
    alea = NUMBER_TICKS - c + RND(360)
    IF alea > 5000
        alea = 4000 + RND(360) + RND(180)
    END_IF
    Animation()
    ON_MOUSE_DOWN 100,Action
RETURN
' ------------------------------------------------------------------------------
SUB Animation()
    WHILE alea > 5
        c=alea/100
        3D_Z_ROTATE 1,WRAP_VALUE((c+t)*(-1))
        t=c+t
        DISPLAY
        PAUSE 20
        alea=alea-c
        c = c*.95
    END_WHILE
    section%=int(WRAP_VALUE(t*-1)/24)-1
    if section%=-1 then section%=14
    if section%=0 then section%=15
    message str$(section%)
 END_SUB
' ------------------------------------------------------------------------------
DATA 0,255,255
DATA 0,0,0
DATA 0,0,255
DATA 255,0,255
DATA 0,128,0
DATA 128,128,128
DATA 0,255,0
DATA 128,0,0
DATA 0,0,128
DATA 255,255,255
DATA 128,128,0
DATA 128,0,128
DATA 255,0,0
DATA 0,128,128
DATA 255,255,0
' ------------------------------------------------------------------------------
Quit:
    on=0
    TERMINATE
RETURN

A+

PS: Sad Sad il doit y avoir une erreur de calcul, car ce n'est pas tout à fait juste Question Question Question
J'ai été obligé d'ajouter if section%=-1 then section%=14 pour avoir un résultat plus fiable.



Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Marc

avatar

Nombre de messages : 793
Age : 57
Localisation : TOURS
Date d'inscription : 17/03/2014

MessageSujet: Re: Roue pour jeu   Lun 28 Mai 2018 - 20:29

@Jean-Claude:

Tu peux remplacer la SUB Animation par celle-ci :

Code:
SUB Animation()
    WHILE alea > 5
        c=alea/100
        3D_Z_ROTATE 1,WRAP_VALUE((c+t)*(-1))
        CAPTION 0, INT((WRAP_VALUE(c+t+90)/24)+1)
        t=c+t
        DISPLAY
        PAUSE 20
        alea=alea-c
        c = c*.95
    END_WHILE
 END_SUB

Tu y trouveras la formule et le résultat qui s'affiche dans le CAPTION 0.
Pour l'exemple, j'ai considéré que le jaune était le 1.
J'ai mis le calcul dans la boucle WHILE juste pour tester en temps réel la cohérence du résultat.
Il faudra donc déplacer ce calcul juste après la boucle, comme tu l'avais fait.


Dernière édition par Marc le Lun 28 Mai 2018 - 20:33, édité 1 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
silverman

avatar

Nombre de messages : 643
Age : 46
Localisation : Picardie
Date d'inscription : 18/03/2015

MessageSujet: Re: Roue pour jeu   Lun 28 Mai 2018 - 20:33

Devancé d'un chouïa par Marc Very Happy
J'ai obtenu le résultat comme ça, avec cyan=1, pour suivre l'ordre des datas:
Code:
caption 0,str$(int(wrap_value(o3d_z_rotate(1)+270)/24)+1)
et cette ligne:
Code:
if section%=0 then section%=15
est devenu inutile cheers
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jean Claude

avatar

Nombre de messages : 5472
Age : 64
Localisation : 83 Var
Date d'inscription : 07/05/2009

MessageSujet: Re: Roue pour jeu   Lun 28 Mai 2018 - 20:51

Merci à vous deux,

Je ne suis pas doué en en math et ça se voit Embarassed

Nous voilà avec une roue exploitable pour un jeu. cheers

A+
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Marc

avatar

Nombre de messages : 793
Age : 57
Localisation : TOURS
Date d'inscription : 17/03/2014

MessageSujet: Re: Roue pour jeu   Lun 28 Mai 2018 - 21:05

Dans le source, j'ai oublié de supprimer des variables qui n'ont plus lieu d'être :
Ligne 18, les variables d et on à supprimer.

Quelques parenthèses en trop aussi :
Ligne 151 : le -1 à la fin de la ligne n'a pas besoin d'être entouré de parenthèses.
Pour être plus clair :
Ancienne ligne 151 : 3D_Z_ROTATE 1,WRAP_VALUE((c+t)*(-1))
Nouvelle ligne 151 :  3D_Z_ROTATE 1,WRAP_VALUE((c+t)*-1)

Pour info, ce " *-1 " sert à faire tourner la roue dans le sens des aiguilles d'une montre.

Ligne 177 à supprimer (on=0)

---------------------------------------------------------------------------------------------------------------------

Je viens de modifier le source pour y charger un fichier BMP externe :

Code:
' ------------------------------------------------------------------------------
'  PANORAMIC 3D Wheel / Roue 3D
'  Marc - May 2018 - Panoramic v0.9.28.i18
'  http://panoramic-language.pagesperso-orange.fr/French/index.html
'  http://panoramic.top-forum.net
' ------------------------------------------------------------------------------
' main
    Init()
    Skin()
    Wheel()
    Index()
    Instructions()
    ON_MOUSE_DOWN 100,Action
 END
' ------------------------------------------------------------------------------
SUB Init()
    LABEL Action,result,Quit
    DIM c,x,y,t,alea
    DIM BackColor_r%,BackColor_v%,BackColor_b%
    DIM CenterOption%
    BackColor_r% = 0
    BackColor_v% = 0
    BackColor_b% = 0
    CenterOption% = 1
    DEGREES
    c=1
    HEIGHT 0,540 + HEIGHT(0)-HEIGHT_CLIENT(0)
    WIDTH 0,500 + WIDTH(0)-WIDTH_CLIENT(0)
    LEFT 0,(SCREEN_X-WIDTH(0))/2
    TOP 0,(SCREEN_Y-HEIGHT(0))/2
    PICTURE 1
    WIDTH 1,500
    HEIGHT 1,500
    ON_CLOSE 0, Quit
END_SUB
' ------------------------------------------------------------------------------
SUB Wheel()
    DIM_LOCAL i%
    SCENE3D 100
    HEIGHT 100,500
    WIDTH 100,500
    COLOR 100,BackColor_r%,BackColor_v%,BackColor_b%
    CAM_MOVE -2.5
    3D_PLANE 1
    3D_V_TILE 1,1
    3D_U_TILE 1,1
    3D_IMAGE_TEXTURE 1,10
    3D_X_ROTATE 1,0
END_SUB
' ------------------------------------------------------------------------------
SUB Index()
    SCENE2D 200
    HEIGHT 200,40
    WIDTH 200,31
    COLOR 200,BackColor_r%,BackColor_v%,BackColor_b%
    LEFT 200,235
    PICTURE 201
    HEIGHT 201,40
    WIDTH 201,31
    COLOR 201,BackColor_r%,BackColor_v%,BackColor_b%
    2D_TARGET_IS 201
    2D_PEN_COLOR 50,50,50
    2D_POLY_FROM 0,0
    2D_POLY_TO 15,39
    2D_POLY_TO 30,0
    2D_POLY_TO 15,10
    2D_POLY_TO 0,0
    2D_FLOOD 15,20,250,250,50
    IMAGE 202
    2D_IMAGE_COPY 202,0,0,31,40
    SPRITE 1
    SPRITE_IMAGE_LOAD 1,202      
END_SUB
' ------------------------------------------------------------------------------
SUB Skin()
    FILE_LOAD 1,"roue2.bmp"
    IMAGE 10
    2D_IMAGE_COPY 10,0,0,500,500
END_SUB
' ------------------------------------------------------------------------------
SUB Center(a)
    IF a = 1
        2D_FILL_COLOR BackColor_r%,BackColor_v%,BackColor_b%
        2D_CIRCLE 250,250,40
        PRINT_TARGET_IS 1
        FONT_NAME 1,"Times New Roman"
        FONT_SIZE 1,22
        PRINT_LOCATE 233,215
        PRINT "3D"
        FONT_SIZE 1,12
        PRINT_LOCATE 218,245
        PRINT "Panoramic"
        PRINT_LOCATE 230,265
        PRINT "Wheel"
    END_IF
END_SUB
' ------------------------------------------------------------------------------
SUB Instructions()
    PICTURE 50
    HEIGHT 50,40
    WIDTH 50,500
    TOP 50,500
    COLOR 50,200,200,200
    2D_TARGET_IS 50
    2D_FILL_COLOR 200,200,200
    PRINT_TARGET_IS 50
    FONT_NAME 50,"Times New Roman"
    FONT_SIZE 50,18
    FONT_ITALIC 50
    PRINT_LOCATE 55,8
    PRINT "Click on the wheel / Cliquez sur la roue"
END_SUB                        
' ------------------------------------------------------------------------------
Action:
    OFF_MOUSE_DOWN 100
    ON_MOUSE_UP 100, Result
    c = NUMBER_TICKS
RETURN
' ------------------------------------------------------------------------------
Result:
    OFF_MOUSE_UP 100
    alea = NUMBER_TICKS - c + RND(360)
    IF alea > 5000
        alea = 4000 + RND(360) + RND(180)
    END_IF
    Animation()
    ON_MOUSE_DOWN 100,Action
RETURN
' ------------------------------------------------------------------------------
SUB Animation()
    WHILE alea > 5
        c=alea/100
        3D_Z_ROTATE 1,WRAP_VALUE((c+t)*-1)
        t=c+t
        DISPLAY
        PAUSE 20
        alea=alea-c
        c = c*.95
    END_WHILE
 END_SUB
' ------------------------------------------------------------------------------
DATA 0,255,255
DATA 0,0,0
DATA 0,0,255
DATA 255,0,255
DATA 0,128,0
DATA 128,128,128
DATA 0,255,0
DATA 128,0,0
DATA 0,0,128
DATA 255,255,255
DATA 128,128,0
DATA 128,0,128
DATA 255,0,0
DATA 0,128,128
DATA 255,255,0
' ------------------------------------------------------------------------------
Quit:
    TERMINATE
RETURN


Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jean Claude

avatar

Nombre de messages : 5472
Age : 64
Localisation : 83 Var
Date d'inscription : 07/05/2009

MessageSujet: Re: Roue pour jeu   Mar 29 Mai 2018 - 8:32

bonjour à tous,

Marc a écrit:
Pour info, ce " *-1 " sert à faire tourner la roue dans le sens des aiguilles d'une montre.

J'ai testé en supprimant " *-1 ", effectivement la roue tourne dans l'autre sens, mais l'index n'est plus calé avec les bords des sections. Il y a un petit décalage.

Par contre, en utilisant la solution de Silverman, ce problème disparaît.

Dans le code ci-dessous tu peux tester les 2 exemples en shuntant les lignes 153 et 161 OU 152 et 160 et tu constateras la différence.

Code:
' ------------------------------------------------------------------------------
'  PANORAMIC 3D Wheel / Roue 3D
'  Marc - May 2018 - Panoramic v0.9.28.i18
'  http://panoramic-language.pagesperso-orange.fr/French/index.html
'  http://panoramic.top-forum.net
' ------------------------------------------------------------------------------
' main
    Init()
    Skin()
    Wheel()
    Index()
    Instructions()
    ON_MOUSE_DOWN 100,Action
 END
' ------------------------------------------------------------------------------
SUB Init()
    LABEL Action,result,Quit
    DIM c,x,y,t,alea,section%
    DIM BackColor_r%,BackColor_v%,BackColor_b%
    DIM CenterOption%
    BackColor_r% = 0
    BackColor_v% = 50
    BackColor_b% = 50
    CenterOption% = 0
    DEGREES
    c=1
    HEIGHT 0,540 + HEIGHT(0)-HEIGHT_CLIENT(0)
    WIDTH 0,500 + WIDTH(0)-WIDTH_CLIENT(0)
    LEFT 0,(SCREEN_X-WIDTH(0))/2
    TOP 0,(SCREEN_Y-HEIGHT(0))/2
    PICTURE 1
    WIDTH 1,500
    HEIGHT 1,500
    ON_CLOSE 0, Quit
END_SUB
' ------------------------------------------------------------------------------
SUB Wheel()
    DIM_LOCAL i%
    SCENE3D 100
    HEIGHT 100,500
    WIDTH 100,500
    COLOR 100,BackColor_r%,BackColor_v%,BackColor_b%
    CAM_MOVE -2.6
    3D_PLANE 1
    3D_V_TILE 1,1
    3D_U_TILE 1,1
    3D_IMAGE_TEXTURE 1,10
    3D_X_ROTATE 1,0
END_SUB
' ------------------------------------------------------------------------------
SUB Index()
    SCENE2D 200
    HEIGHT 200,40
    WIDTH 200,31
    COLOR 200,BackColor_r%,BackColor_v%,BackColor_b%
    LEFT 200,235
    PICTURE 201
    HEIGHT 201,40
    WIDTH 201,31
    COLOR 201,BackColor_r%,BackColor_v%,BackColor_b%
    2D_TARGET_IS 201
    2D_PEN_COLOR 50,50,50
    2D_POLY_FROM 0,0
    2D_POLY_TO 15,39
    2D_POLY_TO 30,0
    2D_POLY_TO 15,10
    2D_POLY_TO 0,0
    2D_FLOOD 15,20,150,150,150
    IMAGE 202
    2D_IMAGE_COPY 202,0,0,31,40
    SPRITE 1
    SPRITE_IMAGE_LOAD 1,202      
END_SUB
' ------------------------------------------------------------------------------
SUB Skin()
    DIM_LOCAL i%,x,y,r%,v%,b%
    2D_TARGET_IS 1
    COLOR 1,BackColor_r%,BackColor_v%,BackColor_b%
    2D_PEN_COLOR 100,100,100
    2D_CIRCLE 250,250,210
    FOR i% = 0 to 360 STEP 24
        x = COS(i%)*210+250
        y = SIN(i%)*210+250
        2D_LINE 250,250,x,y
    NEXT i%
    FOR i% = 12 to 354 STEP 24
        x = COS(i%)*190+250
        y = SIN(i%)*190 +250
        READ r%
        READ v%
        READ b%
        2D_FLOOD x,y,r%,v%,b%
    NEXT i%
    Center(CenterOption%)
    IMAGE 10
    2D_IMAGE_COPY 10,0,0,500,500
END_SUB
' ------------------------------------------------------------------------------
SUB Center(a)
    IF a = 1
        2D_FILL_COLOR BackColor_r%,BackColor_v%,BackColor_b%
        2D_CIRCLE 250,250,40
        PRINT_TARGET_IS 1
        FONT_NAME 1,"Times New Roman"
        FONT_SIZE 1,22
        PRINT_LOCATE 233,215
        PRINT "3D"
        FONT_SIZE 1,12
        PRINT_LOCATE 218,245
        PRINT "Panoramic"
        PRINT_LOCATE 230,265
        PRINT "Wheel"
    END_IF
END_SUB
' ------------------------------------------------------------------------------
SUB Instructions()
    PICTURE 50
    HEIGHT 50,40
    WIDTH 50,500
    TOP 50,500
    COLOR 50,200,200,200
    2D_TARGET_IS 50
    2D_FILL_COLOR 200,200,200
    PRINT_TARGET_IS 50
    FONT_NAME 50,"Times New Roman"
    FONT_SIZE 50,18
    FONT_ITALIC 50
    PRINT_LOCATE 55,8
    PRINT "Cliquez sur la roue"
END_SUB                        
' ------------------------------------------------------------------------------
Action:
    OFF_MOUSE_DOWN 100
    ON_MOUSE_UP 100, Result
    c = NUMBER_TICKS
RETURN
' ------------------------------------------------------------------------------
Result:
    OFF_MOUSE_UP 100
    alea = NUMBER_TICKS - c + RND(360)
    IF alea > 5000
        alea = 4000 + RND(360) + RND(180)
    END_IF
    Animation()
    ON_MOUSE_DOWN 100,Action
RETURN
' ------------------------------------------------------------------------------
SUB Animation()
    WHILE alea > 5
        c=alea/100
        3D_Z_ROTATE 1,WRAP_VALUE((c+t))
         caption 0,str$(int(wrap_value(o3d_z_rotate(1)+270)/24)+1):' solution Silverman
'       CAPTION 0, INT((WRAP_VALUE(c+t+90)/24)+1):' solution Marc
        t=c+t
        DISPLAY
        PAUSE 20
        alea=alea-c
        c = c*.95
    END_WHILE
   section%=int(wrap_value(o3d_z_rotate(1)+270)/24)+1 :' solution Silverman
'   section%=INT((WRAP_VALUE(c+t+90)/24)+1):' solution Marc
   MESSAGE STR$(section%)
END_SUB
' ------------------------------------------------------------------------------
DATA 0,255,255
DATA 0,0,0
DATA 0,0,255
DATA 255,0,255
DATA 0,128,0
DATA 128,128,128
DATA 0,255,0
DATA 128,0,0
DATA 0,0,128
DATA 255,255,255
DATA 128,128,0
DATA 128,0,128
DATA 255,0,0
DATA 0,128,128
DATA 255,255,0
' ------------------------------------------------------------------------------
Quit:
     TERMINATE
RETURN


A+
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
jjn4

avatar

Nombre de messages : 1755
Date d'inscription : 13/09/2009

MessageSujet: +++   Mar 29 Mai 2018 - 15:31

Superbe, cette roue !
Pour un futur jeu de la fortune
(ou autre) magnifique !
Bravo !
cheers
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://jjn4.e-monsite.com
Marc

avatar

Nombre de messages : 793
Age : 57
Localisation : TOURS
Date d'inscription : 17/03/2014

MessageSujet: Re: Roue pour jeu   Mer 30 Mai 2018 - 0:10

Merci à tous !

Jean-Claude a écrit:
J'ai testé en supprimant " *-1 ", effectivement la roue tourne dans l'autre sens, mais l'index n'est plus calé avec les bords des sections. Il y a un petit décalage.

Oui, si tu fais tourner la roue dans l'autre sens, il faut modifier l'offset dans la formule. Mets par exemple -90 au lieu de +90. La position zéro est plein Est. Dans mon source, j'ai dessiné l'index tout en haut (plein Nord), soit un décalage de 90°. Ce nombre 90, tu le retrouves dans la formule. C'est ce nombre que tu dois adapter en fonction de tes désires : sens de rotation, position de l'index, zone de départ du comptage...

Tu peux aussi modifier le nombre de parts, j'ai partagé en 15 mais tu peux en faire plus ou moins.
Je pense que tu as compris le rôle des lignes DATA. Ce sont les couleurs R,V,B de chaque part. Pour plus de lisibilité, je n'ai pas mis tous les datas bout à bout.

Bonne continuation !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jean Claude

avatar

Nombre de messages : 5472
Age : 64
Localisation : 83 Var
Date d'inscription : 07/05/2009

MessageSujet: Re: Roue pour jeu   Mer 30 Mai 2018 - 20:17

J'ai, je pense, avoir assez bien compris le code et j'en ai fait une version pour insérer dans un programme sans se préoccuper des numéro d'objets.
Ce n'est pas encore parfait, mais j'y reviendrai.

Code:
' ------------------------------------------------------------------------------
'  PANORAMIC 3D Wheel / Roue 3D
'  Marc - May 2018 - Panoramic v0.9.28.i18
'  Adapté par Jean Claude pour utilisation dans un code.
' ------------------------------------------------------------------------------
DIM No%,No3d%,NoSprite%
DIM NumFormRoue%:' Si besoin d'un autre FORM que 0 pour la roue
  ' Ici on reste avec FORM 0
    No%=-1
    No%=No%+1    
    if No%<>0
       ' création du form pour la roue
       NumFormRoue%=No% : FORM NumFormRoue%
    else
       NumFormRoue%=0
    end_if

' Variable nécessaires pour la roue:    

  ' BackColor_r% : BackColor_v% : BackColor_b% Les 3 Couleurs derrière la roue
    DIM BackColor_r%,BackColor_v%,BackColor_b% : BackColor_r%=0 : BackColor_v%=0 : BackColor_b%=0

  ' SensRtation%: -1 => sens des aiguilles d'une montre : 0 => pas de rotation : 1 => sens inverse des aiguilles d'une montre
    DIM SensRtation% : SensRtation%=1
 
  ' StepNbPart% : 20 => 18 Parts : 15 => 24 parts : 24 => 15 parts : 30 => 12 parts
  ' Attention le nombre de lignes de data doit correspondre au nombre de parts (ici 18 parts mais 24 prévues au maxi)
    DIM StepNbPart% : StepNbPart%=15

' Explications pour l'appel de la SUB:
  rem SUB InitRoue(CenterOption%,OptionBorderFormRoue$)
  ' CenterOption%: 1 avec le centre OU 0 sans le centre
  ' OptionBorderFormRoue$: "N" => Normal - "S" => Small - "H" => Hide
    ' (Si hide prévoir une sortie et HIDE NumFormRoue%)

' Appel de la SUB    
    InitRoue(1,"S")


' Gestion des Instructions
  ChangeInstructionsRoue("Cliquez sur la roue")
  ON_MOUSE_DOWN Scene3dRoue%,LanceRoue

END
rem ============================================================' SORTIE ROUE 3D
ResultatRoue:
    OFF_MOUSE_DOWN Scene3dRoue%
  ' Résultat
    ChangeInstructionsRoue(string$(10," ")+"Résultat")
    MESSAGE STR$(ResultatTirage%)
  ' Réactiver la roue
    ChangeInstructionsRoue("Cliquez sur la roue")
    ON_MOUSE_DOWN Scene3dRoue%,LanceRoue
  ' OU autres possibilités
  ' ...
  ' ...
RETURN

rem ========================================================' 3D Wheel / Roue 3D
' 24 data(s) disponibles pour 24 parts
DATA 255,255,255
DATA 000,000,255
DATA 000,255,000
DATA 255,000,000
DATA 000,255,255
DATA 255,255,000
DATA 255,000,255
DATA 130,130,130
DATA 100,000,000
DATA 000,150,000
DATA 000,000,150
DATA 000,150,150
DATA 150,150,000
DATA 150,000,150
DATA 255,128,128
DATA 205,150,255
DATA 255,050,000
DATA 005,100,000
DATA 000,000,000
DATA 100,205,255
DATA 255,180,100
DATA 100,100,200
DATA 100,255,000
DATA 000,150,150
' ------------------------------------------------------------------------------
SUB InitRoue(CenterOption%,OptionBorderFormRoue$)
    DIM_LOCAL i%,Xroue,Yroue,r%,v%,b%
    IF LABEL("ResultatRoue")=0 then LABEL ResultatRoue
    IF LABEL("LanceRoue")=0 then LABEL LanceRoue
    IF LABEL("LanceRoueSuite")=0 then LABEL LanceRoueSuite
    IF VARIABLE("PictureInstructions%")=0 then DIM PictureInstructions%
    IF VARIABLE("Tanime")=0 then DIM Tanime
    IF VARIABLE("NbTic")=0 then DIM NbTic : NbTic=1
    IF VARIABLE("AleaNbTic")=0 then DIM AleaNbTic
    IF VARIABLE("ResultatTirage%")=0 then DIM ResultatTirage%
    IF VARIABLE("PictureRoue%")=0 then DIM PictureRoue%
    IF VARIABLE("PictureImage%")=0 then DIM PictureImage%
    IF VARIABLE("Scene3dRoue%")=0 then DIM Scene3dRoue%
    IF VARIABLE("TdPlane%")=0 then DIM TdPlane%
    IF VARIABLE("Scene2dRoue%")=0 then DIM Scene2dRoue%
    IF VARIABLE("PictureRoue2d%")=0 then DIM PictureRoue2d%
    IF VARIABLE("PictureImageRoue2d%")=0 then DIM PictureImageRoue2d%
    IF VARIABLE("SpriteRoue2d%")=0 then DIM SpriteRoue2d%  
    DEGREES
 '  NumFormRoue%
    IF OptionBorderFormRoue$="N" THEN BORDER_NORMAL NumFormRoue%
    IF OptionBorderFormRoue$="S" THEN BORDER_SMALL NumFormRoue%
    IF OptionBorderFormRoue$="H" THEN BORDER_HIDE NumFormRoue%
    HEIGHT NumFormRoue%,540 + HEIGHT(NumFormRoue%)-HEIGHT_CLIENT(NumFormRoue%)
    WIDTH NumFormRoue%,500 + WIDTH(0)-WIDTH_CLIENT(NumFormRoue%)
    LEFT NumFormRoue%,(SCREEN_X-WIDTH(NumFormRoue%))/2 : TOP NumFormRoue%,(SCREEN_Y-HEIGHT(NumFormRoue%))/2
 '  PictureRoue%    
    No%=NumFormRoue%+1 : PictureRoue%=No%
    PICTURE No% : WIDTH No%,500 : HEIGHT No%,500
    No%=No%+1 : PictureImage%=No%
    IMAGE PictureImage%
    2D_TARGET_IS PictureRoue%
    COLOR PictureRoue%,BackColor_r%,BackColor_v%,BackColor_b%
    2D_PEN_COLOR 100,100,100
    2D_CIRCLE 250,250,210
    FOR i% = 0 to 360 STEP StepNbPart%
        Xroue = COS(i%)*210+250
        Yroue = SIN(i%)*210+250
        2D_LINE 250,250,Xroue,Yroue
    NEXT i%
    FOR i% = 12 to 354 STEP StepNbPart%
        Xroue = COS(i%)*190+250
        Yroue = SIN(i%)*190 +250
        READ r%
        READ v%
        READ b%
        2D_FLOOD Xroue,Yroue,r%,v%,b%
    NEXT i%
    Center(CenterOption%)
    2D_IMAGE_COPY PictureImage%,0,0,500,500
  ' Scene3dRoue%  
    No%=No%+1 : Scene3dRoue%=No%
    SCENE3D Scene3dRoue% : HEIGHT Scene3dRoue%,500 : WIDTH Scene3dRoue%,500
    COLOR Scene3dRoue%,BackColor_r%,BackColor_v%,BackColor_b%
  ' TdPlane%  
    No3d%=No3d%+1 : TdPlane%=No3d%
    CAM_MOVE -2.6
    3D_PLANE TdPlane%
    3D_V_TILE TdPlane%,1
    3D_U_TILE TdPlane%,1
    3D_IMAGE_TEXTURE No3d%,PictureImage%
    3D_X_ROTATE TdPlane%,0
  ' Scene2dRoue%  
    No%=No%+1 : Scene2dRoue%=No%
    SCENE2D Scene2dRoue% : HEIGHT Scene2dRoue%,40 : WIDTH Scene2dRoue%,31
    COLOR Scene2dRoue%,BackColor_r%,BackColor_v%,BackColor_b% : LEFT Scene2dRoue%,235
  ' PictureRoue2d%
    No%=No%+1 : PictureRoue2d%=No%
    PICTURE PictureRoue2d% : HEIGHT PictureRoue2d%,40 : WIDTH PictureRoue2d%,31
    COLOR PictureRoue2d%,BackColor_r%,BackColor_v%,BackColor_b%
    2D_TARGET_IS PictureRoue2d%
    2D_PEN_COLOR 50,50,50
    2D_POLY_FROM 0,0
    2D_POLY_TO 15,39
    2D_POLY_TO 30,0
    2D_POLY_TO 15,10
    2D_POLY_TO 0,0
    2D_FLOOD 15,20,150,150,150
  ' PictureImageRoue2d%    
    No%=No%+1 : PictureImageRoue2d%=No%
    IMAGE PictureImageRoue2d%
    2D_IMAGE_COPY PictureImageRoue2d%,0,0,31,40
  ' SpriteRoue2d%  
    NoSprite%=NoSprite%+1 : SpriteRoue2d%=NoSprite%
    SPRITE SpriteRoue2d%  : SPRITE_IMAGE_LOAD SpriteRoue2d%,PictureImageRoue2d%      
  ' Bandeau instruction
    No%=No%+1 : PictureInstructions%=No%
    PICTURE  No% : HEIGHT No%,40 : WIDTH No%,500 : TOP No%,500 : COLOR No%,200,200,200  
    2D_TARGET_IS No% : 2D_FILL_COLOR 200,200,200
    FONT_NAME No%,"Times New Roman" : FONT_SIZE No%,18 : FONT_ITALIC No%
END_SUB
' ------------------------------------------------------------------------------
SUB ChangeInstructionsRoue(TexteRoue$)
     CLS : 2D_TARGET_IS PictureInstructions% : COLOR PictureInstructions%,200,200,200 : 2D_FILL_COLOR 200,200,200
     FONT_NAME PictureInstructions%,"Times New Roman" : FONT_SIZE PictureInstructions%,18 : FONT_ITALIC PictureInstructions%
     PRINT_TARGET_IS PictureInstructions% : PRINT_LOCATE 155,8 :  PRINT TexteRoue$
END_SUB
' ------------------------------------------------------------------------------
LanceRoue:
    ChangeInstructionsRoue(string$(10," ")+"Patientez ...")
    OFF_MOUSE_DOWN Scene3dRoue%
    ON_MOUSE_UP Scene3dRoue%, LanceRoueSuite
    NbTic = NUMBER_TICKS
RETURN
' ------------------------------------------------------------------------------
LanceRoueSuite:
    OFF_MOUSE_UP Scene3dRoue%
    AleaNbTic = NUMBER_TICKS - NbTic + RND(360)
    IF AleaNbTic > 5000
        AleaNbTic = 4000 + RND(360) + RND(180)
    END_IF
    Animation()
    ON_MOUSE_DOWN Scene3dRoue%,LanceRoue
RETURN
' ------------------------------------------------------------------------------
SUB Animation()
    WHILE AleaNbTic > 5
        NbTic=AleaNbTic/100
        3D_Z_ROTATE TdPlane%,WRAP_VALUE((NbTic+Tanime)*SensRtation%)
         caption NumFormRoue%,str$(int(wrap_value(o3d_z_rotate(TdPlane%)+270)/StepNbPart%)+1):' solution Silverman
'       CAPTION NumFormRoue%, INT((WRAP_VALUE(NbTic+Tanime+90)/StepNbPart%)+1):' solution Marc
        Tanime=NbTic+Tanime
        DISPLAY
        PAUSE 20
        AleaNbTic=AleaNbTic-NbTic
        NbTic = NbTic*.95
    END_WHILE
   ResultatTirage%=int(wrap_value(o3d_z_rotate(TdPlane%)+270)/StepNbPart%)+1 :' solution Silverman
'   ResultatTirage%=INT((WRAP_VALUE(NbTic+Tanime+90)/StepNbPart%)+1):' solution Marc
   gosub ResultatRoue : return
END_SUB
' ------------------------------------------------------------------------------
SUB Center(La)
    IF La = 1
        2D_FILL_COLOR BackColor_r%,BackColor_v%,BackColor_b%
        FONT_COLOR PictureRoue%,255,255,255
        2D_PEN_COLOR 255,255,255
        2D_CIRCLE 250,250,40
        PRINT_TARGET_IS PictureRoue%
        FONT_NAME PictureRoue%,"Times New Roman"
        FONT_SIZE PictureRoue%,22
        PRINT_LOCATE 233,215
        PRINT "3D"
        FONT_SIZE PictureRoue%,12
        PRINT_LOCATE 218,245
        PRINT "Panoramic"
        PRINT_LOCATE 230,265
        PRINT "Wheel"
    END_IF
END_SUB


A+
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Marc

avatar

Nombre de messages : 793
Age : 57
Localisation : TOURS
Date d'inscription : 17/03/2014

MessageSujet: Re: Roue pour jeu   Mer 30 Mai 2018 - 21:33

C'est super Jean-Claude !
Tu as travaillé beaucoup sur le source. Bravo !
J'aime bien ta roue sur fond noir : les couleurs ressortent beaucoup mieux.
Je vois que tu as partagé sans problème le gâteau en 24 parts en y ajoutant des couleurs.

J'ai mis une décélération finale très lente pour accentuer le suspense... Là aussi, tu peux personnaliser cette décélération.
Tout est dans la SUB Animation.
La PAUSE 20, toujours dans la SUB Animation, est importante. C'est elle qui m'a permis d'avoir la même décélération de la roue sur différents ordinateurs. Peu importe si l'ordinateur est lent ou rapide, le résultat final reste identique.

Je suis très content que cette roue puisse te servir.

Bonne continuation !

Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jean Claude

avatar

Nombre de messages : 5472
Age : 64
Localisation : 83 Var
Date d'inscription : 07/05/2009

MessageSujet: Re: Roue pour jeu   Jeu 31 Mai 2018 - 14:07

Bonjour à tous,

Marc a écrit:
J'ai mis une décélération finale très lente pour accentuer le suspense... Là aussi, tu peux personnaliser cette décélération.
Tout est dans la SUB Animation.
La PAUSE 20, toujours dans la SUB Animation, est importante. C'est elle qui m'a permis d'avoir la même décélération de la roue sur différents ordinateurs. Peu importe si l'ordinateur est lent ou rapide, le résultat final reste identique.

Dans la version ci-dessous, j'ai donné la possibilité de changer cette valeur au programmeur.
C'est l'avant dernier paramètre de la SUB InitRoue(TopRoue%,LeftRoue%,TitleRoue$,CenterOption%,inertie%,OptionBorderFormRoue$), nommé inertie%.
Mais tu as raison la valeur de inertie%=20 est la meilleure, surtout pour la fluidité.

J'ai adapté cette nouvelle version pour utilisation de la roue sur FORM 0 ou sur un autre FORM.
J'ai donné un exemple d' utilisation (voir le label GestionRoue:)
Il faut lire les commentaires pour voir toute les possibiltés de positionnement, réglages, etc...

A vous tous de découvrir.  Very Happy

Code:
' ------------------------------------------------------------------------------
'  PANORAMIC 3D Wheel / Roue 3D
'  Marc - May 2018 - Panoramic v0.9.28.i18
'  Adapté par Jean Claude pour utilisation dans un code avec gestion des n° d'objets.
' ------------------------------------------------------------------------------
   HEIGHT 0,65  : COLOR 0,0,0,0  : FONT_COLOR 0,255,255,0 : FONT_SIZE 0,14
   FONT_NAME 0,"Consolas" : FONT_BOLD 0 : PRINT " Patientez ... "
   TOP 0,(screen_y-height(0))/2 : LEFT 0,(screen_x-width(0))/2
' ------------------------------------------------------------------------------
DIM No%,No3d%,NoSprite% :' Variables de gestion des n° d'objets
DIM NumFormRoue%:' Si besoin d'un autre FORM que 0 pour la roue
  ' Attribution (ou pas) d'un n° d'objet <>0 à NumFormRoue%  
    No%=No%+1 :' Si vous souhaitez que la roue soit sur FORM 0 shuntez cette ligne  
    NumFormRoue%=No%  

' Autres variables (constantes) nécessaires pour le fontionnement la roue:    
    DIM BackColor_r%,BackColor_v%,BackColor_b%
  ' BackColor_r% : BackColor_v% : BackColor_b% Les 3 Couleurs derrière la roue
    DIM ResistanceRoue  
  ' ResistanceRoue: Plus le chiffre est éloigné de zéro plus la vitesse initiale de la roue sera grande
  ' Sens de Rotation: Si ResistanceRoue est négative (-0.5) => sens des aiguilles d'une montre : positive (0.5) => sens inverse des aiguilles d'une montre
    DIM StepNbPart% :' définition du nombre sections de la roue (Voir exemple ci-dessous)
  ' StepNbPart% : 20 => 18 Parts : 15 => 24 parts : 24 => 15 parts : 30 => 12 parts
  ' Attention le nombre de lignes de data doit correspondre au nombre de parts (ici 18 parts mais 24 prévues au maxi)

' Règlages de la roue (valeurs des constantes) à votre goût.
  BackColor_r%=0 : BackColor_v%=0 : BackColor_b%=0
  ResistanceRoue = -0.99  :  StepNbPart%=20  
 
' Mise en place de la Roue    
  ' Les explications des paramètres de la SUB InitRoue(,,) sont dans la SUB
  ' dimensions de la fenêtre de la roue sont 500x540
  InitRoue((screen_y-540)/2,(screen_x-500)/2,"La roue de la fortune",1,20,"H")

' redonner la main à form 0
  COMMAND_TARGET_IS 0 : PRINT_TARGET_IS 0  

' nouveau message Form 0
  PRINT_LOCATE 0,0 : PRINT "Fermeture ici "+string$(41,"-")+" ^"

' GO
  ChangeInstructionsRoue(string$(25," ")+"Cliquez sur la roue")
  ON_MOUSE_DOWN Scene3dRoue%,LanceRoue : SHOW NumFormRoue%

' Déplacement de Form 0
  TOP 0,0 : LEFT 0,0

message "INFO: la durée, avant le relâchement, du clic influe sur la vitesse initiale de la roue."
END
rem ============================================================' SORTIE ROUE 3D
GestionRoue:
    OFF_MOUSE_DOWN Scene3dRoue%
  ' Résultat
    ChangeInstructionsRoue(string$(35," ")+"Résultat")
    MESSAGE STR$(ResultatTirage%)
 
  ' Désactiver provisoirement la roue  
    IF NumFormRoue%<>0 then HIDE NumFormRoue%
    IF NumFormRoue%<>0 then SET_FOCUS 0
    
    PAUSE 2000
    
  ' Réactiver la roue
    ChangeInstructionsRoue(string$(25," ")+"Cliquez sur la roue")
    ON_MOUSE_DOWN Scene3dRoue%,LanceRoue
    IF NumFormRoue%<>0 then SHOW NumFormRoue%
 
  ' OU autres possibilités
  ' ...
  ' ...
RETURN

rem ========================================================' 3D Wheel / Roue 3D
' 24 data(s) disponibles pour 24 parts
DATA 255,255,255
DATA 000,000,255
DATA 000,255,000
DATA 255,000,000
DATA 000,255,255
DATA 255,255,000
DATA 255,000,255
DATA 130,130,130
DATA 100,000,000
DATA 000,150,000
DATA 000,000,150
DATA 000,150,150
DATA 150,150,000
DATA 150,000,150
DATA 255,128,128
DATA 205,150,255
DATA 255,050,000
DATA 005,100,000
DATA 000,000,000
DATA 100,205,255
DATA 255,180,100
DATA 100,100,200
DATA 100,255,000
DATA 000,150,150
' ------------------------------------------------------------------------------
SUB InitRoue(TopRoue%,LeftRoue%,TitleRoue$,CenterOption%,inertie%,OptionBorderFormRoue$)
  ' Explications des paramètres de la SUB
  ' TopRoue%,LeftRoue%: position de la roue
  ' TitleRoue$ = CAPTION NumFormRoue%
  ' CenterOption%: 1 avec le centre OU 0 sans le centre
  ' inertie%: il s'agit de la vitesse de ralentissement de la roue (Minimum 1) Au moins 20 pour une bonne fluidité
  ' OptionBorderFormRoue$: "N" => Normal - "S" ou "" => Small - "H" => Hide
    ' (Si hide prévoir une sortie et HIDE NumFormRoue%)
    create_hide
    IF NumFormRoue%<>0
       FORM NumFormRoue% : ' HIDE NumFormRoue%  
       COMMAND_TARGET_IS NumFormRoue%
    ELSE
       COMMAND_TARGET_IS 0
       OptionBorderFormRoue$="S"
    END_IF
    IF ResistanceRoue=0 then ResistanceRoue=1
    DIM_LOCAL i%,Xroue,Yroue,r%,v%,b%
    IF LABEL("GestionRoue")=0 then LABEL GestionRoue
    IF LABEL("LanceRoue")=0 then LABEL LanceRoue
    IF LABEL("LanceRoueSuite")=0 then LABEL LanceRoueSuite
    IF VARIABLE("PictureInstructions%")=0 then DIM PictureInstructions%
    IF VARIABLE("Tanime")=0 then DIM Tanime
    IF VARIABLE("NbTic")=0 then DIM NbTic : NbTic=1
    IF VARIABLE("AleaNbTic")=0 then DIM AleaNbTic
    IF VARIABLE("ResultatTirage%")=0 then DIM ResultatTirage%
    IF VARIABLE("PictureRoue%")=0 then DIM PictureRoue%
    IF VARIABLE("PictureImage%")=0 then DIM PictureImage%
    IF VARIABLE("Scene3dRoue%")=0 then DIM Scene3dRoue%
    IF VARIABLE("TdPlane%")=0 then DIM TdPlane%
    IF VARIABLE("Scene2dRoue%")=0 then DIM Scene2dRoue%
    IF VARIABLE("PictureRoue2d%")=0 then DIM PictureRoue2d%
    IF VARIABLE("PictureImageRoue2d%")=0 then DIM PictureImageRoue2d%
    IF VARIABLE("SpriteRoue2d%")=0 then DIM SpriteRoue2d%  
    IF VARIABLE("InertieRoue%")=0 then DIM InertieRoue%
    IF OptionBorderFormRoue$="" then OptionBorderFormRoue$="S"
    IF inertie%<1 then inertie%=20
    InertieRoue%=inertie%
    DEGREES
 '  NumFormRoue%
    IF OptionBorderFormRoue$="N" THEN BORDER_NORMAL NumFormRoue%
    IF OptionBorderFormRoue$="S" THEN BORDER_SMALL NumFormRoue%
    IF OptionBorderFormRoue$="H" THEN BORDER_HIDE NumFormRoue%
    HEIGHT NumFormRoue%,540 + HEIGHT(NumFormRoue%)-HEIGHT_CLIENT(NumFormRoue%)
    WIDTH NumFormRoue%,500 + WIDTH(NumFormRoue%)-WIDTH_CLIENT(NumFormRoue%)
    TOP NumFormRoue%,TopRoue% : LEFT NumFormRoue%,LeftRoue%
    CAPTION NumFormRoue%,TitleRoue$
 '  PictureRoue%    
    No%=NumFormRoue%+1 : PictureRoue%=No%
    PICTURE No% : WIDTH No%,500 : HEIGHT No%,500
    No%=No%+1 : PictureImage%=No%
    IMAGE PictureImage%
    2D_TARGET_IS PictureRoue%
    COLOR PictureRoue%,BackColor_r%,BackColor_v%,BackColor_b%
    2D_PEN_COLOR 100,100,100
    2D_CIRCLE 250,250,210
    FOR i% = 0 to 360 STEP StepNbPart%
        Xroue = COS(i%)*210+250
        Yroue = SIN(i%)*210+250
        2D_LINE 250,250,Xroue,Yroue
    NEXT i%
    FOR i% = 12 to 354 STEP StepNbPart%
        Xroue = COS(i%)*190+250
        Yroue = SIN(i%)*190 +250
        READ r%
        READ v%
        READ b%
        2D_FLOOD Xroue,Yroue,r%,v%,b%
    NEXT i%
    Center(CenterOption%)
    2D_IMAGE_COPY PictureImage%,0,0,500,500
  ' Scene3dRoue%  
    No%=No%+1 : Scene3dRoue%=No%
    SCENE3D Scene3dRoue% : HEIGHT Scene3dRoue%,500 : WIDTH Scene3dRoue%,500
    COLOR Scene3dRoue%,BackColor_r%,BackColor_v%,BackColor_b%
  ' TdPlane%  
    No3d%=No3d%+1 : TdPlane%=No3d%
    CAM_MOVE -2.6
    3D_PLANE TdPlane%
    3D_V_TILE TdPlane%,1
    3D_U_TILE TdPlane%,1
    3D_IMAGE_TEXTURE No3d%,PictureImage%
    3D_X_ROTATE TdPlane%,0
  ' Scene2dRoue%  
    No%=No%+1 : Scene2dRoue%=No%
    SCENE2D Scene2dRoue% : HEIGHT Scene2dRoue%,40 : WIDTH Scene2dRoue%,31
    COLOR Scene2dRoue%,BackColor_r%,BackColor_v%,BackColor_b% : LEFT Scene2dRoue%,235
  ' PictureRoue2d%
    No%=No%+1 : PictureRoue2d%=No%
    PICTURE PictureRoue2d% : HEIGHT PictureRoue2d%,40 : WIDTH PictureRoue2d%,31
    COLOR PictureRoue2d%,BackColor_r%,BackColor_v%,BackColor_b%
    2D_TARGET_IS PictureRoue2d%
    2D_PEN_COLOR 50,50,50
    2D_POLY_FROM 0,0
    2D_POLY_TO 15,39
    2D_POLY_TO 30,0
    2D_POLY_TO 15,10
    2D_POLY_TO 0,0
    2D_FLOOD 15,20,150,150,150
  ' PictureImageRoue2d%    
    No%=No%+1 : PictureImageRoue2d%=No%
    IMAGE PictureImageRoue2d%
    2D_IMAGE_COPY PictureImageRoue2d%,0,0,31,40
  ' SpriteRoue2d%  
    NoSprite%=NoSprite%+1 : SpriteRoue2d%=NoSprite%
    SPRITE SpriteRoue2d%  : SPRITE_IMAGE_LOAD SpriteRoue2d%,PictureImageRoue2d%      
  ' Bandeau instruction
    No%=No%+1 : PictureInstructions%=No%
    PICTURE  No% : HEIGHT No%,40 : WIDTH No%,500 : TOP No%,500 : COLOR No%,200,200,200  
    2D_TARGET_IS No% : 2D_FILL_COLOR 200,200,200
    FONT_NAME No%,"Times New Roman" : FONT_SIZE No%,18 : FONT_ITALIC No%
    show_all
    HIDE NumFormRoue%
    COMMAND_TARGET_IS 0
END_SUB
' ------------------------------------------------------------------------------
SUB ChangeInstructionsRoue(TexteRoue$)
     CLS : 2D_TARGET_IS PictureInstructions% : COLOR PictureInstructions%,200,200,200 : 2D_FILL_COLOR 200,200,200
     FONT_NAME PictureInstructions%,"Times New Roman" : FONT_SIZE PictureInstructions%,18 : FONT_ITALIC PictureInstructions%
     PRINT_TARGET_IS PictureInstructions% : PRINT_LOCATE 5,8 :  PRINT TexteRoue$
END_SUB
' ------------------------------------------------------------------------------
LanceRoue:
    ChangeInstructionsRoue("Patientez ...")
    OFF_MOUSE_DOWN Scene3dRoue%
    ON_MOUSE_UP Scene3dRoue%, LanceRoueSuite
    NbTic = NUMBER_TICKS
RETURN
' ------------------------------------------------------------------------------
LanceRoueSuite:
    OFF_MOUSE_UP Scene3dRoue%
    AleaNbTic = NUMBER_TICKS - NbTic + RND(360)
    IF AleaNbTic > 5000
        AleaNbTic = 4000 + RND(360) + RND(180)
    END_IF
    Animation()
    ON_MOUSE_DOWN Scene3dRoue%,LanceRoue
RETURN
' ------------------------------------------------------------------------------
SUB Animation()
    WHILE AleaNbTic > 5
        NbTic=AleaNbTic/100
        3D_Z_ROTATE TdPlane%,WRAP_VALUE((NbTic+Tanime)*ResistanceRoue)
        ChangeInstructionsRoue(string$(40," ")+str$(int(wrap_value(o3d_z_rotate(TdPlane%)+270)/StepNbPart%)+1))
'         caption NumFormRoue%,str$(int(wrap_value(o3d_z_rotate(TdPlane%)+270)/StepNbPart%)+1)
        Tanime=NbTic+Tanime
        DISPLAY
        PAUSE InertieRoue%
        AleaNbTic=AleaNbTic-NbTic
        NbTic = NbTic*.95
    END_WHILE
   ResultatTirage%=int(wrap_value(o3d_z_rotate(TdPlane%)+270)/StepNbPart%)+1
   gosub GestionRoue : return
END_SUB
' ------------------------------------------------------------------------------
SUB Center(La)
    IF La = 1
        2D_FILL_COLOR BackColor_r%,BackColor_v%,BackColor_b%
        FONT_COLOR PictureRoue%,255,255,255
        2D_PEN_COLOR 255,255,255
        2D_CIRCLE 250,250,40
        PRINT_TARGET_IS PictureRoue%
        FONT_NAME PictureRoue%,"Times New Roman"
        FONT_SIZE PictureRoue%,22
        PRINT_LOCATE 233,215
        PRINT "3D"
        FONT_SIZE PictureRoue%,12
        PRINT_LOCATE 218,245
        PRINT "Panoramic"
        PRINT_LOCATE 230,265
        PRINT "Wheel"
    END_IF
END_SUB


A+
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
papydall

avatar

Nombre de messages : 5951
Age : 67
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

MessageSujet: Re: Roue pour jeu   Jeu 31 Mai 2018 - 15:47




Je veux bien patienter, mais jusqu'à quand ?

Bon, je patiente ... je patiente ... je patiente ... je patiente ... je patiente ... je patiente ... je patiente ... je patiente ... je patiente ... je patiente ... je patiente ... je patiente ...


Mon stock de la patience est à zéro.  affraid  affraid  affraid
Que dois-je faire, ensuite ?


Bon, j'ai compris : je fais le tueur et je tue le process !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
Jean Claude

avatar

Nombre de messages : 5472
Age : 64
Localisation : 83 Var
Date d'inscription : 07/05/2009

MessageSujet: Re: Roue pour jeu   Jeu 31 Mai 2018 - 17:21

@Papydall,

Oui, il y a un problème de délai qui n'est pas toujours présent.
Au maximum j'ai eu une dizaine de secondes. Le plus souvent 2 à 3 secondes.

Ce problème disparaît si on utilise Form 0 comme fenêtre pour la roue en shuntant la ligne 13.
Je ne comprends pas pourquoi c'est ainsi Question Question Question

A+


Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jean Claude

avatar

Nombre de messages : 5472
Age : 64
Localisation : 83 Var
Date d'inscription : 07/05/2009

MessageSujet: Re: Roue pour jeu   Jeu 31 Mai 2018 - 17:26

Bon ! Je n'ai pas résolu le problème de délai de chargement qui est trop long, mais j'ai apporté un +: La remise au point de départ de la roue sur la case blanche.

Code:
' ------------------------------------------------------------------------------
'  PANORAMIC 3D Wheel / Roue 3D
'  Marc - May 2018 - Panoramic v0.9.28.i18
'  Adapté par Jean Claude pour utilisation dans un code avec gestion des n° d'objets.
' ------------------------------------------------------------------------------
   HEIGHT 0,65  : COLOR 0,0,0,0  : FONT_COLOR 0,255,255,0 : FONT_SIZE 0,14
   FONT_NAME 0,"Consolas" : FONT_BOLD 0 : PRINT " Patientez ... "
   TOP 0,(screen_y-height(0))/2 : LEFT 0,(screen_x-width(0))/2
' ------------------------------------------------------------------------------
DIM No%,No3d%,NoSprite% :' Variables de gestion des n° d'objets
DIM NumFormRoue%:' Si besoin d'un autre FORM que 0 pour la roue
  ' Attribution (ou pas) d'un n° d'objet <>0 à NumFormRoue%  
    No%=No%+1 :' Si vous souhaitez que la roue soit sur FORM 0 shuntez cette ligne  
    NumFormRoue%=No%  
    if No%<>0 then FORM NumFormRoue% : HIDE NumFormRoue%
' Autres variables (constantes) nécessaires pour le fontionnement la roue:    
    DIM BackColor_r%,BackColor_v%,BackColor_b%
  ' BackColor_r% : BackColor_v% : BackColor_b% Les 3 Couleurs derrière la roue
    DIM ResistanceRoue  
  ' ResistanceRoue: Plus le chiffre est éloigné de zéro plus la vitesse initiale de la roue sera grande
  ' Sens de Rotation: Si ResistanceRoue est négative (-0.5) => sens des aiguilles d'une montre : positive (0.5) => sens inverse des aiguilles d'une montre
    DIM StepNbPart% :' définition du nombre sections de la roue (Voir exemple ci-dessous)
  ' StepNbPart% : 20 => 18 Parts : 15 => 24 parts : 24 => 15 parts : 30 => 12 parts
  ' Attention le nombre de lignes de data doit correspondre au nombre de parts (ici 18 parts mais 24 prévues au maxi)

' Règlages de la roue (valeurs des constantes) à votre goût.
  BackColor_r%=0 : BackColor_v%=0 : BackColor_b%=0
  ResistanceRoue = -0.99  :  StepNbPart%=20  
 
' Mise en place de la Roue    
  ' Les explications des paramètres de la SUB InitRoue(,,) sont dans la SUB
  ' dimensions de la fenêtre de la roue sont 500x540
  InitRoue((screen_y-540)/2,(screen_x-500)/2,"La roue de la fortune",1,20,"H")

' redonner la main à form 0
  COMMAND_TARGET_IS 0 : PRINT_TARGET_IS 0  

' nouveau message Form 0
  PRINT_LOCATE 0,0 : PRINT "Fermeture ici "+string$(41,"-")+" ^"

' GO
  ChangeInstructionsRoue(string$(25," ")+"Cliquez sur la roue")
  ON_MOUSE_DOWN Scene3dRoue%,LanceRoue : SHOW NumFormRoue%

' Déplacement de Form 0
  TOP 0,0 : LEFT 0,0

' message "INFO: la durée, avant le relâchement, du clic influe sur la vitesse initiale de la roue."
END
rem ============================================================' SORTIE ROUE 3D
GestionRoue:
    OFF_MOUSE_DOWN Scene3dRoue%
  ' Résultat
    ChangeInstructionsRoue(string$(35," ")+"Résultat")
    MESSAGE STR$(ResultatTirage%)
 
  ' Désactiver provisoirement la roue  
    IF NumFormRoue%<>0 then HIDE NumFormRoue%
    IF NumFormRoue%<>0 then SET_FOCUS 0
    
    PAUSE 2000

  ' Retour de la roue case dépard
    3D_Z_ROTATE TdPlane%,1

  ' Réactiver la roue
    ChangeInstructionsRoue(string$(25," ")+"Cliquez sur la roue")
    ON_MOUSE_DOWN Scene3dRoue%,LanceRoue
    IF NumFormRoue%<>0 then SHOW NumFormRoue%
 
  ' OU autres possibilités
  ' ...
  ' ...
RETURN

rem ========================================================' 3D Wheel / Roue 3D
' 24 data(s) disponibles pour 24 parts
DATA 255,155,100
DATA 000,000,255
DATA 000,255,000
DATA 255,000,000
DATA 000,255,255
DATA 255,255,000
DATA 255,000,255
DATA 130,130,130
DATA 100,000,000
DATA 000,150,000
DATA 000,000,150
DATA 000,150,150
DATA 150,150,000
DATA 255,255,255
DATA 255,128,128
DATA 205,150,255
DATA 255,050,000
DATA 005,100,000
DATA 000,000,000
DATA 100,205,255
DATA 255,180,100
DATA 100,100,200
DATA 100,255,000
DATA 000,150,150
' ------------------------------------------------------------------------------
SUB InitRoue(TopRoue%,LeftRoue%,TitleRoue$,CenterOption%,inertie%,OptionBorderFormRoue$)
  ' Explications des paramètres de la SUB
  ' TopRoue%,LeftRoue%: position de la roue
  ' TitleRoue$ = CAPTION NumFormRoue%
  ' CenterOption%: 1 avec le centre OU 0 sans le centre
  ' inertie%: il s'agit de la vitesse de ralentissement de la roue (Minimum 1) Au moins 20 pour une bonne fluidité
  ' OptionBorderFormRoue$: "N" => Normal - "S" ou "" => Small - "H" => Hide
    ' (Si hide prévoir une sortie et HIDE NumFormRoue%)
    create_hide
    IF NumFormRoue%<>0
       COMMAND_TARGET_IS NumFormRoue%
    ELSE
       COMMAND_TARGET_IS 0
       if OptionBorderFormRoue$<>"N" then OptionBorderFormRoue$="S"
    END_IF
    IF ResistanceRoue=0 then ResistanceRoue=1
    DIM_LOCAL i%,Xroue,Yroue,r%,v%,b%
    IF LABEL("GestionRoue")=0 then LABEL GestionRoue
    IF LABEL("LanceRoue")=0 then LABEL LanceRoue
    IF LABEL("LanceRoueSuite")=0 then LABEL LanceRoueSuite
    IF VARIABLE("PictureInstructions%")=0 then DIM PictureInstructions%
    IF VARIABLE("Tanime")=0 then DIM Tanime
    IF VARIABLE("NbTic")=0 then DIM NbTic : NbTic=1
    IF VARIABLE("AleaNbTic")=0 then DIM AleaNbTic
    IF VARIABLE("ResultatTirage%")=0 then DIM ResultatTirage%
    IF VARIABLE("PictureRoue%")=0 then DIM PictureRoue%
    IF VARIABLE("PictureImage%")=0 then DIM PictureImage%
    IF VARIABLE("Scene3dRoue%")=0 then DIM Scene3dRoue%
    IF VARIABLE("TdPlane%")=0 then DIM TdPlane%
    IF VARIABLE("Scene2dRoue%")=0 then DIM Scene2dRoue%
    IF VARIABLE("PictureRoue2d%")=0 then DIM PictureRoue2d%
    IF VARIABLE("PictureImageRoue2d%")=0 then DIM PictureImageRoue2d%
    IF VARIABLE("SpriteRoue2d%")=0 then DIM SpriteRoue2d%  
    IF VARIABLE("InertieRoue%")=0 then DIM InertieRoue%
    IF OptionBorderFormRoue$="" then OptionBorderFormRoue$="S"
    IF inertie%<1 then inertie%=20
    InertieRoue%=inertie%
    DEGREES
 '  NumFormRoue%
    IF OptionBorderFormRoue$="N" THEN BORDER_NORMAL NumFormRoue%
    IF OptionBorderFormRoue$="S" THEN BORDER_SMALL NumFormRoue%
    IF OptionBorderFormRoue$="H" THEN BORDER_HIDE NumFormRoue%
    HEIGHT NumFormRoue%,540 + HEIGHT(NumFormRoue%)-HEIGHT_CLIENT(NumFormRoue%)
    WIDTH NumFormRoue%,500 + WIDTH(NumFormRoue%)-WIDTH_CLIENT(NumFormRoue%)
    TOP NumFormRoue%,TopRoue% : LEFT NumFormRoue%,LeftRoue%
    CAPTION NumFormRoue%,TitleRoue$
 '  PictureRoue%    
    No%=NumFormRoue%+1 : PictureRoue%=No%
    PICTURE No% : WIDTH No%,500 : HEIGHT No%,500
    No%=No%+1 : PictureImage%=No%
    IMAGE PictureImage%
    2D_TARGET_IS PictureRoue%
    COLOR PictureRoue%,BackColor_r%,BackColor_v%,BackColor_b%
    2D_PEN_COLOR 100,100,100
    2D_CIRCLE 250,250,210
    FOR i% = 0 to 360 STEP StepNbPart%
        Xroue = COS(i%)*210+250
        Yroue = SIN(i%)*210+250
        2D_LINE 250,250,Xroue,Yroue
    NEXT i%
    FOR i% = 12 to 354 STEP StepNbPart%
        Xroue = COS(i%)*190+250
        Yroue = SIN(i%)*190 +250
        READ r%
        READ v%
        READ b%
        2D_FLOOD Xroue,Yroue,r%,v%,b%
    NEXT i%
    Center(CenterOption%)
    2D_IMAGE_COPY PictureImage%,0,0,500,500
  ' Scene3dRoue%  
    No%=No%+1 : Scene3dRoue%=No%
    SCENE3D Scene3dRoue% : HEIGHT Scene3dRoue%,500 : WIDTH Scene3dRoue%,500
    COLOR Scene3dRoue%,BackColor_r%,BackColor_v%,BackColor_b%
  ' TdPlane%  
    No3d%=No3d%+1 : TdPlane%=No3d%
    CAM_MOVE -2.6
    3D_PLANE TdPlane%
    3D_V_TILE TdPlane%,1
    3D_U_TILE TdPlane%,1
    3D_IMAGE_TEXTURE No3d%,PictureImage%
    3D_X_ROTATE TdPlane%,1
  ' Scene2dRoue%  
    No%=No%+1 : Scene2dRoue%=No%
    SCENE2D Scene2dRoue% : HEIGHT Scene2dRoue%,40 : WIDTH Scene2dRoue%,31
    COLOR Scene2dRoue%,BackColor_r%,BackColor_v%,BackColor_b% : LEFT Scene2dRoue%,235
  ' PictureRoue2d%
    No%=No%+1 : PictureRoue2d%=No%
    PICTURE PictureRoue2d% : HEIGHT PictureRoue2d%,40 : WIDTH PictureRoue2d%,31
    COLOR PictureRoue2d%,BackColor_r%,BackColor_v%,BackColor_b%
    2D_TARGET_IS PictureRoue2d%
    2D_PEN_COLOR 50,50,50
    2D_POLY_FROM 0,0
    2D_POLY_TO 15,39
    2D_POLY_TO 30,0
    2D_POLY_TO 15,10
    2D_POLY_TO 0,0
    2D_FLOOD 15,20,150,150,150
  ' PictureImageRoue2d%    
    No%=No%+1 : PictureImageRoue2d%=No%
    IMAGE PictureImageRoue2d%
    2D_IMAGE_COPY PictureImageRoue2d%,0,0,31,40
  ' SpriteRoue2d%  
    NoSprite%=NoSprite%+1 : SpriteRoue2d%=NoSprite%
    SPRITE SpriteRoue2d%  : SPRITE_IMAGE_LOAD SpriteRoue2d%,PictureImageRoue2d%      
  ' Bandeau instruction
    No%=No%+1 : PictureInstructions%=No%
    PICTURE  No% : HEIGHT No%,40 : WIDTH No%,500 : TOP No%,500 : COLOR No%,200,200,200  
    2D_TARGET_IS No% : 2D_FILL_COLOR 200,200,200
    FONT_NAME No%,"Times New Roman" : FONT_SIZE No%,18 : FONT_ITALIC No%
    show_all
    HIDE NumFormRoue%
    COMMAND_TARGET_IS 0
END_SUB
' ------------------------------------------------------------------------------
SUB ChangeInstructionsRoue(TexteRoue$)
     CLS : 2D_TARGET_IS PictureInstructions% : COLOR PictureInstructions%,200,200,200 : 2D_FILL_COLOR 200,200,200
     FONT_NAME PictureInstructions%,"Times New Roman" : FONT_SIZE PictureInstructions%,18 : FONT_ITALIC PictureInstructions%
     PRINT_TARGET_IS PictureInstructions% : PRINT_LOCATE 5,8 :  PRINT TexteRoue$
END_SUB
' ------------------------------------------------------------------------------
LanceRoue:
    ChangeInstructionsRoue("Patientez ...")
    OFF_MOUSE_DOWN Scene3dRoue%
    ON_MOUSE_UP Scene3dRoue%, LanceRoueSuite
    NbTic = NUMBER_TICKS
RETURN
' ------------------------------------------------------------------------------
LanceRoueSuite:
    OFF_MOUSE_UP Scene3dRoue%
    AleaNbTic = NUMBER_TICKS - NbTic + RND(360)
    IF AleaNbTic > 5000
        AleaNbTic = 4000 + RND(360) + RND(180)
    END_IF
    Animation()
    ON_MOUSE_DOWN Scene3dRoue%,LanceRoue
RETURN
' ------------------------------------------------------------------------------
SUB Animation()
    WHILE AleaNbTic > 5
        NbTic=AleaNbTic/100
        3D_Z_ROTATE TdPlane%,WRAP_VALUE((NbTic+Tanime)*ResistanceRoue)
        ChangeInstructionsRoue(string$(40," ")+str$(int(wrap_value(o3d_z_rotate(TdPlane%)+270)/StepNbPart%)+1))
'         caption NumFormRoue%,str$(int(wrap_value(o3d_z_rotate(TdPlane%)+270)/StepNbPart%)+1)
        Tanime=NbTic+Tanime
        DISPLAY
        PAUSE InertieRoue%
        AleaNbTic=AleaNbTic-NbTic
        NbTic = NbTic*.95
    END_WHILE
   ResultatTirage%=int(wrap_value(o3d_z_rotate(TdPlane%)+270)/StepNbPart%)+1
   gosub GestionRoue : return
END_SUB
' ------------------------------------------------------------------------------
SUB Center(La)
    IF La = 1
        2D_FILL_COLOR BackColor_r%,BackColor_v%,BackColor_b%
        FONT_COLOR PictureRoue%,255,255,255
        2D_PEN_COLOR 255,255,255
        2D_CIRCLE 250,250,40
        PRINT_TARGET_IS PictureRoue%
        FONT_NAME PictureRoue%,"Times New Roman"
        FONT_SIZE PictureRoue%,22
        PRINT_LOCATE 233,215
        PRINT "3D"
        FONT_SIZE PictureRoue%,12
        PRINT_LOCATE 218,245
        PRINT "Panoramic"
        PRINT_LOCATE 230,265
        PRINT "Wheel"
    END_IF
END_SUB


A+
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jean Claude

avatar

Nombre de messages : 5472
Age : 64
Localisation : 83 Var
Date d'inscription : 07/05/2009

MessageSujet: Re: Roue pour jeu   Jeu 31 Mai 2018 - 20:42

Une autre version qui se charge plus rapidement.

Code:
' ------------------------------------------------------------------------------
'  PANORAMIC 3D Wheel / Roue 3D
'  Marc - May 2018 - Panoramic v0.9.28.i18
'  Adapté par Jean Claude pour utilisation dans un code avec gestion des n° d'objets.
' ------------------------------------------------------------------------------
  HEIGHT 0,65  : COLOR 0,0,0,0  : FONT_COLOR 0,255,255,0 : FONT_SIZE 0,14
  FONT_NAME 0,"Consolas" : FONT_BOLD 0 : PRINT " Patientez ... "
  TOP 0,(screen_y-height(0))/2 : LEFT 0,(screen_x-width(0))/2
' ------------------------------------------------------------------------------
DIM No%,No3d%,NoSprite% :' Variables de gestion des n° d'objets
DIM NumFormRoue%:' Si besoin d'un autre FORM que 0 pour la roue
' Attribution (ou pas) d'un n° d'objet <>0 à NumFormRoue% 
  No%=No%+1 :' Si vous souhaitez que la roue soit sur FORM 0 shuntez cette ligne 
  NumFormRoue%=No% 
  if No%<>0 then FORM NumFormRoue% : HIDE NumFormRoue%

' Variables et label pour la roue
' voir commentaire dans la SUB InitVariableLabelRoue()
  InitVariableLabelRoue()

' Règlages de la roue (valeurs des constantes) à votre goût.
  BackColor_r%=0 : BackColor_v%=0 : BackColor_b%=0
  ResistanceRoue = -0.99  :  StepNbPart%=20 
 
' Mise en place de la Roue   
  ' Les explications des paramètres de la SUB InitRoue(,,) sont dans la SUB
  ' dimensions de la fenêtre de la roue sont 500x540
  InitRoue((screen_y-540)/2,(screen_x-500)/2,"La roue de la fortune",1,20,"H")

' redonner la main à form 0
  COMMAND_TARGET_IS 0 : PRINT_TARGET_IS 0 

' nouveau message Form 0
  PRINT_LOCATE 0,0 : PRINT "Fermeture ici "+string$(41,"-")+" ^"

' GO
  ChangeInstructionsRoue(string$(25," ")+"Cliquez sur la roue")
  ON_MOUSE_DOWN Scene3dRoue%,LanceRoue : SHOW NumFormRoue%

' Déplacement de Form 0
  TOP 0,0 : LEFT 0,0

' message "INFO: la durée, avant le relâchement, du clic influe sur la vitesse initiale de la roue."
END
rem ============================================================' SORTIE ROUE 3D
GestionRoue:
    OFF_MOUSE_DOWN Scene3dRoue%
  ' Résultat
    ChangeInstructionsRoue(string$(35," ")+"Résultat")
    MESSAGE STR$(ResultatTirage%)
 
  ' Désactiver provisoirement la roue 
    IF NumFormRoue%<>0 then HIDE NumFormRoue%
    IF NumFormRoue%<>0 then SET_FOCUS 0
   
    PAUSE 1000

  ' Retour de la roue case dépard (Facultatif)
    3D_Z_ROTATE TdPlane%,1

  ' Réactiver la roue
    ChangeInstructionsRoue(string$(25," ")+"Cliquez sur la roue")
    ON_MOUSE_DOWN Scene3dRoue%,LanceRoue
    IF NumFormRoue%<>0 then SHOW NumFormRoue%
 
  ' OU autres possibilités
  ' ...
  ' ...
RETURN

rem ========================================================' 3D Wheel / Roue 3D
' 24 data(s) disponibles pour 24 parts
DATA 255,155,100
DATA 000,000,255
DATA 000,255,000
DATA 255,000,000
DATA 000,255,255
DATA 255,255,000
DATA 255,000,255
DATA 130,130,130
DATA 100,000,000
DATA 000,150,000
DATA 000,000,150
DATA 000,150,150
DATA 150,150,000
DATA 255,255,255
DATA 255,128,128
DATA 205,150,255
DATA 255,050,000
DATA 005,100,000
DATA 000,000,000
DATA 100,205,255
DATA 255,180,100
DATA 100,100,200
DATA 100,255,000
DATA 000,150,150
' ------------------------------------------------------------------------------
SUB InitVariableLabelRoue()
 ' Variables et labels pour la roue
    LABEL GestionRoue,LanceRoue,LanceRoueSuite
    DIM PictureInstructions%,Tanime,NbTic,AleaNbTic,ResultatTirage%,PictureRoue%
    DIM PictureImage%,Scene3dRoue%,TdPlane%,Scene2dRoue%,PictureRoue2d%
    DIM PictureImageRoue2d%,SpriteRoue2d%,InertieRoue%
    NbTic=1
' Autres variables (constantes) nécessaires pour le fontionnement la roue:   
    DIM BackColor_r%,BackColor_v%,BackColor_b%
  ' BackColor_r% : BackColor_v% : BackColor_b% Les 3 Couleurs derrière la roue
    DIM ResistanceRoue 
  ' ResistanceRoue: Plus le chiffre est éloigné de zéro plus la vitesse initiale de la roue sera grande
  ' Sens de Rotation: Si ResistanceRoue est négative (-0.5) => sens des aiguilles d'une montre : positive (0.5) => sens inverse des aiguilles d'une montre
    DIM StepNbPart% :' définition du nombre sections de la roue (Voir exemple ci-dessous)
  ' StepNbPart% : 20 => 18 Parts : 15 => 24 parts : 24 => 15 parts : 30 => 12 parts
  ' Attention le nombre de lignes de data doit correspondre au nombre de parts (ici 18 parts mais 24 prévues au maxi)
END_SUB
' ------------------------------------------------------------------------------
SUB InitRoue(TopRoue%,LeftRoue%,TitleRoue$,CenterOption%,inertie%,OptionBorderFormRoue$)
  ' Explications des paramètres de la SUB
  ' TopRoue%,LeftRoue%: position de la roue
  ' TitleRoue$ = CAPTION NumFormRoue%
  ' CenterOption%: 1 avec le centre OU 0 sans le centre
  ' inertie%: il s'agit de la vitesse de ralentissement de la roue (Minimum 1) Au moins 20 pour une bonne fluidité
  ' OptionBorderFormRoue$: "N" => Normal - "S" ou "" => Small - "H" => Hide
    ' (Si hide prévoir une sortie et HIDE NumFormRoue%)
    IF NumFormRoue%<>0
      COMMAND_TARGET_IS NumFormRoue%
    ELSE
      COMMAND_TARGET_IS 0
      if OptionBorderFormRoue$<>"N" then OptionBorderFormRoue$="S"
    END_IF
    IF ResistanceRoue=0 then ResistanceRoue=1
    DIM_LOCAL i%,Xroue,Yroue,r%,v%,b%
    IF OptionBorderFormRoue$="" then OptionBorderFormRoue$="S"
    IF inertie%<1 then inertie%=20
    InertieRoue%=inertie%
    DEGREES
 '  NumFormRoue%
    IF OptionBorderFormRoue$="N" THEN BORDER_NORMAL NumFormRoue%
    IF OptionBorderFormRoue$="S" THEN BORDER_SMALL NumFormRoue%
    IF OptionBorderFormRoue$="H" THEN BORDER_HIDE NumFormRoue%
    HEIGHT NumFormRoue%,540 + HEIGHT(NumFormRoue%)-HEIGHT_CLIENT(NumFormRoue%)
    WIDTH NumFormRoue%,500 + WIDTH(NumFormRoue%)-WIDTH_CLIENT(NumFormRoue%)
    TOP NumFormRoue%,TopRoue% : LEFT NumFormRoue%,LeftRoue%
    CAPTION NumFormRoue%,TitleRoue$
 '  PictureRoue%   
    No%=NumFormRoue%+1 : PictureRoue%=No%
    PICTURE No% : WIDTH No%,500 : HEIGHT No%,500
    No%=No%+1 : PictureImage%=No%
    IMAGE PictureImage%
    2D_TARGET_IS PictureRoue%
    COLOR PictureRoue%,BackColor_r%,BackColor_v%,BackColor_b%
    2D_PEN_COLOR 100,100,100
    2D_CIRCLE 250,250,210
    FOR i% = 0 to 360 STEP StepNbPart%
        Xroue = COS(i%)*210+250
        Yroue = SIN(i%)*210+250
        2D_LINE 250,250,Xroue,Yroue
    NEXT i%
    FOR i% = 12 to 354 STEP StepNbPart%
        Xroue = COS(i%)*190+250
        Yroue = SIN(i%)*190 +250
        READ r%
        READ v%
        READ b%
        2D_FLOOD Xroue,Yroue,r%,v%,b%
    NEXT i%
    Center(CenterOption%)
    2D_IMAGE_COPY PictureImage%,0,0,500,500
  ' Scene3dRoue% 
    No%=No%+1 : Scene3dRoue%=No%
    SCENE3D Scene3dRoue% : HEIGHT Scene3dRoue%,500 : WIDTH Scene3dRoue%,500
    COLOR Scene3dRoue%,BackColor_r%,BackColor_v%,BackColor_b%
  ' TdPlane% 
    No3d%=No3d%+1 : TdPlane%=No3d%
    CAM_MOVE -2.6
    3D_PLANE TdPlane%
    3D_V_TILE TdPlane%,1
    3D_U_TILE TdPlane%,1
    3D_IMAGE_TEXTURE No3d%,PictureImage%
    3D_X_ROTATE TdPlane%,1
  ' Scene2dRoue% 
    No%=No%+1 : Scene2dRoue%=No%
    SCENE2D Scene2dRoue% : HEIGHT Scene2dRoue%,40 : WIDTH Scene2dRoue%,31
    COLOR Scene2dRoue%,BackColor_r%,BackColor_v%,BackColor_b% : LEFT Scene2dRoue%,235
  ' PictureRoue2d%
    No%=No%+1 : PictureRoue2d%=No%
    PICTURE PictureRoue2d% : HEIGHT PictureRoue2d%,40 : WIDTH PictureRoue2d%,31
    COLOR PictureRoue2d%,BackColor_r%,BackColor_v%,BackColor_b%
    2D_TARGET_IS PictureRoue2d%
    2D_PEN_COLOR 50,50,50
    2D_POLY_FROM 0,0
    2D_POLY_TO 15,39
    2D_POLY_TO 30,0
    2D_POLY_TO 15,10
    2D_POLY_TO 0,0
    2D_FLOOD 15,20,150,150,150
  ' PictureImageRoue2d%   
    No%=No%+1 : PictureImageRoue2d%=No%
    IMAGE PictureImageRoue2d%
    2D_IMAGE_COPY PictureImageRoue2d%,0,0,31,40
  ' SpriteRoue2d% 
    NoSprite%=NoSprite%+1 : SpriteRoue2d%=NoSprite%
    SPRITE SpriteRoue2d%  : SPRITE_IMAGE_LOAD SpriteRoue2d%,PictureImageRoue2d%     
  ' Bandeau instruction
    No%=No%+1 : PictureInstructions%=No%
    PICTURE  No% : HEIGHT No%,40 : WIDTH No%,500 : TOP No%,500 : COLOR No%,200,200,200 
    2D_TARGET_IS No% : 2D_FILL_COLOR 200,200,200
    FONT_NAME No%,"Times New Roman" : FONT_SIZE No%,18 : FONT_ITALIC No%
    HIDE NumFormRoue%
    COMMAND_TARGET_IS 0
END_SUB
' ------------------------------------------------------------------------------
SUB ChangeInstructionsRoue(TexteRoue$)
    CLS : 2D_TARGET_IS PictureInstructions% : COLOR PictureInstructions%,200,200,200 : 2D_FILL_COLOR 200,200,200
    FONT_NAME PictureInstructions%,"Times New Roman" : FONT_SIZE PictureInstructions%,18 : FONT_ITALIC PictureInstructions%
    PRINT_TARGET_IS PictureInstructions% : PRINT_LOCATE 5,8 :  PRINT TexteRoue$
END_SUB
' ------------------------------------------------------------------------------
LanceRoue:
    ChangeInstructionsRoue("Patientez ...")
    OFF_MOUSE_DOWN Scene3dRoue%
    ON_MOUSE_UP Scene3dRoue%, LanceRoueSuite
    NbTic = NUMBER_TICKS
RETURN
' ------------------------------------------------------------------------------
LanceRoueSuite:
    OFF_MOUSE_UP Scene3dRoue%
    AleaNbTic = NUMBER_TICKS - NbTic + RND(360)
    IF AleaNbTic > 5000
        AleaNbTic = 4000 + RND(360) + RND(180)
    END_IF
    Animation()
    ON_MOUSE_DOWN Scene3dRoue%,LanceRoue
RETURN
' ------------------------------------------------------------------------------
SUB Animation()
    WHILE AleaNbTic > 5
        NbTic=AleaNbTic/100
        3D_Z_ROTATE TdPlane%,WRAP_VALUE((NbTic+Tanime)*ResistanceRoue)
        ChangeInstructionsRoue(string$(40," ")+str$(int(wrap_value(o3d_z_rotate(TdPlane%)+270)/StepNbPart%)+1))
'        caption NumFormRoue%,str$(int(wrap_value(o3d_z_rotate(TdPlane%)+270)/StepNbPart%)+1)
        Tanime=NbTic+Tanime
        DISPLAY
        PAUSE InertieRoue%
        AleaNbTic=AleaNbTic-NbTic
        NbTic = NbTic*.95
    END_WHILE
  ResultatTirage%=int(wrap_value(o3d_z_rotate(TdPlane%)+270)/StepNbPart%)+1
  gosub GestionRoue : return
END_SUB
' ------------------------------------------------------------------------------
SUB Center(La)
    IF La = 1
        2D_FILL_COLOR BackColor_r%,BackColor_v%,BackColor_b%
        FONT_COLOR PictureRoue%,255,255,255
        2D_PEN_COLOR 255,255,255
        2D_CIRCLE 250,250,40
        PRINT_TARGET_IS PictureRoue%
        FONT_NAME PictureRoue%,"Times New Roman"
        FONT_SIZE PictureRoue%,22
        PRINT_LOCATE 233,215
        PRINT "3D"
        FONT_SIZE PictureRoue%,12
        PRINT_LOCATE 218,245
        PRINT "Panoramic"
        PRINT_LOCATE 230,265
        PRINT "Wheel"
    END_IF
END_SUB


A+
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
silverman

avatar

Nombre de messages : 643
Age : 46
Localisation : Picardie
Date d'inscription : 18/03/2015

MessageSujet: Re: Roue pour jeu   Jeu 31 Mai 2018 - 22:33

C'est vraiment bien cheers
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jean Claude

avatar

Nombre de messages : 5472
Age : 64
Localisation : 83 Var
Date d'inscription : 07/05/2009

MessageSujet: Re: Roue pour jeu   Ven 1 Juin 2018 - 7:34

Merci Silverman Very Happy

Le plus gros du travail est celui de Marc car j'aurais été incapable de faire cette roue en 3D.
Je me suis contenté d'adapter son code pour pouvoir s'en servir dans un jeu.
Ce sera pour plus tard...

Donc merci à Marc Very Happy

@Papydall,
as-tu toujours le problème de délai de chargement Question
Et si oui, combien de temps faut-il Question

A+
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Contenu sponsorisé




MessageSujet: Re: Roue pour jeu   

Revenir en haut Aller en bas
 
Roue pour jeu
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» drôle de son pour une vapeur
» code pour inséré les anime (Fond transparent)
» Plugins Firefox pour sécuriser votre navigateur.
» Pb pour le choix de la voie
» hébergeur gratuit pour un site rein quand flash(RESOLUT)

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: Vos sources, vos utilitaires à partager-
Sauter vers: