Page 1 sur 1

Pure_Oeil_de_lynx (versions 1 & 2)!

Publié : mer. 23/avr./2008 7:06
par Huitbit
Hello,

Voilà un petit jeu(pour les gros jeux, il va falloir attendre que Noé soit d'accord :lol: :lol: ) pour développer la mémoire et l'observation !

Il y a 24 paires de cartes qu'il faut reconstituer.

C'est le genre de mini-jeux que l'on peut mettre dans un jeu pour obtenir des bonus(dans mon Pure_Vroom : du temps, du carburant...etc)
Il y aura une version avec des images (c'est plus facile !) car une combinaison de quatre couleurs c'est chaud (c'est fait exprès)

Ce n'est pas très commenté mais il n'y a rien de méchant !
Toute correction ou amélioration (aucune partie du programme n'est optimisée 8) ) est bienvenue :D

Image

Remarque :
J'ai mis

Code : Tout sélectionner

#nan 
dans les constantes car #non ne passait pas sur le forum!

Code : Tout sélectionner

;auteur Huitbit
; jeu de mémoire visuelle
;pb v4.10
;***************************************************
; déclaration des constantes et  des variables
; couleurs pour les cartes
#noir=$000000 
#blanc=$FFFFFF 
#gris=$C0C0C0 
#bleu2=$800000
#rouge2=$000080 
#r=$0000FF ; rouge 
#v=$00FF00 ; vert
#b=$FF0000 ; bleu
#j=$00FFFF ; jaune
;dimension caractéristique d'une carte
a.l=32
largeur_carte.l=2*a
hauteur_carte.l=3*a
r.f=a/8
largeur.f=largeur_carte
hauteur.f=hauteur_carte
decalage.f=0
demi_tour.b=0
retardateur.l=0
Enumeration
  ;de 0 à 23 numéros des #spr_cartes
  #spr_carte_vierge=24
  #spr_motif_dos_carte
  #spr_dos_carte
  #spr_chrono
  #spr_souris
  #oui
  #nan
  #nan_choisie
  #montrer
  #cacher
  #extraire
EndEnumeration
combinaison.s
Structure carte
  valeur.b ;  de 0 à 23 => 24 cartes
  combinaison.s; combinaison des lettres "rvbj"
  invisible.b
  retournee.b
  x.l
  y.l
EndStructure
mouse_i.f
mouse_j.f
carte_1.b=#nan_choisie
col_1.b
lig_1.b
carte_2.b=#nan_choisie
col_2.b
lig_2.b
compteur.b
Macro conversion_valeur_combinaison
Select i 
  Case 0 : combinaison ="rvbj"
  Case 1 : combinaison ="rvjb"
  Case 2 : combinaison ="rbvj"
  Case 3 : combinaison ="rbjv"
  Case 4 : combinaison ="rjvb"
  Case 5 : combinaison ="rjbv"
  Case 6 : combinaison ="vrbj"
  Case 7 : combinaison ="vrjb"
  Case 8 : combinaison ="vbrj"
  Case 9 : combinaison ="vbjr"
  Case 10 : combinaison ="vjrb"
  Case 11 : combinaison ="vjbr"
  Case 12 : combinaison ="brvj"
  Case 13 : combinaison ="brjv"
  Case 14 : combinaison ="bvrj"
  Case 15 : combinaison ="bvjr"
  Case 16 : combinaison ="bjrv"
  Case 17 : combinaison ="bjvr"
  Case 18 : combinaison ="jrvb"
  Case 19 : combinaison ="jrbv"
  Case 20 : combinaison ="jvrb"
  Case 21 : combinaison ="jvbr"
  Case 22 : combinaison ="jbrv"
  Case 23 : combinaison ="jbvr"
EndSelect
EndMacro

Macro couleur(k)
conversion_valeur_combinaison
c$=Mid(combinaison,k,1)
If c$="r" : couleur=#r
ElseIf c$="v" : couleur=#v
ElseIf c$="b" : couleur=#b
ElseIf c$="j" : couleur=#j
EndIf
EndMacro

Macro creation_carte
CreateSprite(i,largeur_carte,hauteur_carte,#PB_Sprite_Texture)
UseBuffer(i)
DisplaySprite(#spr_carte_vierge,0,0)
UseBuffer(-1)
StartDrawing(SpriteOutput(i))
couleur(1)
Box (r,r,a-r,1.5*a-r,couleur)
couleur(2)
Box (a,r,a-r,1.5*a-r,couleur)
couleur(3)
Box (r,1.5*a,a-r,1.5*a-r,couleur)
couleur(4)
Box (a,1.5*a,a-r,1.5*a-r,couleur)
StopDrawing()
EndMacro

Macro animation(col,lig,action)
Select action
  Case #montrer
    If demi_tour=0
      spr_carte=#spr_dos_carte
      largeur=largeur-4
      decalage=decalage+2
    EndIf
    If demi_tour=1
      spr_carte=carte(col,lig)\valeur
      largeur=largeur+4
      decalage=decalage-2
      If largeur>largeur_carte
        carte(col,lig)\retournee=#oui
        demi_tour=0
        largeur=largeur_carte
        decalage=0
      EndIf
    EndIf
    If largeur<0
      demi_tour=1
    EndIf
    Start3D()
    Sprite3DQuality(1)
    ZoomSprite3D(spr_carte,largeur,hauteur)
    DisplaySprite3D(spr_carte,carte(col,lig)\x+decalage,carte(col,lig)\y)
    Stop3D()
  Case #cacher
    retardateur=retardateur+1
    If retardateur>50
      If demi_tour=0
        spr_carte_1=carte(col_1,lig_1)\valeur
        spr_carte_2=carte(col_2,lig_2)\valeur
        largeur=largeur-4
        decalage=decalage+2
      EndIf
    Else
      spr_carte_1=carte(col_1,lig_1)\valeur
      spr_carte_2=carte(col_2,lig_2)\valeur
    EndIf
    If demi_tour=1
      spr_carte_1=#spr_dos_carte
      spr_carte_2=#spr_dos_carte
      largeur=largeur+4
      decalage=decalage-2
      If largeur>largeur_carte
        carte(col_1,lig_1)\retournee=#nan
        carte(col_2,lig_2)\retournee=#nan
        carte_1=#nan_choisie
        carte_2=#nan_choisie
        retardateur=0
        demi_tour=0
        largeur=largeur_carte
        decalage=0
      EndIf
    EndIf
    If largeur<0
      demi_tour=1
    EndIf
    Start3D()
    Sprite3DQuality(1)
    ZoomSprite3D(spr_carte_1,largeur,hauteur)
    ZoomSprite3D(spr_carte_2,largeur,hauteur)
    DisplaySprite3D(spr_carte_1,carte(col_1,lig_1)\x+decalage,carte(col_1,lig_1)\y)
    DisplaySprite3D(spr_carte_2,carte(col_2,lig_2)\x+decalage,carte(col_2,lig_2)\y)
    Stop3D()
  Case #extraire
    spr_carte_1=carte(col_1,lig_1)\valeur
    spr_carte_2=carte(col_2,lig_2)\valeur
    If  largeur<2*largeur_carte
      largeur=largeur+2
      hauteur=hauteur+3
      decalage=decalage-1
    Else
      carte(col_1,lig_1)\invisible=#oui
      carte(col_2,lig_2)\invisible=#oui
      compteur=compteur+1
      If compteur=24
        Debug "Félicitations !"
        Debug "Temps : "+Str(t*0.5)+" secondes"
        End
      EndIf 
      carte_1=#nan_choisie
      carte_2=#nan_choisie
      largeur=largeur_carte
      hauteur=hauteur_carte
      decalage=0
    EndIf
    Start3D()
    Sprite3DQuality(1)
    ZoomSprite3D(spr_carte_1,largeur,hauteur)
    ZoomSprite3D(spr_carte_2,largeur,hauteur)
    DisplaySprite3D(spr_carte_1,carte(col_1,lig_1)\x+decalage,carte(col_1,lig_1)\y)
    DisplaySprite3D(spr_carte_2,carte(col_2,lig_2)\x+decalage,carte(col_2,lig_2)\y)
    Stop3D()
EndSelect
EndMacro

Dim carte.carte(11,3)

For i=0 To 23
  Repeat
    col_1=Random(11)
    lig_1=Random(3)
  Until carte(col_1,lig_1)\combinaison="" 
  carte(col_1,lig_1)\valeur=i
  conversion_valeur_combinaison
  carte(col_1,lig_1)\combinaison=combinaison
  Repeat
    col_2=Random(11)
    lig_2=Random(3)
  Until  carte(col_2,lig_2)\combinaison=""
  carte(col_2,lig_2)\valeur=i
  conversion_valeur_combinaison
  carte(col_2,lig_2)\combinaison=combinaison
Next i

InitSprite()
InitSprite3D()
InitMouse()
InitKeyboard()
OpenWindow(0,0,0,1024,600,"Pure_Oeil_de_lynx | [Echap] pour quitter",#PB_Window_ScreenCentered )
OpenWindowedScreen(WindowID(0),0,0,1024,600,1,0,0)

CreateSprite(#spr_carte_vierge,largeur_carte,hauteur_carte)
StartDrawing(SpriteOutput(#spr_carte_vierge))
Box(0,0,largeur_carte,hauteur_carte,#gris)
Box(0,0,r,r,#noir)
Circle(r,r,r,#gris)
Box(largeur_carte-r,0,r,r,#noir)
Circle(largeur_carte-r,r,r,#gris)
Box(largeur_carte-r,hauteur_carte-r,r,r,#noir)
Circle(largeur_carte-r,hauteur_carte-r,r,#gris)
Box(0,hauteur_carte-r,r,r,#noir)
Circle(r,hauteur_carte-r,r,#gris)
StopDrawing()

CreateSprite(#spr_motif_dos_carte,largeur_carte-2*r,hauteur_carte-2*r)
StartDrawing(SpriteOutput(#spr_motif_dos_carte))
Box(0,0,largeur_carte-2*r,hauteur_carte-2*r,#bleu2)
DrawingMode(#PB_2DDrawing_Outlined)
For i =2 To 4*a Step 3
  Circle(a-r,(hauteur_carte-2*r)*0.5,i,#b)
Next i
StopDrawing()

CreateSprite(#spr_dos_carte,largeur_carte,hauteur_carte,#PB_Sprite_Texture)
UseBuffer(#spr_dos_carte)
DisplaySprite(#spr_carte_vierge,0,0)
DisplaySprite(#spr_motif_dos_carte,r,r)
UseBuffer(-1)
;création des sprites des cartes
For i=0 To 23
  creation_carte
  CreateSprite3D(i,i)
Next i
CreateSprite3D(#spr_dos_carte,#spr_dos_carte)
;calcul des coordonnées des cartes
For i=0 To 11
  For j=0 To 3
    carte(i,j)\x=20+(largeur_carte+20)*i
    carte(i,j)\y=20+(hauteur_carte+20)*j
    carte(i,j)\invisible=#nan
    carte(i,j)\retournee=#nan
    
  Next j
Next i
CreateSprite(#spr_chrono,990,hauteur_carte)
StartDrawing(SpriteOutput(#spr_chrono))
Box(0,0,990,hauteur_carte,#rouge2)
DrawingMode(#PB_2DDrawing_Outlined)
For i=0 To 990 Step 4
  Line(i,0,0,hauteur_carte,#r)
Next i
StopDrawing()

CreateSprite(#spr_souris,24,24)
StartDrawing(SpriteOutput(#spr_souris))
LineXY(0,0,12,24,#r)
LineXY(0,0,24,12,#r)
DrawingMode(#PB_2DDrawing_Outlined   )
Circle(24,24,12,#r)
FillArea(12,12,#r,#blanc)
StopDrawing()

;BOUCLE PRINCIPALE
Repeat
  
  Repeat
    Event = WindowEvent()      
    If  Event = #PB_Event_CloseWindow
      End 
    EndIf
  Until Event = 0
  
  ClearScreen(#noir)
  ExamineMouse()
  mouse_i=(MouseX()-20)/(largeur_carte+20)
  mouse_j=(MouseY()-20)/(hauteur_carte+20)
  If Int(mouse_i)<12 And Int(mouse_j)<4
    If (mouse_i-Int(mouse_i)<largeur_carte/(largeur_carte+20) And mouse_i-Int(mouse_i)>0) And (mouse_j-Int(mouse_j)<hauteur_carte/(hauteur_carte+20) And mouse_j-Int(mouse_j)>0)
      If MouseButton(#PB_MouseButton_Left ) And carte(Int(mouse_i),Int(mouse_j))\retournee=#nan And carte(Int(mouse_i),Int(mouse_j))\invisible=#nan 
        If ElapsedMilliseconds()-date_click>200
          date_click=ElapsedMilliseconds()
          If carte_1=#nan_choisie 
            col_1=Int(mouse_i)
            lig_1=Int(mouse_j)
            carte_1=carte(col_1,lig_1)\valeur
            carte(col_1,lig_1)\retournee=#montrer
          ElseIf carte_1<>#nan_choisie And carte(col_1,lig_1)\retournee=#oui And carte_2=#nan_choisie
            col_2=Int(mouse_i)
            lig_2=Int(mouse_j)
            carte_2=carte(col_2,lig_2)\valeur
            carte(col_2,lig_2)\retournee=#montrer
          EndIf
        EndIf 
      EndIf
    EndIf
  EndIf
  
  If carte(col_1,lig_1)\retournee=#montrer
    animation(col_1,lig_1,#montrer)
  EndIf
  If carte(col_2,lig_2)\retournee=#montrer
    animation(col_2,lig_2,#montrer)
  EndIf
  
  If  carte_2<>#nan_choisie And carte_1=carte_2  And carte(col_2,lig_2)\retournee=#oui
    carte(col_1,lig_1)\invisible=#extraire
    carte(col_2,lig_2)\invisible=#extraire
  ElseIf carte_2<>#nan_choisie And carte_1<>carte_2   And carte(col_2,lig_2)\retournee=#oui
    carte(col_1,lig_1)\retournee=#cacher 
    carte(col_2,lig_2)\retournee=#cacher
  EndIf
  
  If carte(col_2,lig_2)\retournee=#cacher 
    animation(col_2,lig_2,#cacher)
  EndIf
  
  For i=0 To 11
    For j=0 To 3
      If carte(i,j)\invisible=#nan
        If carte(i,j)\retournee=#oui
          DisplayTransparentSprite(carte(i,j)\valeur,carte(i,j)\x,carte(i,j)\y)
        ElseIf carte(i,j)\retournee=#nan 
          DisplayTransparentSprite(#spr_dos_carte,20+(largeur_carte+20)*i,20+(hauteur_carte+20)*j)
        EndIf
;>>>>Si vous voulez tricher !!!        
;         StartDrawing(ScreenOutput())
;         DrawText(carte(i,j)\x,carte(i,j)\y,carte(i,j)\combinaison+"  "+Str(carte(i,j)\valeur))
;         StopDrawing()
      EndIf
    Next j
  Next i
  
  If carte(col_2,lig_2)\invisible=#extraire
    animation(col_2,lig_2,#extraire)
  EndIf
  
  If ElapsedMilliseconds()-chrono>500
    chrono=ElapsedMilliseconds()
    t=t+1
    ClipSprite(#spr_chrono,0,0,990-t,hauteur_carte)
    If t=990
      Debug "Temps écoulé !"
      Debug "Nombre de paires trouvées : "+Str(compteur)
      End
    EndIf
  EndIf
  
  DisplaySprite(#spr_chrono,20,484)
  
  DisplayTransparentSprite(#spr_souris,MouseX(),MouseY())
  
  FlipBuffers() 
  
  ExamineKeyboard()
  If KeyboardPushed(#PB_Key_Escape)   ; Appuyez sur la touche [Echap] pour quitter
    End
  EndIf
  Delay(1)
ForEver

Hasta la vista !

Re: Pure_Oeil_de_lynx !

Publié : mer. 23/avr./2008 8:03
par djmcg
Huitbit a écrit :...

Ce n'est pas très commenté mais il n'y a rien de méchant ! ...
Dommage, je suis débutant en PureBasic et j'essaie de profiter de l'expérience de chacun. Vous ete en fait mon école. Les débutants aussi sont parfois intéressant.

J'essaye de commenté au fur et à mesure et comme cela, le jour ou je poste je doit pas le faire.. ça aide aussi a la réflexion.
Merci d'y pensé même si ce n'est pas facile.

Bonne journée.

:oops: :oops: :oops: :oops: :oops: :oops:

Publié : mer. 23/avr./2008 10:45
par Neosis
pas mal ^^ mais c'est chaud j'ai trouvé un peu moins de la moitié des paires :)
faudrait ajouter des niveau de difficulté différent avec plus ou moins carte...

Publié : mer. 23/avr./2008 11:03
par Huitbit
@djmcg
Les débutants aussi sont parfois intéressants.
C'est dans la section débutants que je poste d'habitude :P !
En fait cette version était un premier brouillon !
Je mettrai une version avec des images (à la place des quatre couleurs) avec les commentaires très bientôt :wink: !
@Neosis
j'ai trouvé un peu moins de la moitié des paires
C'est déjà pas mal :lol: :lol: :lol:
Avec des images, ça devrait aller plus vite!

Hasta la vista!

Publié : mer. 23/avr./2008 12:35
par SPH
C'est bien fichu mais j'en reviens pas comme c'est dur avec des couleurs par rapport à des images :twisted:

Publié : mer. 23/avr./2008 15:32
par Neosis
SPH a écrit :C'est bien fichu mais j'en reviens pas comme c'est dur avec des couleurs par rapport à des images :twisted:
oui je me disait la même choses :D ... le truc c qu'il ne faut pas ce cassé la tête a retenir les 4 couleur de chaque carte, il faut seulement retenir les 3 première couleur de chaque carte mais bon même comme ça c assez difficile :D ... si yen a qui y arrive a ce débarrassez de toutes les carte ça voudrait dire qu'il a un processeur à la place du cerveau :roll:

Petite parenthèse : L'homme utilise en moyenne entre 6 à 7% de la capacité de son cerveau, Einstein pouvait utilisé 9% de son cerveau.

Publié : mer. 23/avr./2008 15:39
par SPH
Neosis a écrit :Petite parenthèse : L'homme utilise en moyenne entre 6 à 7% de la capacité de son cerveau, Einstein pouvait utilisé 9% de son cerveau.
Est-ce raisonnablement quantifiable...........

Publié : mer. 23/avr./2008 16:28
par djmcg
Merci a vous de toutes façon pour l'aide que j'ai déjà reçu.

Je voudrais aussi dire merci parce-que certain d'entre vous ons un haut niveau en programmation et VOUS ACCEPTER DE REPONDRE A DES HOBYISTE QUI PARFOIS SONT LENT A COMPRENDRE COMME MOI.
:oops: :lol:
Et ce n'est pas sur tous les forum que ça arrive.


Merci a vous.

Publié : mer. 23/avr./2008 23:09
par comtois
Et voila , fini !
Félicitations !
Temps : 430 secondes
avec des images ça sera plus simple :)

Publié : jeu. 24/avr./2008 0:28
par Huitbit
Image

Grillé Comtois !
C'était un détecteur d'aliens !
Seul un extraterrestre pouvait y arriver :lol: :lol:

La version humaine(avec des images) arrive bientôt !

Hasta la vista

Publié : jeu. 24/avr./2008 6:58
par Jacobus
Neosis a écrit : Petite parenthèse : L'homme utilise en moyenne entre 6 à 7% de la capacité de son cerveau, Einstein pouvait utilisé 9% de son cerveau.
Idée pré-conçue et fausse, si c'était le cas tu ne mettrais même pas un pied devant l'autre... L'inutile n'existe pas dans le corps humain.

Publié : jeu. 24/avr./2008 7:39
par djmcg
Jacobus a écrit :... L'inutile n'existe pas dans le corps humain.
J'aime bien cette idée. :wink:

Ben voilà !

Publié : jeu. 24/avr./2008 8:08
par Huitbit
J'ai un peu commenté :oops: :oops:
Je complèterai les commentaires demain (la création de la planche m'a épuisé!!!!!)!
J'ai modifié le temps de jeu :wink:
Pour info, j'écoute Bach et Vivaldi

Image à mettre dans le même dossier que le programme
Image

Code : Tout sélectionner

;auteur Huitbit
; jeu de mémoire visuelle
;pb v4.10
;***************************************************
; déclaration des constantes et  des variables
; couleurs pour les cartes (format BGR )
#noir=$000000 
#blanc=$FFFFFF 
#gris=$C0C0C0 
#bleu2=$800000
#rouge2=$000080 
#r=$0000FF ; rouge 
#v=$00FF00 ; vert
#b=$FF0000 ; bleu
#j=$00FFFF ; jaune
;dimensions caractéristiques d'une carte
a.l=32
largeur_carte.l=2*a
hauteur_carte.l=3*a
r.f=a/8
;variables utilisées pour l'animation
largeur.f=largeur_carte
hauteur.f=hauteur_carte
decalage.f=0
demi_tour.b=0
retardateur.l=0
Enumeration
  ;de 0 à 23 numéros des #spr_cartes
  #spr_carte_vierge=24 ;début de l'énumération à 24
  #spr_compositeurs
  #spr_motif_dos_carte
  #spr_dos_carte
  #spr_chrono
  #spr_souris
  #oui
  #nan
  #nan_choisie
  #montrer
  #cacher
  #extraire
EndEnumeration
compositeur.s
Structure carte
  valeur.b ;  de 0 à 23 => 24 cartes
  compositeur.s
  invisible.b
  retournee.b
  x.l
  y.l
EndStructure
mouse_i.f;position colonne du pointeur
mouse_j.f; position ligne du pointeur
carte_1.b=#nan_choisie
col_1.b
lig_1.b
carte_2.b=#nan_choisie
col_2.b
lig_2.b
compteur.b
Macro conversion_valeur_compositeur
Select i 
  Case 0 : compositeur ="Beethoven"
  Case 1 : compositeur ="Chopin"
  Case 2 : compositeur ="Vivaldi"
  Case 3 : compositeur ="Bach"
  Case 4 : compositeur ="Schubert"
  Case 5 : compositeur ="Wagner"
  Case 6 : compositeur ="Ravel"
  Case 7 : compositeur ="Haydn"
  Case 8 : compositeur ="Lulli"
  Case 9 : compositeur ="Tchaïkovsky"
  Case 10 : compositeur ="Haendel"
  Case 11 : compositeur ="Bizet"
  Case 12 : compositeur ="Mendelssohn"
  Case 13 : compositeur ="Offenbach"
  Case 14 : compositeur ="Debussy"
  Case 15 : compositeur ="Schumman"
  Case 16 : compositeur ="Saint Saens"
  Case 17 : compositeur ="Prokofiev"
  Case 18 : compositeur ="Berlioz"
  Case 19 : compositeur ="Brahms"
  Case 20 : compositeur ="Verdi"
  Case 21 : compositeur ="Rossini"
  Case 22 : compositeur ="Le Chevalier de Saint Georges"
  Case 23 : compositeur ="Mozart"
EndSelect

EndMacro

Macro creation_carte
CreateSprite(i,largeur_carte,hauteur_carte,#PB_Sprite_Texture)
UseBuffer(i); permet d'afficher des sprites dans le sprite
DisplaySprite(#spr_carte_vierge,0,0)
ClipSprite(#spr_compositeurs,(i%12)*(largeur_carte-2*r),(i/12)*(hauteur_carte-2*r),largeur_carte-2*r,hauteur_carte-2*r);la ligne et la colonne sont calculées à partir de i
DisplaySprite(#spr_compositeurs,r,r)
UseBuffer(-1)
EndMacro

Macro animation(col,lig,action)
Select action
  Case #montrer
    If demi_tour=0
      spr_carte=#spr_dos_carte
      largeur=largeur-4
      decalage=decalage+2
    EndIf
    If demi_tour=1
      spr_carte=carte(col,lig)\valeur
      largeur=largeur+4
      decalage=decalage-2
      If largeur>largeur_carte
        carte(col,lig)\retournee=#oui
        demi_tour=0
        largeur=largeur_carte
        decalage=0
      EndIf
    EndIf
    If largeur<0
      demi_tour=1
    EndIf
    Start3D()
    Sprite3DQuality(1)
    ZoomSprite3D(spr_carte,largeur,hauteur)
    DisplaySprite3D(spr_carte,carte(col,lig)\x+decalage,carte(col,lig)\y)
    Stop3D()
  Case #cacher
    retardateur=retardateur+1;pour éviter que les cartes se retournent trop rapidement
    If retardateur>50
      If demi_tour=0
        spr_carte_1=carte(col_1,lig_1)\valeur
        spr_carte_2=carte(col_2,lig_2)\valeur
        largeur=largeur-4
        decalage=decalage+2
      EndIf
    Else
      spr_carte_1=carte(col_1,lig_1)\valeur
      spr_carte_2=carte(col_2,lig_2)\valeur
    EndIf
    If demi_tour=1
      spr_carte_1=#spr_dos_carte
      spr_carte_2=#spr_dos_carte
      largeur=largeur+4
      decalage=decalage-2
      If largeur>largeur_carte
        carte(col_1,lig_1)\retournee=#nan
        carte(col_2,lig_2)\retournee=#nan
        carte_1=#nan_choisie
        carte_2=#nan_choisie
        retardateur=0
        demi_tour=0
        largeur=largeur_carte
        decalage=0
      EndIf
    EndIf
    If largeur<0
      demi_tour=1
    EndIf
    Start3D()
    Sprite3DQuality(1)
    ZoomSprite3D(spr_carte_1,largeur,hauteur)
    ZoomSprite3D(spr_carte_2,largeur,hauteur)
    DisplaySprite3D(spr_carte_1,carte(col_1,lig_1)\x+decalage,carte(col_1,lig_1)\y)
    DisplaySprite3D(spr_carte_2,carte(col_2,lig_2)\x+decalage,carte(col_2,lig_2)\y)
    Stop3D()
  Case #extraire
    spr_carte_1=carte(col_1,lig_1)\valeur
    spr_carte_2=carte(col_2,lig_2)\valeur
    If  largeur<2*largeur_carte
      largeur=largeur+2
      hauteur=hauteur+3
      decalage=decalage-1
    Else
      carte(col_1,lig_1)\invisible=#oui
      carte(col_2,lig_2)\invisible=#oui
      compteur=compteur+1
      If compteur=24
        Debug "Félicitations !"
        Debug "Temps : "+Str(t*0.2)+" secondes"
        End
      EndIf 
      carte_1=#nan_choisie
      carte_2=#nan_choisie
      largeur=largeur_carte
      hauteur=hauteur_carte
      decalage=0
    EndIf
    Start3D()
    Sprite3DQuality(1)
    ZoomSprite3D(spr_carte_1,largeur,hauteur)
    ZoomSprite3D(spr_carte_2,largeur,hauteur)
    DisplaySprite3D(spr_carte_1,carte(col_1,lig_1)\x+decalage,carte(col_1,lig_1)\y)
    DisplaySprite3D(spr_carte_2,carte(col_2,lig_2)\x+decalage,carte(col_2,lig_2)\y)
    Stop3D()
EndSelect
EndMacro

Dim carte.carte(11,3)

For i=0 To 23
  Repeat
    col_1=Random(11)
    lig_1=Random(3)
  Until carte(col_1,lig_1)\compositeur="" 
  carte(col_1,lig_1)\valeur=i
  conversion_valeur_compositeur
  carte(col_1,lig_1)\compositeur=compositeur
  Repeat
    col_2=Random(11)
    lig_2=Random(3)
  Until  carte(col_2,lig_2)\compositeur=""
  carte(col_2,lig_2)\valeur=i
  conversion_valeur_compositeur
  carte(col_2,lig_2)\compositeur=compositeur
Next i
;-PROGRAMME PRINCIPAL
InitSprite()
InitSprite3D()
InitMouse()
InitKeyboard()
OpenWindow(0,0,0,1024,600,"Pure_Oeil_de_lynx_2 | [Echap] pour quitter",#PB_Window_ScreenCentered )
OpenWindowedScreen(WindowID(0),0,0,1024,600,1,0,0)
UsePNGImageDecoder()
LoadSprite(#spr_compositeurs,"compositeurs.png",#PB_Sprite_Texture      )

CreateSprite(#spr_carte_vierge,largeur_carte,hauteur_carte)
StartDrawing(SpriteOutput(#spr_carte_vierge))
Box(0,0,largeur_carte,hauteur_carte,#gris)
Box(0,0,r,r,#noir)
Circle(r,r,r,#gris)
Box(largeur_carte-r,0,r,r,#noir)
Circle(largeur_carte-r,r,r,#gris)
Box(largeur_carte-r,hauteur_carte-r,r,r,#noir)
Circle(largeur_carte-r,hauteur_carte-r,r,#gris)
Box(0,hauteur_carte-r,r,r,#noir)
Circle(r,hauteur_carte-r,r,#gris)
StopDrawing()

CreateSprite(#spr_motif_dos_carte,largeur_carte-2*r,hauteur_carte-2*r)
StartDrawing(SpriteOutput(#spr_motif_dos_carte))
Box(0,0,largeur_carte-2*r,hauteur_carte-2*r,#bleu2)
DrawingMode(#PB_2DDrawing_Outlined)
For i =2 To 4*a Step 3
  Circle(a-r,(hauteur_carte-2*r)*0.5,i,#b)
Next i
StopDrawing()

CreateSprite(#spr_dos_carte,largeur_carte,hauteur_carte,#PB_Sprite_Texture)
UseBuffer(#spr_dos_carte)
DisplaySprite(#spr_carte_vierge,0,0)
DisplaySprite(#spr_motif_dos_carte,r,r)
UseBuffer(-1)
;création des sprites des cartes
For i=0 To 23
  creation_carte
  CreateSprite3D(i,i)
Next i
CreateSprite3D(#spr_dos_carte,#spr_dos_carte)
;calcul des coordonnées des cartes et initialisation des structures invisible et retournée
For i=0 To 11
  For j=0 To 3
    carte(i,j)\x=20+(largeur_carte+20)*i
    carte(i,j)\y=20+(hauteur_carte+20)*j
    carte(i,j)\invisible=#nan
    carte(i,j)\retournee=#nan
  Next j
Next i

;dessin de la barre de chrono
CreateSprite(#spr_chrono,990,hauteur_carte)
StartDrawing(SpriteOutput(#spr_chrono))
Box(0,0,990,hauteur_carte,#rouge2)
DrawingMode(#PB_2DDrawing_Outlined)
For i=0 To 990 Step 4
  Line(i,0,0,hauteur_carte,#r)
Next i
StopDrawing()

CreateSprite(#spr_souris,24,24)
StartDrawing(SpriteOutput(#spr_souris))
LineXY(0,0,12,24,#r)
LineXY(0,0,24,12,#r)
DrawingMode(#PB_2DDrawing_Outlined   )
Circle(24,24,12,#r)
FillArea(12,12,#r,#blanc)
StopDrawing()

;-BOUCLE PRINCIPALE
Repeat
  
  Repeat
    Event = WindowEvent()      
    If  Event = #PB_Event_CloseWindow
      End 
    EndIf
  Until Event = 0
  
  ClearScreen(#noir)
  ExamineMouse()
  mouse_i=(MouseX()-20)/(largeur_carte+20);recherche de la carte survolée
  mouse_j=(MouseY()-20)/(hauteur_carte+20)
  If Int(mouse_i)<12 And Int(mouse_j)<4
    If (mouse_i-Int(mouse_i)<largeur_carte/(largeur_carte+20) And mouse_i-Int(mouse_i)>0) And (mouse_j-Int(mouse_j)<hauteur_carte/(hauteur_carte+20) And mouse_j-Int(mouse_j)>0)
      If MouseButton(#PB_MouseButton_Left ) And carte(Int(mouse_i),Int(mouse_j))\retournee=#nan And carte(Int(mouse_i),Int(mouse_j))\invisible=#nan 
        If ElapsedMilliseconds()-date_click>200
          date_click=ElapsedMilliseconds()
          If carte_1=#nan_choisie 
            col_1=Int(mouse_i)
            lig_1=Int(mouse_j)
            carte_1=carte(col_1,lig_1)\valeur
            carte(col_1,lig_1)\retournee=#montrer
          ElseIf carte_1<>#nan_choisie And carte(col_1,lig_1)\retournee=#oui And carte_2=#nan_choisie
            col_2=Int(mouse_i)
            lig_2=Int(mouse_j)
            carte_2=carte(col_2,lig_2)\valeur
            carte(col_2,lig_2)\retournee=#montrer
          EndIf
        EndIf 
      EndIf
    EndIf
  EndIf
  
  If carte(col_1,lig_1)\retournee=#montrer
    animation(col_1,lig_1,#montrer)
  EndIf
  If carte(col_2,lig_2)\retournee=#montrer
    animation(col_2,lig_2,#montrer)
  EndIf
  
  If  carte_2<>#nan_choisie And carte_1=carte_2  And carte(col_2,lig_2)\retournee=#oui
    carte(col_1,lig_1)\invisible=#extraire
    carte(col_2,lig_2)\invisible=#extraire
  ElseIf carte_2<>#nan_choisie And carte_1<>carte_2   And carte(col_2,lig_2)\retournee=#oui
    carte(col_1,lig_1)\retournee=#cacher 
    carte(col_2,lig_2)\retournee=#cacher
  EndIf
  
  If carte(col_2,lig_2)\retournee=#cacher 
    animation(col_2,lig_2,#cacher)
  EndIf
  
  For i=0 To 11
    For j=0 To 3
      If carte(i,j)\invisible=#nan
        If carte(i,j)\retournee=#oui
          DisplayTransparentSprite(carte(i,j)\valeur,carte(i,j)\x,carte(i,j)\y)
        ElseIf carte(i,j)\retournee=#nan 
          DisplayTransparentSprite(#spr_dos_carte,20+(largeur_carte+20)*i,20+(hauteur_carte+20)*j)
        EndIf
        ;>>>>Si vous voulez tricher !!!        
        ;                 StartDrawing(ScreenOutput())
        ;                 DrawText(carte(i,j)\x,carte(i,j)\y,carte(i,j)\compositeur+"  "+Str(carte(i,j)\valeur))
        ;                 StopDrawing()
      EndIf
    Next j
  Next i
  
  If carte(col_2,lig_2)\invisible=#extraire
    animation(col_2,lig_2,#extraire)
    StartDrawing(ScreenOutput())
    DrawText(0,0,carte(col_2,lig_2)\compositeur)
    StopDrawing()
  EndIf
  
  If ElapsedMilliseconds()-chrono>200
    chrono=ElapsedMilliseconds()
    t=t+1
    ClipSprite(#spr_chrono,0,0,990-t,hauteur_carte)
    If t=990
      Debug "Temps écoulé !"
      Debug "Nombre de paires trouvées : "+Str(compteur)
      End
    EndIf
  EndIf
  
  DisplaySprite(#spr_chrono,20,484)
  
  DisplayTransparentSprite(#spr_souris,MouseX(),MouseY())
  
  FlipBuffers() 
  
  ExamineKeyboard()
  If KeyboardPushed(#PB_Key_Escape)   ; Appuyez sur la touche [Echap] pour quitter
    End
  EndIf
  Delay(1)
ForEver
Hasta la vista !

Publié : jeu. 24/avr./2008 12:00
par djmcg
Bonjour,

Je ne suis pas directement interressé par les jeux.
MAIS, je suis interressé par les couleur et l'esthétique de certains écrans que je vois.

Dois-je ouvrir en mode screen pour optenir....
Quand je vois les image de Huitbit extraordinaire, j'ai vu une petite animation sur LDV c'est aussi extraordinaire.

Le programme que j'élabore pour l'instant est un programme de gestion de stock, recettes,.... une petite boulangerie amateur.
J'utilise donc des fenêtre avec les objets nécessaires.

Si vous avez des tuyauts pour que je fasse des fonds d'écrans, couleur.... aussi bien que ce que je vois sur le site.
Encore merci.

Publié : jeu. 24/avr./2008 12:54
par Huitbit
@djmcg

Si tu as des questions sur certaines parties du code, n'hésite pas !

Personnellement, Je suis au raz des paquerettes niveau graphismes (peu de couleurs, figures géométriques basiques...)!
Pour toutes mes applications, je fais des croquis sur papier (idem pour le squelette du code s'il y a des parties délicates).
Bref je ne refléchis jamais devant l'ordinateur !
Je travaille rarement avec les gadgets (ça me ferait gagner du temps mais c'est comme ça :lol: ).

Hasta la vista !