Page 1 sur 1

Comment faire un jeu de memory

Publié : dim. 04/juin/2017 15:52
par Micoute
Bonjour à tous,
j'aimerais créer pour mes petits-enfants, un jeu de memory, mais je ne connais pas le principe.
Je pense qu'il faille que je construire un tableau pour créer les paires d'images, mais je ne sais pas comment m'y prendre, car je voudrais que le jeu soit différent à chaque partie.
Je compte afficher les images sur autant de canvas que nécessaire pour pouvoir les cacher qu'on trouve une paire.

je suis parti sur ça:

Code : Tout sélectionner

#Nb_de_canvas = 19

Enumeration Fenetre
  #Fenetre_principale
EndEnumeration

Enumeration Gadgets
  #Canvas_0
EndEnumeration

Enumeration Police
  #Police
EndEnumeration

Enumeration Images
  #Dos
  #Carte01
  #Carte02
  #Carte03
  #Carte04
  #Carte05
  #Carte06
  #Carte07
  #Carte08
  #Carte09
  #Carte10
EndEnumeration  

Global.i X, Y, i, Quitter, Evenement, Couleur
Global.i LigBtns = 5, ColBtns = 4, HtBtn = 226, LgBtn = 300
Global.i Nb_par_Colonne = HtBtn * ColBtns, Lfen = LgBtn * LigBtns
Global NomPolice.s = "Arabic Transparent", TaillePolice = 25 

Procedure Ouvrir_Fenetre_principale()
  
  If OpenWindow(#Fenetre_principale, 10, 10, Lfen + 20, Nb_par_Colonne + 20, 
                "Memory © Micoute 04/06/2017", 
                #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
    SetWindowColor(#Fenetre_principale, $DECFF2)
    
    CatchImage(#Dos, ?Dos, ?Animaux01 - ?Dos)
    ResizeImage(#Dos, 300, 226)
    
    CatchImage(#Carte01, ?Animaux01, ?animaux02 - ?Animaux01)
    ResizeImage(#Carte01, 300, 226)
    
    LoadFont(#Police, NomPolice, TaillePolice, #PB_Font_Bold)
    SetGadgetFont(#PB_Default, FontID(#Police)) ;Affecter la Police à tous les gadgets
    
    ;Créons nos canvas
    For i = 0 To #Nb_de_canvas
      Y = Mod(i * HtBtn, Nb_par_Colonne) ;Position de la ligne du bouton i
      X = (i * HtBtn) / (Nb_par_Colonne) ;Position de la colonne du bouton i
      CanvasGadget(#Canvas_0 + i,  10 + x * LgBtn, 10 + y, LgBtn, HtBtn, #PB_Canvas_Image|#PB_Canvas_Border)      
    Next
    
    For i = 0 To #Nb_de_canvas
      StartDrawing(CanvasOutput(#Canvas_0 + i))
      DrawImage(ImageID(#Dos), 0, 0)
      StopDrawing()
    Next i  
    
    
  EndIf
EndProcedure


Ouvrir_Fenetre_principale()

;{- Boucle d'évènements
Quitter.i = #False

Repeat
  
  Event       = WaitWindowEvent()
  EventGadget = EventGadget()
  EventType   = EventType()
  
  Select event 
      
    Case #PB_Event_Gadget
      
      chaine$ = Str(EventGadget - #Canvas_0)
      
      If StartDrawing(CanvasOutput(EventGadget))
        
        ;GestionCanvas(EventGadget , chaine$, EventType)
        DrawImage(ImageID(#Carte01), 0, 0)
        StopDrawing()
        
      EndIf
      
    Case #PB_Event_CloseWindow
      Select EventWindow()
        Case #Fenetre_principale
          CloseWindow(#Fenetre_principale)
          Quitter = #True
      EndSelect
      
  EndSelect
  
Until Quitter = #True
End
;}

DataSection
  Dos:
  IncludeBinary "D:\Programmation\Prg Perso\P\PROJETS\Memory\Memory\celluledebase.bmp"
  Animaux01:
  IncludeBinary "D:\Programmation\Prg Perso\P\PROJETS\Memory\Memory\Animaux01.bmp"
  Animaux02:
  IncludeBinary "D:\Programmation\Prg Perso\P\PROJETS\Memory\Memory\Animaux02.bmp"
  Animaux03:
  IncludeBinary "D:\Programmation\Prg Perso\P\PROJETS\Memory\Memory\Animaux03.bmp"
  Animaux04:
  IncludeBinary "D:\Programmation\Prg Perso\P\PROJETS\Memory\Memory\Animaux04.bmp"
  Animaux05:
  IncludeBinary "D:\Programmation\Prg Perso\P\PROJETS\Memory\Memory\Animaux05.bmp"
  Animaux06:
  IncludeBinary "D:\Programmation\Prg Perso\P\PROJETS\Memory\Memory\Animaux06.bmp"
  Animaux07:
  IncludeBinary "D:\Programmation\Prg Perso\P\PROJETS\Memory\Memory\Animaux07.bmp"
  Animaux08:
  IncludeBinary "D:\Programmation\Prg Perso\P\PROJETS\Memory\Memory\Animaux08.bmp"
  Animaux09:
  IncludeBinary "D:\Programmation\Prg Perso\P\PROJETS\Memory\Memory\Animaux09.bmp"
  Animaux10:
  IncludeBinary "D:\Programmation\Prg Perso\P\PROJETS\Memory\Memory\Animaux10.bmp"
EndDataSection  

Re: Comment faire un jeu de memory

Publié : dim. 04/juin/2017 17:10
par Ar-S
Salut Micoute.

Je serai toi je ferai une liste de 20 éléments (ton jeu) et une structure carte avec les elements :
Numéro (de 1 à 19)
ID (de #Carte01 à #Carte10)
Etat (pour savoir si une carte est visible ou non ou si les doublons sont trouvés).

Il te faudra aussi un Timer pour n'afficher les cartes que quelques secondes puis les retourner en cas d'erreur.

Dans l'exemple qui suis je te montre le début du procédé.
- Création d'images car je n'ai pas tes sources
- Creation du jeu de 2x 10cartes pour avoir un doublon de chaque
- affichage du resultat.

Je n'ai pas le temps d'en faire plus ce soir, je me prépare à partir quelques jours pour bosser.
Il te suffit dans la procedure d'affichage de dire que si l'etat carte = 0 alors affiche #DOS sinon affiche carte()\ID
Je te laisse potasser tout ça. Il y a peut être plus simple mais j'ai suivi ta façon de coder pour une meilleure compréhension.

Code : Tout sélectionner

Declare CreaCartes()

;#Nb_de_canvas = 19

Enumeration Fenetre
  #Fenetre_principale
EndEnumeration

;Enumeration Gadgets
;  #Canvas_0
;EndEnumeration

Enumeration Police
  #Police
EndEnumeration

Enumeration Canvas
  #C01
  #C02
  #C03
  #C04
  #C05
  #C06
  #C07
  #C08
  #C09
  #C10
  #C11
  #C12
  #C13
  #C14
  #C15
  #C16
  #C17
  #C18
  #C19
  #C20
EndEnumeration

Enumeration Images
  #Dos
  #Carte01
  #Carte02
  #Carte03
  #Carte04
  #Carte05
  #Carte06
  #Carte07
  #Carte08
  #Carte09
  #Carte10
EndEnumeration 

Global.i X, Y, i, Quitter, Evenement, Couleur
Global.i LigBtns = 5, ColBtns = 4, HtBtn = 226, LgBtn = 300
Global.i Nb_par_Colonne = HtBtn * ColBtns, Lfen = LgBtn * LigBtns
Global NomPolice.s = "Arabic Transparent", TaillePolice = 25

Structure Carte
  Num.b ; numero de carte de 0 à 19
  ID.b ; Reference de la carte de #carte01 à #carte20
  Etat.b ; Etat en jeu : double "trouvé ou pas"
EndStructure

Global NewList carte.carte()

; Macro pour simplifier la creation de la liste du paquet de cartes
Macro Add2Jeu(numero,IDcarte,Etatcarte)
  AddElement( carte() )
  carte()\num = numero
  carte()\ID = IDcarte
  carte()\Etat = Etatcarte
EndMacro

; N'ayant pas tes images, je crée juste des cartes de couleurs
Procedure CreaCartes()
  For i = #Carte01 To #Carte10
    CreateImage(i, 300,226, 32, $0)
    StartDrawing(ImageOutput(i))
    Box(0,0,300,226, RGB(Random(255,100),Random(255,100),Random(255,100)))
    StopDrawing()
  Next
  CreateImage(#Dos, 300,226, 32, $0)
  StartDrawing(ImageOutput(#DOS))
  Box(0,0,300,226, $0 )
  StopDrawing()
EndProcedure

Procedure IniPlateau()
  ; creation d'une liste de jeu 
  ; 2x10 cartes comme ça on a un doublon de chaque
  
  CarteEnCours = #Carte01
  For i = 1 To 10
    Add2Jeu(i,CarteEnCours,#False)
    CarteEnCours+1
  Next
  CarteEnCours = #Carte01
  For i = 11 To 20
    Add2Jeu(i,CarteEnCours,#False)
    CarteEnCours+1
  Next
  
  ; on bat les cartes
  For melange = 1 To 5
    RandomizeList(carte())
  Next
  
   ; TEST Pour voir si la liste de carte du jeu est bien faite et bien brassée
 ForEach carte()
   Debug carte()\Num
   Debug carte()\ID
   Debug carte()\Etat
   Debug ""
 Next
 ; // Fin Test
 
EndProcedure

Procedure AffichCartes()
  
  CanvasEnCours = #C01
  ForEach Carte()
    StartDrawing(CanvasOutput(CanvasEnCours))
      DrawImage(ImageID(Carte()\ID),0,0)
      StopDrawing()
      CanvasEnCours+1
  Next
  

EndProcedure



Procedure Ouvrir_Fenetre_principale()

  If OpenWindow(#Fenetre_principale, 10, 10, Lfen + 20, Nb_par_Colonne + 20,
                "Memory © Micoute 04/06/2017",
                #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
    SetWindowColor(#Fenetre_principale, $DECFF2)
   
;     CatchImage(#Dos, ?Dos, ?Animaux01 - ?Dos)
;     ResizeImage(#Dos, 300, 226)
;    
;     CatchImage(#Carte01, ?Animaux01, ?animaux02 - ?Animaux01)
;     ResizeImage(#Carte01, 300, 226)
   
    LoadFont(#Police, NomPolice, TaillePolice, #PB_Font_Bold)
    SetGadgetFont(#PB_Default, FontID(#Police)) ;Affecter la Police à tous les gadgets
   
    ;Créons nos canvas
    For C = #C01 To #C20
      X = (C * HtBtn) / (Nb_par_Colonne) ;Position de la colonne du bouton C
      Y = Mod(C * HtBtn, Nb_par_Colonne) ;Position de la ligne du bouton C
     
      CanvasGadget(C,  10 + x * LgBtn, 10 + y, LgBtn, HtBtn, #PB_Canvas_Image|#PB_Canvas_Border)     
    Next
    
    AffichCartes()
    
;     For  C = #C01 To #C20
;       StartDrawing(CanvasOutput(#Canvas_0 + C))
;       DrawImage(ImageID(#Dos), 0, 0)
;       StopDrawing()
;     Next C 
   
   
  EndIf
EndProcedure




 CreaCartes()
 IniPlateau()
 

 
 
Ouvrir_Fenetre_principale()

;{- Boucle d'évènements
Quitter.i = #False

Repeat
 
  Event       = WaitWindowEvent()
  EventGadget = EventGadget()
  EventType   = EventType()
 
  Select event
     
    Case #PB_Event_Gadget
     
;       chaine$ = Str(EventGadget - #Canvas_0)
;      
;       If StartDrawing(CanvasOutput(EventGadget))
;        
;         ;GestionCanvas(EventGadget , chaine$, EventType)
;         DrawImage(ImageID(#Carte01), 0, 0)
;         StopDrawing()
;        
;       EndIf
     
    Case #PB_Event_CloseWindow
      Select EventWindow()
        Case #Fenetre_principale
          CloseWindow(#Fenetre_principale)
          Quitter = #True
      EndSelect
     
  EndSelect
 
Until Quitter = #True
End
;}

; DataSection
;   Dos:
;   IncludeBinary "D:\Programmation\Prg Perso\P\PROJETS\Memory\Memory\celluledebase.bmp"
;   Animaux01:
;   IncludeBinary "D:\Programmation\Prg Perso\P\PROJETS\Memory\Memory\Animaux01.bmp"
;   Animaux02:
;   IncludeBinary "D:\Programmation\Prg Perso\P\PROJETS\Memory\Memory\Animaux02.bmp"
;   Animaux03:
;   IncludeBinary "D:\Programmation\Prg Perso\P\PROJETS\Memory\Memory\Animaux03.bmp"
;   Animaux04:
;   IncludeBinary "D:\Programmation\Prg Perso\P\PROJETS\Memory\Memory\Animaux04.bmp"
;   Animaux05:
;   IncludeBinary "D:\Programmation\Prg Perso\P\PROJETS\Memory\Memory\Animaux05.bmp"
;   Animaux06:
;   IncludeBinary "D:\Programmation\Prg Perso\P\PROJETS\Memory\Memory\Animaux06.bmp"
;   Animaux07:
;   IncludeBinary "D:\Programmation\Prg Perso\P\PROJETS\Memory\Memory\Animaux07.bmp"
;   Animaux08:
;   IncludeBinary "D:\Programmation\Prg Perso\P\PROJETS\Memory\Memory\Animaux08.bmp"
;   Animaux09:
;   IncludeBinary "D:\Programmation\Prg Perso\P\PROJETS\Memory\Memory\Animaux09.bmp"
;   Animaux10:
;   IncludeBinary "D:\Programmation\Prg Perso\P\PROJETS\Memory\Memory\Animaux10.bmp"
; EndDataSection