FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  MembresMembres  Connexion  
Derniers sujets
» Logiciel de planétarium.
Construire et résoudre un puzzle Emptypar Pedro Sam 23 Nov 2024 - 15:50

» Un autre pense-bête...
Construire et résoudre un puzzle Emptypar Froggy One Jeu 21 Nov 2024 - 15:54

» Récupération du contenu d'une page html.
Construire et résoudre un puzzle Emptypar Pedro Sam 16 Nov 2024 - 14:04

» Décompilation
Construire et résoudre un puzzle Emptypar JL35 Mar 12 Nov 2024 - 19:57

» Un album photos comme du temps des grands-mères
Construire et résoudre un puzzle Emptypar jjn4 Mar 12 Nov 2024 - 17:23

» traitement d'une feuille excel
Construire et résoudre un puzzle Emptypar jjn4 Jeu 7 Nov 2024 - 3:52

» Aide-mémoire mensuel
Construire et résoudre un puzzle Emptypar jjn4 Lun 4 Nov 2024 - 18:56

» Des incomprèhension avec Timer
Construire et résoudre un puzzle Emptypar Klaus Mer 30 Oct 2024 - 18:26

» KGF_dll - nouvelles versions
Construire et résoudre un puzzle Emptypar Klaus Mar 29 Oct 2024 - 17:58

» instructions panoramic
Construire et résoudre un puzzle Emptypar maelilou Lun 28 Oct 2024 - 19:51

» Figures fractales
Construire et résoudre un puzzle Emptypar Marc Ven 25 Oct 2024 - 12:18

» Panoramic et Scanette
Construire et résoudre un puzzle Emptypar Yannick Mer 25 Sep 2024 - 22:16

» Editeur d étiquette avec QR évolutif
Construire et résoudre un puzzle Emptypar JL35 Lun 23 Sep 2024 - 22:40

» BUG QR Code DelphiZXingQRCode
Construire et résoudre un puzzle Emptypar Yannick Dim 22 Sep 2024 - 11:40

» fichier.exe
Construire et résoudre un puzzle Emptypar leclode Ven 20 Sep 2024 - 19:02

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Novembre 2024
LunMarMerJeuVenSamDim
    123
45678910
11121314151617
18192021222324
252627282930 
CalendrierCalendrier
Le deal à ne pas rater :
Code promo Nike : -25% dès 50€ d’achats sur tout le site Nike
Voir le deal

 

 Construire et résoudre un puzzle

Aller en bas 
AuteurMessage
Klaus

Klaus


Nombre de messages : 12331
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

Construire et résoudre un puzzle Empty
MessageSujet: Construire et résoudre un puzzle   Construire et résoudre un puzzle EmptyMar 7 Aoû 2012 - 18:34

J'ai fait un programme pour découper une image en petits morceaux façon puzzle, et un autre pour reconstituer le puzzle à partir des morceaux éparpillés de façon aléatoire. J'ai déjà posté le tout sur un autre fil de discussion, mais je réunis tout ici, dans la rubrique des jeux, car je pense que c'est sa place, maintenant que tout est opérationnel.

Programme puzzeliser.bas
Ce programme prend une image (BMP ou JPG) et la découpe en petits rectangles. On peut choisir le nombre de lignes et de colonnes, via un menu de configuration. Le résultat sera déposé sous forme d'un répertoire dans le même dossier que le fichier image d'origine qui reste inchangé. Ce dossier porte le même nom que l'image d'origine, et il contient tous les morceaux sous forme de fichiers BMP, et un fichier puzzle_config.txt qui donne des informations sur le puzzle. Ce sera ce fichier TXT qui sera utilisé par le programme puzzle.bas pour charger le puzzle.
Code:
' puzzeliser.bas

label labels : gosub labels
gosub constantes
gosub variables
gosub donnees
gosub form0
gosub menu
gosub GUI
gosub initialisations
end

labels:
  label constantes, variables, donnees, form0, menu, GUI, initialisations
  label open, sortir, conf, close_conf, decouper
  return
 
constantes:
  dim max_lignes% : max_lignes% = 100
  dim max_colonnes% : max_colonnes% = 150
  return
 
variables:
' variables techniques
  dim no%, no1%, no2%, i%, j%, k%, m%, n%, s$, pic$, w%, h%, f$
' variables mémorisant des numéros d'objet
  dim no_pic% : ' picture visualisé à l'écran
  dim no_open% : ' open_dialog
  dim no_conf% : ' form de configuration
  dim no_conf_n_lignes% : ' zone pour le nombre de lignes dans la form de configuration
  dim no_conf_n_colonnes% : ' zone pour le nombre de colonnes dans la form de configuration
  dim no_decoup% : ' ligne "Découper" dans le menu "Fichiers"
  dim no_image% : ' image interne recevant le rectangle découpé
' variables pour la configuration du découpage
  dim n_lignes%, n_colonnes%
  return

donnees:
  return

form0:
  full_space 0
  caption 0,"Création d'un puzzle"

  return

menu:
  no% = no% + 1 : main_menu no% : no1% = no%
  no% = no% + 1 : sub_menu no% : parent no%,no1% : no2% = no%
    caption no%,"Fichier"
  no% = no% + 1 : sub_menu no% : parent no%,no2%
    caption no%,"Ouvrir" : on_click no%,open
  no% = no% + 1 : sub_menu no% : parent no%,no2%
    caption no%,"Découper" : on_click no%,decouper
    no_decoup% = no% : inactive no%
  no% = no% + 1 : sub_menu no% : parent no%,no2%
    caption no%,"----------"
  no% = no% + 1 : sub_menu no% : parent no%,no2%
    caption no%,"Sortir" : on_click no%,sortir

  no% = no% + 1 : sub_menu no% : parent no%,no1% : no2% = no%
    caption no%,"Options"
  no% = no% + 1 : sub_menu no% : parent no%,no2%
    caption no%,"Configuration" : on_click no%,conf

  return

GUI:
' objets invisibles
  no% = no% + 1 : open_dialog no% : no_open% = no%
    filter no%,"Images|*.jpg;*.bmp"

' form 0
  no% = no% + 1 : picture no% : no_pic% = no%  : 2d_target_is no%
    top no%,10 : left no%,10
    width no%,width(0)-8-20 : height no%,height(0)-34-40
   
' configuration
  no% = no% + 1 : form no% : hide no% : no_conf% = no% : no1% = no%
    border_small no%  : on_close no%,close_conf
    caption no%,"Configuration du puzzle"
    top no%,200 : left no%,200
  no% = no% + 1 : alpha no% : parent no%,no1%
    top no%,20 : left no%,20 : caption no%,"Nombre de lignes:"
  no% = no% + 1 : edit no% : parent no%,no1% : no_conf_n_lignes% = no%
    top no%,20 : left no%,130 : width no%,40
  no% = no% + 1 : alpha no% : parent no%,no1%
    top no%,50 : left no%,20 : caption no%,"Nombre de colonnes:"
  no% = no% + 1 : edit no% : parent no%,no1% : no_conf_n_colonnes% = no%
    top no%,50 : left no%,130 : width no%,40

  return

initialisations:
  n_lignes% = 5
  n_colonnes% = 7
  return
 
sortir:
  terminate

open:
  pic$ = ""
  width no_pic%,width(0)-8-20 : height no_pic%,height(0)-34-40
  s$ = file_name$(no_open%)
  if s$="_" then return
  file_load no_pic%,s$
'  width no_pic%,width(0)-8-20 : height no_pic%,height(0)-34-40
  pic$ = s$
  2d_flood width(no_pic%)-1,height(no_pic%)-1,0,0,0
  display
  for w%=width(no_pic%)-1 to 0 step -1
    if color_pixel_red(no_pic%,w%,0)<>0 then exit_for
    if color_pixel_green(no_pic%,w%,0)<>0 then exit_for
    if color_pixel_blue(no_pic%,w%,0)<>0 then exit_for
  next w%
  for h%=width(no_pic%)-1 to 0 step -1
    if color_pixel_red(no_pic%,0,h%)<>0 then exit_for
    if color_pixel_green(no_pic%,0,h%)<>0 then exit_for
    if color_pixel_blue(no_pic%,0,h%)<>0 then exit_for
  next h%
  w% = w% + 1 : h% = h% + 1
  message "Largeur: "+str$(w%)+"  Hauteur: "+str$(h%)
  active no_decoup%
  return

conf:
  text no_conf_n_lignes%,str$(n_lignes%)
  text no_conf_n_colonnes%,str$(n_colonnes%)
  inactive 0
  show no_conf%
  return

close_conf:
  i% = 0
  s$ = text$(no_conf_n_lignes%)
  if numeric(s$)=1
    n% = int(val(s$))
    if (n%>=2) and (n%<=max_lignes%) then i% = 1
  end_if
  if i%=0
    message "Le nombre de lignes est invalide."
  else
    n_lignes% = n%
  end_if
  i% = 0
  s$ = text$(no_conf_n_colonnes%)
  if numeric(s$)=1
    n% = int(val(s$))
    if (n%>=2) and (n%<=max_colonnes%) then i% = 1
  end_if
  if i%=0
    message "Le nombre de colonnes est invalide."
  else
    n_colonnes% = n%
  end_if

  hide no_conf%
  active 0 : to_foreground 0
  return

decouper:
  n% = int(h%/n_lignes% + 0.5)
  m% = int(w%/n_colonnes% + 0.5)
  no% = no% + 1
  f$ = left$(pic$,len(pic$)-4)
  if dir_exists(f$)=0 then dir_make f$
  f$ = f$ + "\puzzle_"
  for i%=1 to n_lignes%
    for j%=1 to n_colonnes%
      image no%
      2d_image_copy no%,(j%-1)*m%,(i%-1)*n%,j%*m%,i%*n%
      file_save no%,f$ + str$(i%)+"_"+str$(j%)+".bmp"
      delete no%
    next j%
  next i%
  file_open_write 1,f$+"config.txt"
  file_writeln 1,file_extract_name$(pic$)
  file_writeln 1,str$(w%)+" largeur"
  file_writeln 1,str$(h%)+" hauteur"
  file_writeln 1,str$(n_lignes%)+" lignes"
  file_writeln 1,str$(n_colonnes%)+" colonnes"
  file_close 1
  message "Terminé."
  return
 

Programme puzzle.bas
Pour jouer, il faut disposer d'un dossier contenant un puzzle créé par le programme puzzeliser.bas ci-dessus. C'est le programme puzzle.bas qui charge le fichier puzzle_config.txt, et à partir de là, il trouve les morceaux du puzzle et les affiche, dispersés de façon aléatoire. On utilise alors la fonction "Jouer" du menu "Fichiers" pour démarrer le jeu.

A partir de ce moment, on sélectionne un morceau par un clic gauche. Le morceau reste alors collé à la souris et on peut le déplacer librement. Un nouveau clic gauche le désélectionne et le fixe dans la "case" la plus proche de sa position actuelle.

Lorsque le dernier morceau est correctement mis en place, un message vient féliciter le gagnant, et on peut lancer une nouvelle partie.
Code:
' puzzle.bas

label labels : gosub labels
gosub constantes
gosub variables
gosub donnees
gosub form0
gosub menu
gosub GUI
gosub initialisations
end

labels:
  label constantes, variables, donnees, form0, menu, GUI, initialisations
  label open, sortir, jouer, selpic, sel0, tick
  return
 
constantes:
  dim max_lignes% : max_lignes% = 100
  dim max_colonnes% : max_colonnes% = 150
  dim dll$ : dll$ = "MouseOperations.dll"
  return
 
variables:
' variables techniques
  dim no%, no1%, no2%, i%, j%, k%, m%, n%, s$, pic$, w%, h%, f$, x%, y%
  dim f_jouer%, n_select%, x_mouse%, y_mouse%, hnd%
' variables mémorisant des numéros d'objet
  dim no_pic% : ' picture visualisé à l'écran
  dim no_open% : ' open_dialog
  dim no_jouer% : ' ligne "Jouer" dans le menu "Fichiers"
  dim no_detail% : ' dernier numéro d'objet AVANT les pictures de détail
  dim no_image% : ' image pour pouvoir copier un picture de détail
  dim no_transport% : ' picture pour déplacer un picture de détail
  dim no_timer% : ' timer pour le déplacement d'un picture de détail
' variables pour la configuration du découpage
  dim n_lignes%, n_colonnes%
  return

donnees:
  return

form0:
  full_space 0 : on_click 0,sel0
  caption 0,"Résoudre un puzzle"

  return

menu:
  no% = no% + 1 : main_menu no% : no1% = no%
  no% = no% + 1 : sub_menu no% : parent no%,no1% : no2% = no%
    caption no%,"Fichier"
  no% = no% + 1 : sub_menu no% : parent no%,no2%
    caption no%,"Ouvrir" : on_click no%,open
  no% = no% + 1 : sub_menu no% : parent no%,no2%
    caption no%,"Jouer" : on_click no%,jouer
    no_jouer% = no% : inactive no%
  no% = no% + 1 : sub_menu no% : parent no%,no2%
    caption no%,"----------"
  no% = no% + 1 : sub_menu no% : parent no%,no2%
    caption no%,"Sortir" : on_click no%,sortir

  return

GUI:
' objets invisibles
  no% = no% + 1 : open_dialog no% : no_open% = no%
    filter no%,"Puzzle|*.txt"
  no% = no% + 1 : image no% : no_image% = no%
  no% = no% + 1 : timer no% : no_timer% = no% : timer_interval no_timer%,100
    on_timer no_timer%,tick : timer_off no_timer%
 
' form 0
  no% = no% + 1 : picture no% : no_pic% = no%  : 2d_target_is no%
    top no%,10 : left no%,10 : on_click no%,sel0
    width no%,width(0)-8-20 : height no%,height(0)-34-40
   
  no_detail% = no%
 
  return

initialisations:
  n_lignes% = 5
  n_colonnes% = 7
  hnd% = handle(0)
  dll_on dll$
  return
 
sortir:
  terminate

open:
  timer_off no_timer%
  f_jouer% = 0
  2d_target_is 0
  if no%>no_detail%
    for i%=no_detail%+1 to no%+1
      delete i%
    next i%
    color no_pic%,255,255,255
  end_if
  pic$ = ""
  width no_pic%,width(0)-8-20 : height no_pic%,height(0)-34-40
  s$ = file_name$(no_open%)
  if s$="_" then return
  if file_extract_name$(s$)<>"puzzle_config.txt"
    message "Ce n'est pas un puzzle valide."
    return
  end_if
  f$ = file_extract_path$(s$)
  file_open_read 1,s$
  file_readln 1,pic$
  caption 0,"Résoudre le puzzle "+pic$
  file_readln 1,s$
  i% = instr(s$," ")
  w% = val(left$(s$,i%-1))
  file_readln 1,s$
  i% = instr(s$," ")
  h% = val(left$(s$,i%-1))
  file_readln 1,s$
  i% = instr(s$," ")
  n_lignes% = val(left$(s$,i%-1))
  file_readln 1,s$
  i% = instr(s$," ")
  n_colonnes% = val(left$(s$,i%-1))
  file_close 1
 
  no% = no_detail%
  n% = int(h%/n_lignes% + 0.5)
  m% = int(w%/n_colonnes% + 0.5)
  color no_pic%,0,0,0
  2d_target_is no_pic%
  2d_rectangle 0,0,w%,h%
  for i%=1 to n_lignes%
    for j%=1 to n_colonnes%
      s$ = f$ + "puzzle_"+str$(i%)+"_"+str$(j%)+".bmp"
      no% = no% + 1 : picture no%  : width no%,m% : height no%,n%
        left no%,10 + int(rnd(width(no_pic%)-m%))
        top no%,10 + int(rnd(height(no_pic%)-n%))
        file_load no%,s$ : on_click no%,selpic
    next j%
  next i%
  no_transport% = no% + 1 : picture no_transport%  : hide no_transport%
    width no_transport%,m% : height no_transport%,n%
    on_click no_transport%,selpic
  active no_jouer%
  return

jouer:
  inactive no_jouer%
  f_jouer% = 1
  return
 
selpic:
  timer_off no_timer%
  if n_select%>0
    left n_select%,left(no_transport%)
    top n_select%,top(no_transport%)
    show n_select% : hide no_transport%
    if number_click=no_transport%
      top n_select%,int(top(n_select%)/n%+0.5)*n% +10
      left n_select%,int(left(n_select%)/m%+0.5)*m% +10
      x% = 0
      for i%=1 to n_lignes%
        for j%=1 to n_colonnes%
          k% = no_detail% + (i%-1)*n_lignes% + j%
          if (left(k%)<>(10+(j%-1)*m%)) then x% = 1
          if (top(k%)<>(10+(i%-1)*n%)) then x% = 1
        next j%
      next i%
      if x%=0
        off_key_down 0
        message "BRAVO ! Vous avez reconstitué le puzzle !"
        return
      end_if
      n_select% = 0
      return
    end_if
  end_if
  n_select% = number_click
  i% = dll_call3("GetMousePosition",hnd%,adr(x_mouse%),adr(y_mouse%))
  2d_target_is n_select%
  2d_image_copy no_image%,0,0,m%-1,n%-1
  2d_target_is no_transport%
  2d_image_paste no_image%,0,0
  left no_transport%,left(n_select%)
  top no_transport%,top(n_select%)
  show no_transport% : hide n_select%
  timer_on no_timer%
  return
 
sel0:
  timer_off no_timer%
  left n_select%,left(no_transport%)
  top n_select%,top(no_transport%)
  show n_select% : hide no_transport%
  n_select% = 0
  return

tick:
  timer_off no_timer%
  i% = dll_call3("GetMousePosition",hnd%,adr(x%),adr(y%))
  if x%<0 then return
  left no_transport%,x% - x_mouse% + left(no_transport%)
  top no_transport%,y% - y_mouse% + top(no_transport%)
  x_mouse% = x%
  y_mouse% = y%
  timer_on no_timer%
  return
 

Amusez-vous bien !
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
 
Construire et résoudre un puzzle
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Résoudre un puzzle créé par Puzzeliser
» Puzzle 2
» Puzzle
» Jeu Puzzle
» Scrabble puzzle

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: Les jeux faits avec Panoramic-
Sauter vers: