Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | Calendrier |
|
|
| Puzzle 2 | |
| | Auteur | Message |
---|
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Puzzle 2 Mar 23 Jan 2018 - 17:42 | |
| J'avais déjà posté un puzzle, et suite aux découpages d'image de Jean Claude, ça m'a donné l'idée de l'améliorer un peu. Ce n'est pas très long (moins de 200 lignes), et tout en Panoramic. Ça peut être amusant, par exemple avec des photos de famille, mais n'importe quel type d'image convient (sauf le format: uniquement jpg ou bmp comme exigé par panoramic). C'est on ne peut plus simple: - on choisit le découpage: nombre de colonnes et rangées - on choisit l'image (clic dans l'édit) -> l'image est fragmentée et reconstituée aléatoirement et on reconstitue l'image d'origine par permutations successives des cases: clic une case, puis clic la case à échanger. On peut à tout moment faire apparaître l'image d'origine (pour tricher). - Code:
-
' Puzzle.bas DIM nc%,nr%,c%,r%,lc%,hr%,w0%,h0%,wp%,hp%,f$,ft$,fm$,i%,j%,k%,at%,tp,a$ DIM wp0%,w%,h%,x%,y%,xp%(20,20),yp%(20,20),oc2(20,20),cr$,nf$,xpo%,ypo%,rtmp$ DIM n%,no%(20,20),r1%,c1%,r2%,c2% LABEL Quit,Chimg,Vimg,Generat,clic2,Verif,Aide rtmp$ = "C:\TEMP\": ' répertoire de fichiers temporaires, à ajuster ft$ = rtmp$+"Puzzle.bmp" fm$ = rtmp$+"infoimg.tmp"
wp0% = 640 wp% = wp0%: hp% = wp%*3/4 w0% = wp0%+(WIDTH(0)-WIDTH_CLIENT(0))+10 h0% = hp%+HEIGHT(0)-HEIGHT_CLIENT(0)+70
WIDTH 0, w0%: HEIGHT 0, h0%: COLOR 0, 0,255,255: CAPTION 0, " - PUZZLE -" FONT_BOLD 0: FONT_SIZE 0,10 PICTURE 1: TOP 1, -2000: WIDTH 1, wp%: HEIGHT 1, hp% PICTURE 2: TOP 2, 58: LEFT 2, 5: WIDTH 2, wp%: HEIGHT 2, hp% ON_CLICK 2, clic2 IMAGE 4 IMAGE 5
ALPHA 10: TOP 10,5: LEFT 10,5: CAPTION 10,"Image:" EDIT 11: TOP 11,3: LEFT 11,55: WIDTH 11,450: ON_CLICK 11,Chimg BUTTON 17: TOP 17, 3: LEFT 17, LEFT(11)+WIDTH(11)+5: WIDTH 17, 60: CAPTION 17, "Aide" ON_CLICK 17, Aide BUTTON 18: TOP 18,TOP(17): LEFT 18,LEFT(17)+70: WIDTH 18,60: CAPTION 18,"Quitter" ON_CLICK 18,Quit ALPHA 12: TOP 12, 30: LEFT 12, 5: CAPTION 12, "Découpe col:" SPIN 13: TOP 13, 28: LEFT 13, LEFT(12)+95: WIDTH 13, 40 ALPHA 14: TOP 14, TOP(12): LEFT 14, LEFT(13)+45: CAPTION 14, "rang:" SPIN 15: TOP 15, TOP(13): LEFT 15, LEFT(14)+35: WIDTH 15, 40 MIN 13, 2: MAX 13, 20: POSITION 13, 4: MIN 15, 2: MAX 15, 20: POSITION 15, 3 BUTTON 16: TOP 16,TOP(15)+2: LEFT 16,LEFT(15)+45: WIDTH 16,40: CAPTION 16,"OK" ON_CLICK 16,Generat ALPHA 20: TOP 20,TOP(12): LEFT 20,LEFT(15)+100: COLOR 20,255,255,0 WIDTH 20,250: FONT_SIZE 20,12 BUTTON 21: TOP 21,TOP(17)+27: LEFT 21,LEFT(17): WIDTH 21,130: CAPTION 21,"Voir l'image" ON_CLICK 21,Vimg
FORM 50: TOP 50, TOP(0)+50: LEFT 50, w0%: WIDTH 50, wp%+16: HEIGHT 50, hp%+38: HIDE 50 BORDER_SMALL 50: BORDER_SMALL 0 PICTURE 51: PARENT 51, 50: FULL_SPACE 51: STRETCH_ON 51 OPEN_DIALOG 30
FORM 60: HIDE 60: HEIGHT 60,75: BORDER_SMALL 60: COLOR 60,255,255,0 ALPHA 61: PARENT 61,60: FONT_SIZE 61,24: FONT_BOLD 61: COLOR 61,255,255,0 CAPTION 61," TERMINÉ ! " END ' ============================== SOUS-PROGRAMMES =============================== Quit: IF FILE_EXISTS(ft$) = 1 THEN FILE_DELETE ft$ IF FILE_EXISTS(fm$) = 1 THEN FILE_DELETE fm$ TERMINATE ' ============================================================================== Chimg: f$ = FILE_NAME$(30) IF LEN(f$) < 3 THEN f$ = "": RETURN HIDE 60 TEXT 11,f$ nf$ = f$ ' dimensions de l'image -> w%, h% IF UPPER$(FILE_EXTRACT_EXTENSION$(f$)) <> ".BMP" FILE_LOAD 51,f$: FILE_SAVE 51,fm$ FILEBIN_OPEN_READ 1,fm$ ELSE FILEBIN_OPEN_READ 1,f$ END_IF FILEBIN_POSITION 1,18: w% = FILEBIN_READ(1)+256*FILEBIN_READ(1) FILEBIN_POSITION 1,22: h% = FILEBIN_READ(1)+256*FILEBIN_READ(1) FILEBIN_CLOSE 1 IF FILE_EXISTS(fm$) = 1 THEN FILE_DELETE fm$ IF w% > h% wp% = 2*SCREEN_X/3: ' largeur maxi hp% = wp%*h%/w% ELSE hp% = 4*SCREEN_Y/5: ' hauteur maxi wp% = hp%*w%/h% END_IF IF w% <> wp% OR h% <> hp% RedimImg(f$,wp%,0,ft$): f$ = ft$ END_IF k% = wp%+30: IF k% < 665 THEN k% = 665 HEIGHT 0,hp%+120: WIDTH 0,k%: IF WIDTH(0)<660 THEN WIDTH 0,660 WIDTH 1,wp%: HEIGHT 1,hp%: WIDTH 2,wp%: HEIGHT 2,hp% FILE_LOAD 2,f$ 2D_TARGET_IS 1: CLS RETURN ' ============================================================================== Vimg: ' Voir l'image originale IF LEN(f$) < 3 THEN RETURN IF w% > h% i% = 640: j% = i%*h%/w% ELSE j% = 640: i% = j%*w%/h% END_IF WIDTH 50,i%+WIDTH(50)-WIDTH_CLIENT(50): HEIGHT 50,j%+HEIGHT(50)-HEIGHT_CLIENT(50) FULL_SPACE 51 LEFT 50,LEFT(0)+WIDTH(0): SHOW 50: FILE_LOAD 51, f$ CAPTION 50, nf$ RETURN ' ============================================================================== Generat: IF LEN(f$) < 3 THEN MESSAGE "Pas d'image !": f$ = "": RETURN 2D_TARGET_IS 0: 2D_RECTANGLE 0,55,w0%,h0% FILE_LOAD 1,f$ nc% = POSITION(13): nr% = POSITION(15) lc% = INT(wp%/nc%): hr% = INT(hp%/nr%) FOR r% = 0 TO nr%-1 FOR c% = 0 TO nc%-1 xp%(r%,c%) = lc%*c%: yp%(r%,c%) = hr%*r% 2D_TARGET_IS 2: 2D_PEN_COLOR 255,255,0 2D_RECTANGLE xp%(r%,c%),yp%(r%,c%),xp%(r%,c%)+lc%, yp%(r%,c%)+hr% oc2(r%,c%) = 0 NEXT c% NEXT r% n% = -1 FOR r% = 0 TO nr%-1 FOR c% = 0 TO nc%-1 2D_TARGET_IS 1: n% = n%+1: ' numéro d'image 2D_IMAGE_COPY 4, xp%(r%,c%), yp%(r%,c%), xp%(r%,c%)+lc%-1, yp%(r%,c%)+hr%-1 j% = RND(nr%-1): i% = RND(nc%-1): ' rechercher une case libre WHILE oc2(j%,i%) = 1: j% = RND(nr%-1): i% = RND(nc%-1): END_WHILE oc2(j%,i%) = 1 2D_TARGET_IS 2: 2D_IMAGE_PASTE 4, xp%(j%,i%), yp%(j%,i%) no%(j%,i%) = n%: ' emplacement de l'image n% NEXT c% NEXT r% CAPTION 20, " Cliquer la case de départ " RETURN ' ============================================================================== clic2: IF f$ = "" THEN RETURN x% = MOUSE_X_POSITION(2): y% = MOUSE_Y_POSITION(2) c% = INT(x%/lc%): r% = INT(y%/hr%) 2D_TARGET_IS 2 IF at% = 1: ' deuxième clic, permutation r2% = r%: c2% = c% 2D_IMAGE_COPY 5, xp%(r%,c%), yp%(r%,c%), xp%(r%,c%)+lc%-1, yp%(r%,c%)+hr%-1 2D_IMAGE_PASTE 4, xp%(r%,c%), yp%(r%,c%) 2D_IMAGE_PASTE 5, xpo%, ypo% i% = no%(r1%,c1%): no%(r1%,c1%) = no%(r2%,c2%): no%(r2%,c2%) = i%: ' permut at% = 0 GOSUB Verif IF j% = 0 TOP 60,(hp%-HEIGHT(60))/2: LEFT 60,(wp%-WIDTH(60))/2: SHOW 60 ELSE CAPTION 20," Cliquer la case de départ " END_IF ELSE: ' 1er clic r1% = r%: c1% = c% xpo% = xp%(r%,c%): ypo% = yp%(r%,c%) 2D_IMAGE_COPY 4, xpo%, ypo%, xpo%+lc%-1, ypo%+hr%-1 at% = 1 CAPTION 20," Cliquer la case à échanger " END_IF RETURN ' ============================================================================== Verif: i% = -1: j% = 0 FOR r% = 0 TO nr%-1 FOR c% = 0 TO nc%-1 i%=i%+1: IF no%(r%,c%) <> i% THEN j% = 1: EXIT_FOR NEXT c% IF j% = 1 THEN EXIT_FOR NEXT r% RETURN ' ============================================================================== Aide: cr$ = CHR$(13)+CHR$(10) a$ = " - PUZZLE -" + cr$ + cr$ a$=a$+" - Choisir une image en bibliothèque "+cr$+cr$ a$=a$+" - Choisir le nombre de colonnes et de rangées pour le découpage,"+cr$ a$=a$+" valider par 'OK'. Rectifier éventuellement, valider."+cr$ a$=a$+" Chaque appui sur 'OK' génère une nouvelle disposition."+cr$+cr$ a$=a$+" Le jeu consiste à reconstituer l'image par permutations:"+cr$ a$=a$+" cliquer une case, puis cliquer sur son emplacement présumé,"+cr$ a$=a$+" le contenu des deux cases sera permuté."+cr$+cr$ a$=a$+" On peut à tout moment avoir un aperçu de l'image finale en"+cr$ a$=a$+" cliquant sur 'Voir l'image'."+cr$ MESSAGE a$ RETURN ' ============================================================================== SUB RedimImg(f$,w%,h%,fr$) ' Redimensionner l'image f$ (BMP ou JPG) en w%,h%, résultat dans fr$ (BMP) ' Si w% = 0 ou h% = 0: redimensionnement proportionnel DIM_LOCAL fm$,wi%,hi%,cx,cy,op% fm$ = rtmp$+"Provimg.bmp" op% = 1000: ' objet provisoire IF UPPER$(FILE_EXTRACT_EXTENSION$(f$)) = ".JPG" PICTURE op%: FILE_LOAD op%,f$: FILE_SAVE op%,fm$: DELETE op%: f$ = fm$ END_IF FILEBIN_OPEN_READ 1,f$ FILEBIN_POSITION 1,18: wi% = FILEBIN_READ(1)+256*FILEBIN_READ(1) FILEBIN_POSITION 1,22: hi% = FILEBIN_READ(1)+256*FILEBIN_READ(1) FILEBIN_CLOSE 1 IF h% = 0 THEN h% = w%*hi%/wi% IF w% = 0 THEN w% = h%*wi%/hi% cx = w%/wi%: cy = h%/hi% SCENE2D op%: HIDE op%: WIDTH op%,w%: HEIGHT op%,h% SPRITE op%: SPRITE_FILE_LOAD op%,f$: SPRITE_SCALE op%,cx,cy SNAPSHOT op%,fr$ DELETE op%: IF FILE_EXISTS(fm$) = 1 THEN FILE_DELETE fm$ END_SUB ' ==============================================================================
PS édité à 21h45: petites modifs, fonctionnement un peu plus rationnel: choix de l'image, puis choix des colonnes/lignes, puis validation. On peut remodifier les nombres de colonnes/lignes tant qu'on veut, chaque appui sur 'OK' génère une nouvelle disposition conforme aux paramètres. Edit 24/01: ajout de la mention 'Terminé !' quand l'image est reconstituée.
Dernière édition par JL35 le Mer 24 Jan 2018 - 14:34, édité 2 fois | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Puzzle 2 Mar 23 Jan 2018 - 18:32 | |
| Bravo chef ! Tiens, pour la peine, je t'offre des roses de mon jardin. A+ | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Puzzle 2 Mar 23 Jan 2018 - 19:18 | |
| Bravo jean Claude et JL35 pour cette réalisation collégiale ! Bien vu le puzzle ! Pour moi c'est testé et approuvé ! Par contre JL35 tu aurai pu faire faire un test de fin avec un message du style : "Bravo vous avez recomposé le puzzle entièrement !" Enfin bon je te pardonne pour cette fois... | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Puzzle 2 Mar 23 Jan 2018 - 19:36 | |
| Merci Jean Claude pour les fleurs, je n'ai pas trop l'habitude qu'on m'en offre ( ), mais ça fait toujours plaisir ! @Minibug, Oui, je sais, mais je laisse volontairement le joueur seul juge de savoir s'il a terminé ou pas... En fait ce n'est pas si simple que ça de savoir si l'image est reconstituée correctement, alors j'ai fait l'impasse... C'est faisable, sûrement, mais bon j'ai pensé qu'on pouvait s'en passer ! Merci en tout cas pour les appréciations. | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Puzzle 2 Mar 23 Jan 2018 - 21:56 | |
| PS: Édité là-haut avec un bouton de validation ('OK') pour générer à chaque appui un nouveau puzzle (nouvelle disposition aléatoire) conforme aux paramètres colonnes/lignes. | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Puzzle 2 Mer 24 Jan 2018 - 0:10 | |
| - JL35 a écrit:
- En fait ce n'est pas si simple que ça de savoir si l'image est reconstituée correctement, alors j'ai fait l'impasse...
Une idée qui me vient comme ça : On numérote les morceaux de l’image (col,rang), par exemple (1,1), (1,2), … (2,1),(2,2), … Puis, quand on estime avoir reconstitué l’image, vérifier si tous les morceaux sont à leur place. Ce n’est peut-être pas si facile que ça ! De toutes les façons, merci pour le partage. | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Puzzle 2 Mer 24 Jan 2018 - 10:55 | |
| oui une nouvelle façon de faire un puzzle en quelques lignes. C'est beau et efficace. Après pour en faire un jeu plus standard, on peut toujours rajouter un peu d'interface autour mais ce n'est pas le plus important. Malheureusement les utilisateurs finaux se font souvent impressionner ou en tout cas influencer par des détails | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Puzzle 2 Mer 24 Jan 2018 - 11:19 | |
| Tandis que les utilisateurs finauds ne s'y laissent pas prendre ! @jicehel, dans mon esprit c'est un jeu pour s'amuser 5 minutes, ou pour les enfants en bas âge (à partir de 10 ans ils ont leur smartphone, c'est autre chose...). Donc l'interface est plutôt minimale, pas comme un jeu à commercialiser. Si quelqu'un veut le mettre en vente, j'abandonne volontiers mes droits d'auteur ! @papydall, effectivement j'ai aussi pensé à cette solution (qui est sans doute LA solution), mais je me suis dit que ça ne valait pas le coup de trop se casser la tête là-dessus, on voit bien en général quand l'image est correcte et terminée. | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| | | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Puzzle 2 Mer 24 Jan 2018 - 13:21 | |
| En même temps, on peut être joueur et prendre un beau monochrome comme image de base ... Bon ok, je sorts ... | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Puzzle 2 Mer 24 Jan 2018 - 14:39 | |
| A la demande générale de papydall et jicehel, j'ai ajouté un petit panneau 'Terminé !' quand le puzzle est reconstitué (papydall: j'ai utilisé la méthode des numéros de cases).
Jicehel, rien n'empêche de prendre une image monochrome, évidemment. Et si on est encore plus joueur, on peut prendre une image toute blanche, mais là, il faudra de la patience, seule ma nouvelle modif dira si on a gagné ! (prévoir un peu de temps quand même et quelques tâtonnements) | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Puzzle 2 Mer 24 Jan 2018 - 15:50 | |
| | |
| | | jjn4
Nombre de messages : 2747 Date d'inscription : 13/09/2009
| Sujet: +++ Ven 26 Jan 2018 - 17:02 | |
| Oui, joli petit jeu très sympa !!! Et difficile, si on le découpe en de nombreux petits carrés ! | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Puzzle 2 Ven 26 Jan 2018 - 17:33 | |
| C'est sûr que si en plus il y a un grand ciel bleu.... | |
| | | Contenu sponsorisé
| Sujet: Re: Puzzle 2 | |
| |
| | | | Puzzle 2 | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |