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 | |
| | Auteur | Message |
---|
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Puzzle Ven 4 Nov 2011 - 17:05 | |
| Un petit jeu sans prétention: une image découpée en morceaux qu'il faut reconstituer (tiens donc, comme tous les puzzles ) Le programme part d'une image jpg ou bmp (ou autre...) de proportion 4:3 qui sera redimensionnée provisoirement. Si elle n'est pas dans cette proportion (4:3, format en général des apn) elle se retrouvera déformée... C'est une application des fonctions 2D_IMAGE_COPY et 2D_IMAGE_PASTE. Voir l'Aide pour l'utilisation. - Code:
-
' Puzzle.bas DIM nc, nr, c, r, lc, hr, w0, h0, wp, hp, f$, ft$, fm$, iv$, i, j, at, tp, a$ DIM x, y, xp(20,20), yp(20,20), oc2(20,20), oc3(20,20), cr$, nf$, orig, xpo, ypo DIM ro(3), co(3) LABEL Quit, Chimg, Vimg, Generat, rbk, clic2, clic3, Aide
iv$ = "C:\Progra~2\Irfanv~1\i_view32.exe ": ' ****** A VOIR ********* ft$ = "C:\Temp\Puzzle.jpg" fm$ = "C:\Temp\infoimg.tmp"
w0 = 680: h0 = SCREEN_Y-40 hp = INT((h0-140)/2) wp = INT(4*hp/3) w0 = wp+30
WIDTH 0, w0: HEIGHT 0, h0: COLOR 0, 0,255,255: CAPTION 0, " - PUZZLE -" PICTURE 1: TOP 1, -2000: WIDTH 1, wp: HEIGHT 1, hp PICTURE 2: TOP 2, 20: LEFT 2, 10: WIDTH 2, wp: HEIGHT 2, hp ON_CLICK 2, clic2 PICTURE 3: TOP 3, hp+50: LEFT 3, 10: WIDTH 3, wp: HEIGHT 3, hp ON_CLICK 3, clic3 IMAGE 4 IMAGE 5
tp = 2*hp+60 BUTTON 10: TOP 10, tp: LEFT 10, 10: WIDTH 10, 70: CAPTION 10, "Image" ON_CLICK 10, Chimg BUTTON 11: TOP 11, tp: LEFT 11, 85: WIDTH 11, 40: CAPTION 11, "Voir" ON_CLICK 11, Vimg ALPHA 12: TOP 12, tp+2: LEFT 12, 130: CAPTION 12, "Colonnes:" SPIN 13: TOP 13, tp: LEFT 13, 195: WIDTH 13, 40 ALPHA 14: TOP 14, tp+2: LEFT 14, 240: CAPTION 14, "Rangées:" SPIN 15: TOP 15, tp: LEFT 15, 305: 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, tp: LEFT 16, 355: WIDTH 16, 40: CAPTION 16, "Go !" ON_CLICK 16, Generat BUTTON 17: TOP 17, tp: LEFT 17, 400: WIDTH 17, 60: CAPTION 17, "Aide": ON_CLICK 17, Aide BUTTON 18: TOP 18, tp: LEFT 18, wp-65: WIDTH 18, 70: CAPTION 18, "Quitter": ON_CLICK 18, Quit
PRINT_TARGET_IS 0: FONT_SIZE 0, 10: FONT_BOLD 0 PRINT_LOCATE 240,2: PRINT "Clic une case source:" PRINT_LOCATE 240,hp+28: PRINT "Clic une case arrivée:"
FORM 50: TOP 50, hp+50: LEFT 50, wp+20: WIDTH 50, wp+20: HEIGHT 50, hp+50: HIDE 50 PICTURE 51: PARENT 51, 50: WIDTH 51, wp: HEIGHT 51, hp
OPEN_DIALOG 30 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 RETURN nf$ = f$ EXECUTE_WAIT iv$ + f$ + " /info=" + fm$ FILE_OPEN_READ 1, fm$ WHILE FILE_EOF(1) = 0 FILE_READLN 1, a$ IF LEFT$(a$, 16) = "Image dimensions" a$ = MID$(a$, 20, 50): i = INSTR(a$, " ") c = VAL(LEFT$(a$, i-1)): a$ = MID$(a$, i+3, 50) i = INSTR(a$, " "): r = VAL(LEFT$(a$, i-1)) IF c <> wp OR r <> hp EXECUTE_WAIT iv$+f$+" /resize=("+STR$(wp)+","+STR$(hp)+") /convert="+ft$ f$ = ft$ END_IF EXIT_WHILE END_IF END_WHILE FILE_CLOSE 1: FILE_DELETE fm$ GOSUB Generat RETURN
Vimg: IF LEN(f$) < 3 THEN RETURN SHOW 50: FILE_LOAD 51, f$ CAPTION 50, nf$ RETURN
Generat: IF LEN(f$) < 3 THEN RETURN 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 2D_TARGET_IS 3: 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 2D_TARGET_IS 1 FOR r = 0 TO nr-1 FOR c = 0 TO nc-1 2D_TARGET_IS 1: 2D_IMAGE_COPY 4, xp(r,c), yp(r,c), xp(r,c)+lc-1, yp(r,c)+hr-1 rbk: j = INT(RND(nr)): i = INT(RND(nc)) IF oc2(j,i) = 1 THEN GOTO rbk oc2(j,i) = 1: oc3(j,i) = 0 2D_TARGET_IS 2: 2D_IMAGE_PASTE 4, xp(j,i), yp(j,i) NEXT c NEXT r RETURN
clic2: x = MOUSE_X_POSITION(2): y = MOUSE_Y_POSITION(2) c = INT(x/lc): r = INT(y/hr) IF oc2(r,c) = 0 OR at = 1 THEN at = 0: RETURN 2D_TARGET_IS 2: xpo = xp(r,c): ypo = yp(r,c) 2D_IMAGE_COPY 4, xpo, ypo, xpo+lc-1, ypo+hr-1 orig = 2: ro(2) = r: co(2) = c: at = 1 RETURN
clic3: x = MOUSE_X_POSITION(3): y = MOUSE_Y_POSITION(3) c = INT(x/lc): r = INT(y/hr) 2D_TARGET_IS 3 IF at = 1 IF oc3(r,c) = 1: ' case destinataire déjà occupée IF orig = 3 ' c'est une permutation 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 END_IF at = 0: RETURN END_IF 2D_IMAGE_PASTE 4, xp(r,c), yp(r,c): oc3(r,c) = 1 ' effacement image d'origine IF orig = 2 oc2(ro(2),co(2)) = 0 ELSE oc3(ro(3),co(3)) = 0 END_IF 2D_TARGET_IS orig: 2D_RECTANGLE xpo,ypo,xpo+lc, ypo+hr at = 0 ELSE IF oc3(r,c) = 0 THEN RETURN xpo = xp(r,c): ypo = yp(r,c) 2D_IMAGE_COPY 4, xpo, ypo, xpo+lc-1, ypo+hr-1 orig = 3: ro(3) = r: co(3) = c: at = 1 END_IF RETURN Aide: cr$ = CHR$(13)+CHR$(10) a$ = " - PUZZLE -" + cr$ + cr$ a$=a$+" - Choisir une image (bouton 'Image'). Une image temporaire est créée"+cr$ a$=a$+" aux dimensions des fenêtres du jeu."+cr$+cr$ a$=a$+" - Choisir le nombre de colonnes et de rangées pour le découpage."+cr$+cr$ a$=a$+" - Puis clic 'Go !': génération de manière aléatoire d'un puzzle de l'image"+cr$ a$=a$+" dans la fenêtre supérieure."+cr$+cr$ a$=a$+" Le jeu consiste à reconstituer l'image dans la fenêtre inférieure:"+cr$ a$=a$+" cliquer une case du haut, puis cliquer sur son emplacement présumé en bas,"+cr$ a$=a$+" (une case libre), la portion d'image y est transférée."+cr$ a$=a$+" On peut également cliquer sur une case du bas déjà placée, puis cliquer soit"+cr$ a$=a$+" sur un autre emplacement libre pour rectifier une position, soit sur une" + cr$ a$=a$+" autre case déjà occupée, pour permuter les images."+cr$+cr$ a$=a$+" On peut à tout moment avoir un aperçu de l'image finale en cliquant sur 'Voir'."+cr$ MESSAGE a$ RETURN
PS j'ai un peu réduit les dimensions des images (de 640x480 à 560x420), je me suis aperçu que ça ne tenait pas forcément sur tous les écrans... PS2 Les dimensions des images sont maintenant fonction de la définition de l'écran (remarque judicieuse de Nardo) PS3 les éléments d'image du haut sont effacés au fur et à mesure de leur utilisation en bas. PS4 (5/11) possibilité de permuter deux pièces déjà placées.
Dernière édition par JL35 le Sam 5 Nov 2011 - 16:40, édité 7 fois | |
| | | Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: Puzzle Ven 4 Nov 2011 - 17:45 | |
| La vache ! T'as un grand écran JL35 ! Sur mon portable je n'arrive pas à afficher la totalité du formulaire... J'ai pas encore regardé dans le détail mais Irfanview est obligatoire ? EDIT : Oups on s'est croisé non ? tu peux pas le mettre dans la largeur ? format 16/9 ? ou utiliser screen_x et screen_y (et trouver une taille standard en puissance de 2?)
Dernière édition par Nardo26 le Ven 4 Nov 2011 - 17:49, édité 1 fois | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Puzzle Ven 4 Nov 2011 - 17:47 | |
| Ben oui (1920x1200 ), d'ailleurs je viens d'éditer et de réduire les dimensions des images, pour toi ! Et en effet, Irfanview ne sert qu'à ça, redimensionner l'image d'origine, je ne sais pas faire autrement... Remarque n'importe quel programme de redimensionnement d'image conviendrait, mais je ne sais pas faire en Panoramic pur. Edit j'y ai pensé, mettre les images côte à côte... ça va se faire... | |
| | | Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: Puzzle Ven 4 Nov 2011 - 18:07 | |
| petit problème ligne 71 :
il faut rajouter un espace entre iv$ et f$ : EXECUTE_WAIT iv$ +" "+ f$ + " /info=" + fm$
| |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Puzzle Ven 4 Nov 2011 - 18:10 | |
| Eh non mon ami ! L'espace est déjà dans la variable iv$ !!! Bon, je rectifie ci-dessus pour que ça tienne dans tous les écrans. | |
| | | Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: Puzzle Ven 4 Nov 2011 - 18:13 | |
| Ben perso, j'ai été obligé de rajouter les espaces pour que cela fonctionne... bizarre... EDIT : J'ai trouvé pourquoi : j'ai modifier légèrement le début du prog - Code:
-
DLL_ON "Utils.dll" DIM Dll_return
iv$ = "C:\Program Files (x86)\IrfanView\i_view32.exe" Dll_return = DLL_CALL2("GetShortName",ADR(iv$),LEN(iv$)) iv$=TRIM$(iv$)
et donc je n'avais plus l'espace à la fin de iv$.... | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Puzzle Ven 4 Nov 2011 - 18:20 | |
| Ah ben oui, si tu introduis des erreurs, alors... Je ne comprends pas trop cette complication d'introduire une dll alors qu'on a l'Execute ? Edit, pardon Nardo, c'est pour avoir le nom court, j'avais pô vu... | |
| | | Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: Puzzle Ven 4 Nov 2011 - 18:26 | |
| Un peu statique, il manque du mouvement... mais pas mal ! | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Puzzle Ven 4 Nov 2011 - 18:30 | |
| J'aurais pu aussi découper les pièces comme dans un vrai puzzle... Je ne sais pas faire le glisser/déposer d'un élément graphique en Panoramic... ça aurait été plus joli, évidemment.
J'ai ajouté quelque chose de plus logique: l'effacement des pièces du haut au fur et à mesure de leur utilisation en bas, c'est plus clair, on ne peut pas utiliser deux fois la même pièce. | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Puzzle Ven 4 Nov 2011 - 23:54 | |
| Il est super ce programme Juste une petite remarque a moins que j'aille raté un élément, il y a quelques petites améliorations qui pourraient encore être apportées: - Si on place mal la dernière pièce, on ne peut plus permuter 2 pièces en bas - Peut-être afficher un message quand toutes les pièces sont correctement placée pour féliciter le gagnant et demander si l'on veut arrêter ou recommencer - Éventuellement un bouton test qui affiche les pièces mal placées (moins utile si l'on peut permuter les vignettes placées même quand elles sont toutes mises et si l'on a le message disant que tout est correct) | |
| | | Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: Puzzle Sam 5 Nov 2011 - 1:52 | |
| Un truc que tu pourrais éventuellement rajouter: un score en fonction du nombre de pièces et du temps passé pour compléter le puzzle et ce sera parfait ! La partie graphique n'est pas trop mon domaine mais pour le mouvement, on ne peut pas utiliser des sprites ? | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Puzzle Sam 5 Nov 2011 - 10:18 | |
| si on peut =>Crééer un sprite et le masquer, clic sur image => charge l'image dans le sprite et l'affiche sur l'image, le sprite suit ensuite les coordonnées de la souris jusqu'au prochain clic ou on copie l'image dans sa destination et l'on masque le sprite qui n'a servit qu'à faire beau et se souvenir que l'on a une pièce en atente d'être déposée ... | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Puzzle Sam 5 Nov 2011 - 14:17 | |
| Je tourne le dos 5 minutes et me voilà avec tout un cahier des charges... | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Puzzle Sam 5 Nov 2011 - 14:43 | |
| ^^ Tu sais bien que pour les idées, tu peux compter sur nous. Après c'est comme pour Jack, tu pioches dedans ce que tu veux | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Puzzle Sam 5 Nov 2011 - 15:37 | |
| Suite à ta remarque judicieuse, j'ai ajouté la possibilité de permuter deux pièces déjà placées, ça me paraît en effet indispensable, sinon on est coincé en cas d'erreur. Pour le reste (genre Tagada! à la fin si c'est bon, etc., ça attendra ! ) 1) ce n'est pas forcément très simple de vérifier que tout est bien en place. 2) le joueur peut bien le faire lui-même en comparant à l'image source (bouton 'Voir') Pour rejouer, il suffit de cliquer sur 'Image', de choisir une autre image (ou la même), et c'est reparti. @Nardo, pareil, pour compter le temps il faudrait en permanence (à chaque mouvement) vérifier que tout est bien en place pour arrêter le compteur quand c'est bon... | |
| | | Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: Puzzle Sam 5 Nov 2011 - 16:47 | |
| Belle de nuit 35 renâcle à avancer ? | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Puzzle Sam 5 Nov 2011 - 16:52 | |
| Un peu mon neveu, je freine des quatre fers ! Je n'ai pas envie de me laisser entraîner dans une usine à gaz, alors que c'était une idée toute simplette au départ !
Quand même, belle de nuit, tu exagères (à peine). | |
| | | Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: Puzzle Sam 5 Nov 2011 - 16:58 | |
| Bon c'est toi qui voit... PS : et que dire de "Reine de saba 26" ? | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Puzzle Sam 5 Nov 2011 - 17:07 | |
| quand même, j'aime mieux l'autre ! | |
| | | Contenu sponsorisé
| Sujet: Re: Puzzle | |
| |
| | | | Puzzle | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |