Pure_Oeil_de_lynx (versions 1 & 2)!
Publié : mer. 23/avr./2008 7:06
Hello,
Voilà un petit jeu(pour les gros jeux, il va falloir attendre que Noé soit d'accord
) 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
) est bienvenue

Remarque :
J'ai misdans les constantes car #non ne passait pas sur le forum!
Hasta la vista !
Voilà un petit jeu(pour les gros jeux, il va falloir attendre que Noé soit d'accord


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


Remarque :
J'ai mis
Code : Tout sélectionner
#nan
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