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 |
|
|
| Réponse à JPCR concernant les objets cachés | |
| | Auteur | Message |
---|
papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Réponse à JPCR concernant les objets cachés Mer 7 Oct 2015 - 14:39 | |
| Salut tout le monde. Pour ne pas polluer le topic de Jean_Debord, je réponds ici Avec mes yeux (très) fatigués, je n’arrive pas à me concentrer. J’ai essayé, vite fait, le petit code suivant où je montre simplement l'idée. Si ça te conviens, tu peux utiliser une plus belle image où il y a de plus beaux objets à trouver et ... modifier le code pour une plus belle présentation. Bon, c'est à toi de voir. Voici l’image du test : - image.bmp:
- Code:
-
rem ============================================================================ rem Objets cachés rem ============================================================================
label clic dim x,y,n,n1 full_space 0 : font_bold 0 : font_name 0,"tahoma" : font_size 0,12 picture 10 : full_space 10 : on_click 10,clic file_load 10,"c:\users\acer\desktop\image.bmp" : ' Une image quelconque n = 3 : ' nombre d'objets à trouver n1 = 0 print_locate 800,050 : print "Cherchez (cliquez sur) les objets suivants :" print_locate 800,100 : print "Grand oiseau" print_locate 800,150 : print "Petit oiseau" print_locate 800,200 : print "Haut-parleur" repeat x = mouse_x_position(10) : y = mouse_y_position(10) : pause 100 until scancode = 27
end
rem ============================================================================ clic: if x > 330 and x < 460 and y > 035 and y < 150 print_locate 800,100 : print "Grand oiseau trouvé" 2d_circle 400,100,50 n1 = n1 + 1 : Verif() end_if if x > 170 and x < 230 and y > 050 and y < 080 print_locate 800,150 : print "Petit oiseau trouvé" 2d_circle 200,65, 30 n1 = n1 + 1 : Verif() end_if if x > 024 and x < 070 and y > 660 and y < 680 print_locate 800,200 : print "Haut-parleur trouvé" 2d_circle 50,670,20 n1 = n1 + 1 : Verif() end_if return rem ============================================================================ SUB Verif() if n1 = n message "Bravo! Vous avez trouvé tous les objets !" terminate : end end_if END_SUB rem ============================================================================
Si tout va bien, - voici le résultat:
| |
| | | jpcr
Nombre de messages : 276 Age : 57 Localisation : Val de Marne (94) Date d'inscription : 06/05/2011
| Sujet: Re: Réponse à JPCR concernant les objets cachés Mer 7 Oct 2015 - 15:27 | |
| | |
| | | pascal10000
Nombre de messages : 812 Localisation : Troyes Date d'inscription : 05/02/2011
| Sujet: Re: Réponse à JPCR concernant les objets cachés Mer 7 Oct 2015 - 16:17 | |
| jpcr
ps: c’est dommage que l'on ne puisse pas intégrer les images a l'exe
et ben si tu peut incorporé des images dans l'exe en utilisant application (exe) au lieu de exécutable (exe) mais attention si dans le dossier il comporte des fichiers text il les avale aussi
| |
| | | jpcr
Nombre de messages : 276 Age : 57 Localisation : Val de Marne (94) Date d'inscription : 06/05/2011
| Sujet: Re: Réponse à JPCR concernant les objets cachés Mer 7 Oct 2015 - 16:55 | |
| wow, merci pascal, je ne connaissais pas cette subtilité. | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Réponse à JPCR concernant les objets cachés Mer 7 Oct 2015 - 18:14 | |
| Un code sans image à intégrer. - Code:
-
rem ============================================================================ rem Objets cachés rem ============================================================================
label clic dim x,y,n,n1,w,h dim xHomme,yHomme,xDame,yDame,xEclair,yEclair,xPluie,yPluie,xAvion,yAvion dim xOiseau,yOiseau,xIle,yIle ,xEtoile,yEtoile,xCle,yCle,xLune,yLune dim xX,yX,xVelo,yVelo,xCoeur,yCoeur full_space 0 : caption 0,"Cliquez sur les objets .... <ESC> pour sortir ..." w = width(0)/2-100 : h = height(0)-100 picture 10 : width 10,w : height 10,h : on_click 10,clic : color 10,50,20,10 print_target_is 10 : font_bold 10 : font_size 10,34 : font_name 10 ,"webdings"
picture 20 : width 20,w : height 20,h : left 20,width(10)+20 font_bold 20 : font_name 20,"Tahoma" : font_size 20,16
x = int(20+rnd(w-100)) : y = int(20+rnd(h-100)) : xHomme = x : yHomme = y print_locate xHomme,yHomme : print chr$(hex("80")) x = int(20+rnd(w-100)) : y = int(20+rnd(h-100)) : xDame = x : yDame = y print_locate xDame,yDame : print chr$(hex("81")) x = int(20+rnd(w-100)) : y = int(20+rnd(h-100)) : xEclair = x : yEclair = y print_locate xEclair,yEclair : print chr$(hex("2B")) x = int(20+rnd(w-100)) : y = int(20+rnd(h-100)) : xPluie = x : yPluie = y print_locate xPluie,yPluie : print chr$(hex("DB")) x = int(20+rnd(w-100)) : y = int(20+rnd(h-100)) : xAvion = x : yAvion = y print_locate xAvion,yAvion : print chr$(hex("F1")) x = int(20+rnd(w-100)) : y = int(20+rnd(h-100)) : xOiseau = x : yOiseau = y print_locate xOiseau,yOiseau : print chr$(hex("FF")) x = int(20+rnd(w-100)) : y = int(20+rnd(h-100)) : xIle = x : yIle = y print_locate xIle,yIle : print chr$(hex("4A")) x = int(20+rnd(w-100)) : y = int(20+rnd(h-100)) : xEtoile = x : yEtoile = y print_locate xEtoile,yEtoile : print chr$(hex("98")) x = int(20+rnd(w-100)) : y = int(20+rnd(h-100)) : xCle = x : yCle = y print_locate xCle,yCle : print chr$(hex("D1")) x = int(20+rnd(w-100)) : y = int(20+rnd(h-100)) : xLune = x : yLune = y print_locate xLune,yLune : print chr$(hex("E0")) x = int(20+rnd(w-100)) : y = int(20+rnd(h-100)) : xX = x : yX = y print_locate xX,yX : print chr$(hex("72")) x = int(20+rnd(w-100)) : y = int(20+rnd(h-100)) : xVelo = x : yVelo = y print_locate xVelo,yVelo : print chr$(hex("62")) x = int(20+rnd(w-100)) : y = int(20+rnd(h-100)) : xCoeur = x : yCoeur = y print_locate xCoeur,yCoeur : print chr$(hex("59")) print_target_is 20 : print_locate 100,50 : print "Trouvez :" print_locate 100,100 : print "pluie" print_locate 100,125 : print "Homme" print_locate 100,150 : print "Dame" print_locate 100,175 : print "Eclair" print_locate 100,200 : print "Avion" print_locate 100,225 : print "Oiseau" print_locate 100,250 : print "Ile" print_locate 100,275 : print "Etoile" print_locate 100,300 : print "Clé" print_locate 100,325 : print "Lune" print_locate 100,350 : print "Croix" print_locate 100,375 : print "Velo" print_locate 100,400 : print "Coeur"
n = 13 : ' nombre d'objets à trouver n1 = 0 display repeat x = mouse_x_position(10) : y = mouse_y_position(10) : pause 300 until scancode = 27 end rem ============================================================================ Clic: 2d_target_is 10 : print_target_is 10 if abs(x - xPluie) < 20 and abs(y - yPluie) < 20 print_locate xPluie,yPluie : print chr$(hex("63")) print_target_is 20 : print_locate 100,100 : print "pluie ---> trouvé" n1 = n1 + 1 : Verif() end_if if abs(x - xHomme) < 20 and abs(y - yHomme) < 20 print_locate xHomme,yHomme : print chr$(hex("63")) print_target_is 20 : print_locate 100,125 : print "Homme ---> trouvé" n1 = n1 + 1 : Verif() end_if if abs(x - xDame) < 20 and abs(y - yDame) < 20 print_locate xDame,yDame : print chr$(hex("63")) print_target_is 20 : print_locate 100,150 : print "Dame ---> trouvé" n1 = n1 + 1 : Verif() end_if if abs(x - xEclair) < 20 and abs(y - yEclair) < 20 print_locate xEclair,yEclair : print chr$(hex("63")) print_target_is 20 : print_locate 100,175 : print "Eclair ---> trouvé" n1 = n1 + 1 : Verif() end_if if abs(x - xAvion) < 20 and abs(y - yAvion) < 20 print_locate xAvion,yAvion : print chr$(hex("63")) print_target_is 20 : print_locate 100,200 : print "Avion ---> trouvé" n1 = n1 + 1 : Verif() end_if if abs(x - xOiseau) < 20 and abs(y - yOiseau) < 20 print_locate xOiseau,yOiseau : print chr$(hex("63")) print_target_is 20 : print_locate 100,225 : print "Oiseau ---> trouvé" n1 = n1 + 1 : Verif() end_if if abs(x - xIle) < 20 and abs(y - yIle) < 20 print_locate xIle,yIle : print chr$(hex("63")) print_target_is 20 : print_locate 100,250 : print "Ile ---> trouvé" n1 = n1 + 1 : Verif() end_if if abs(x - xEtoile) < 20 and abs(y - yEtoile) < 20 print_locate xEtoile,yEtoile : print chr$(hex("63")) print_target_is 20 : print_locate 100,275 : print "Etoile ---> trouvé" n1 = n1 + 1 : Verif() end_if if abs(x - xCle) < 20 and abs(y - yCle) < 20 print_locate xCle,yCle : print chr$(hex("63")) print_target_is 20 : print_locate 100,300 : print "Clé ---> trouvé" n1 = n1 + 1 : Verif() end_if if abs(x - xLune) < 20 and abs(y - yLune) < 20 print_locate xLune,yLune : print chr$(hex("63")) print_target_is 20 : print_locate 100,325 : print "Lune ---> trouvé" n1 = n1 + 1 : Verif() end_if if abs(x - xX) < 20 and abs(y - yX) < 20 print_locate xX,yX : print chr$(hex("63")) print_target_is 20 : print_locate 100,350 : print "Croix ---> trouvé" n1 = n1 + 1 : Verif() end_if if abs(x - xVelo) < 20 and abs(y - yVelo) < 20 print_locate xVelo,yVelo : print chr$(hex("63")) print_target_is 20 : print_locate 100,375 : print "Velo ---> trouvé" n1 = n1 + 1 : Verif() end_if if abs(x - xCoeur) < 20 and abs(y - yCoeur) < 20 print_locate xCoeur,yCoeur : print chr$(hex("63")) print_target_is 20 : print_locate 100,400 : print "Coeur ---> trouvé" n1 = n1 + 1 : Verif() end_if display return rem ============================================================================ SUB Verif() if n1 = n message "Bravo! Vous avez trouvé tous les objets !" terminate : end end_if END_SUB rem ============================================================================
| |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Réponse à JPCR concernant les objets cachés Jeu 8 Oct 2015 - 7:26 | |
| Dans ton autre poste, je te parlais d'un système à détection par couleurs. La première étape est la préparation de la deuxième image (celle où les objets sont colorés en rouge) en retirant tous les points dont la composante rouge est 255. Le programme pour préparer cette image est: - Code:
-
' balaye une image de 1024 x 700 pour remplacer la composante rouge ' quand elle vaut 255 par 254 afin de garder la valeur 255 pour les zones ' correspondant à un objet dim x%,y%,c% dim l%, h% : l% = 1024 : h%=700 dim bandeau%, bord% dim l0%,h0%,l1%,h1% hide 0 : l0%=width(0) : h0%=height(0) picture 1 : full_space 1 : l1%=width(1) : h1%=height(1) bord%=(l0%+2-l1%)/2 : bandeau% = (h0%-2)-h1%-bord% width 1,l% : height 1,h% file_load 1,"i2.bmp" width 0,width(1) + 2*bord% : height 0,height(1) + bandeau% + 2 * bord%
for x% = 0 to l% - 1 for y% = 0 to h% - 1 c% = color_pixel_red(1,x%,y%) if c% = 255 then remplace(1,x%,y%) next y% next x% file_save 1,"i2.bmp" show 0 end
sub remplace(n%,xp%,yp%) dim_local v%,b% 2d_target_is n% v% = color_pixel_green(n%,xp%,yp%) b% = color_pixel_blue(n%,xp%,yp%) 2d_pen_color 244,v%,b% : 2d_point xp%,yp% end_sub Pour le système par détection par polygones, Klaus t'a créé une fonction super dans KGF .... | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Réponse à JPCR concernant les objets cachés Jeu 8 Oct 2015 - 10:45 | |
| La méthode de la feuille avec les objets colorés sur une autre image, c'est que tu n'a qu'un test à faire pour savoir si tu as cliqué sur un objet et une lecture d'une des composantes pour avoir un des 256 objets d'une image ou des 2 autres composantes pour avoir 65 536 objets. Ce qui peut aller considérablement plus vite que de tester l'appartenance d'un point parmi 65 536 polygones. Surtout si ces polygones sont complexes (s'ils ont de nombreux points).
| |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Réponse à JPCR concernant les objets cachés Ven 9 Oct 2015 - 0:29 | |
| Je te mets un petit programme de démo qui reconnait 32 objets sur une image (tel que c'est codé, je n'utilise que le vert pour avoir le numéro d'objet, je peux donc en mettre 256, ce qui est largement suffisant pour ce type de jeux ...) Tu vois, c'est hyper simple et j'ai fait la deuxième image en 2 temps, d'abord le programme donné avant qui retire tous les point avec une composante rouge à 255 , puis un coloriage rapide des différents objets en partant de la composante verte à 0 et en la montant de 1 à chaque objet. J'ai varié la couleur bleu sur certains objets pour les distinguer plus facilement quand ils étaient proches ou se touchaient. Les images sont disponibles ici: http://www.fichier-zip.com/2015/10/09/objets-caches/ - Code:
-
' balaye une image de 1024 x 700 pour remplacer la composante rouge ' quand elle vaut 255 par 254 afin de garder la valeur 255 pour les zones ' correspondant à un objet
label clique
dim x%,y%,objet%, objet$ dim l%, h% : l% = 1024 : h%=700 dim bandeau%, bord% dim l0%,h0%,l1%,h1% hide 0 : l0%=width(0) : h0%=height(0) picture 1 : full_space 1 : l1%=width(1) : h1%=height(1) bord%=(l0%+2-l1%)/2 : bandeau% = (h0%-2)-h1%-bord% width 1,l% : height 1,h% file_load 1,"image_normale.jpg" on_click 1,clique width 0,width(1) + 2*bord% : height 0,height(1) + bandeau% + 2 * bord% picture 2 : top 2, 0-1000 : hide 2 file_load 2,"i2.bmp" show 0 end
clique: x% = mouse_x_position(1) y% = mouse_y_position(1) if color_pixel_red(2,x%,y%) = 255 objet(2,x%,y%) caption 0,"Vous avez cliqué sur l'objet : " + objet$ else caption 0,"Vous n'avez pas cliqué sur l'un des objet prévu" end_if return
sub objet(n%,xp%,yp%) 2d_target_is n% objet% = color_pixel_green(n%,xp%,yp%) select objet% case 0: objet$="horloge" case 1: objet$="sachet de thé" case 2: objet$="clé" case 3: objet$="crochet" case 4: objet$="tableau" case 5: objet$="quart de lune" case 6: objet$="coquille Saint Jacques" case 7: objet$="crane" case 8: objet$="lampe à pétrôle" case 9: objet$="pince" case 10: objet$="bijou" case 11: objet$="tasse" case 12: objet$="chaise" case 13: objet$="chaussure" case 14: objet$="livre marron" case 15: objet$="rat" case 16: objet$="sceau" case 17: objet$="balais" case 18: objet$="trefle" case 19: objet$="pointe de flèche" case 20: objet$="tête de poupée" case 21: objet$="fer à cheval" case 22: objet$="timbre" case 23: objet$="rame" case 24: objet$="chaine" case 25: objet$="ombre de chat" case 26: objet$="plume" case 27: objet$="bouteille de vin" case 28: objet$="hache" case 29: objet$="girouette" case 30: objet$="palette" case 31: objet$="chapeau de magicien" case 32: objet$="montre" end_select end_sub | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Réponse à JPCR concernant les objets cachés Ven 9 Oct 2015 - 7:28 | |
| Pas mal, j'ai réussi à trouver les 32 objets cités dans le code. Le sceau, ça été le plus difficile, car il y a une ruse (à mon avis involontaire) A+ | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Réponse à JPCR concernant les objets cachés Ven 9 Oct 2015 - 8:50 | |
| Oui, là c'est facile, juste pour faire une démo, on clique sur l'objet que l'on veut. Dans le jeu que veut faire jpcr, le principe c'est que l'on a quelques objets précis à trouver sur l'image dans un temps donné et quand on trouve un des objets de la liste, il propose d'en trouver un autre. Pour les besoin de la démo, j'ai pris une image assez simple, mais tu peux en avoir avec beaucoup d'objets et des objets à trouver plus petit ou bien fondu dans le décor (comme le fer à cheval sur mon exemple, par exemple) | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Réponse à JPCR concernant les objets cachés Ven 9 Oct 2015 - 10:03 | |
| Good morning Le nec plus ultra sera si l’objet trouvé s’effacera de la scène, mais ça c’est un autre casse-tête de programmation. Y a-t-il quelqu’un qui a des idées que je n’ai pas pour remplacer l’objet trouvé par le même fond de l’image ? Oui, oui, je m’exprime mal ce matin. Je sais que je suis assez brouillon. Alors, | |
| | | jpcr
Nombre de messages : 276 Age : 57 Localisation : Val de Marne (94) Date d'inscription : 06/05/2011
| Sujet: Re: Réponse à JPCR concernant les objets cachés Ven 9 Oct 2015 - 10:28 | |
| oui c'est pour ça que je voulais utiliser des images transparentes que je pouvais cacher avec un hide. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Réponse à JPCR concernant les objets cachés Ven 9 Oct 2015 - 10:37 | |
| Ceci es possible uniquement avec un SCENE_2D et des SPRITE dont le fond noir est transparent. Et tu peux cacher un SPRITE par la commande SPRITE_HIDE. Tu peux également récupérer la position d'un clic de la souris dans le SCENE_2D excactement comme dans un PICTURE et déterminer ainsi quel sSPRITE a été cliqué. | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Ven 9 Oct 2015 - 10:38 | |
| ...Et tu peux changer la couleur de transparence en changeant la couleur de fond du scene2d. | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Réponse à JPCR concernant les objets cachés Ven 9 Oct 2015 - 12:16 | |
| Finalement, on peut tout faire ou presque. NB : ce 'on' , ce n'est pas Papydall ! | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Réponse à JPCR concernant les objets cachés Ven 9 Oct 2015 - 13:50 | |
| oui, là l'exemple se concentre sur la détection du clic sur l'objet. Pour effacer les objet, la méthode la plus simple selon moi: Préparer une image avec les objets Etape 1: filtrer la composante de ton choix pour garder une valeur particulière pour toi (dans mon exemple, le rouge à 255, mais tu peux le faire avec n'importe quelle composante et n'importe quelle valeur) et sauvegarder l'image Etape 2: faire un masque de tes sprites (ça peut être fait facilement par programme en remplacant tout ce qui n'est pas noir par la couleur R:255 V=n°d'objet et B avec la valeur que tu veux) Etape 3: Afficher les prites là où ils doivent être Etape 4: faire une capture écran de l'image avec les masques des sprites et la sauvegarder comme image de détection de clics sur un objet
Pour le jeu, prendre l'image de fond normal et afficher les sprites normaux. Initialiser un tableau qui contienne 1 pour chaque objet affiché Si l'utilisateur clic, prendre les coordonnées du clic sur le scene2D et tester le point correspondant sur l'image préalablement créée Si on a touché un objet, regardé si l'objet est actif. S'il l'est, masquer le sprite et mettre 0 dans le tableau
(Ce principe peut être affiné avec un autre tableau qui correspondrait au numéro des objets recherchés parmi ceux affichés et un compteur d'objet trouvé. L'objet ne serait alors masqué et la valeur du tableau passée à 0 uniquement si l'objet trouvé correspond à un des objets à trouver)
Ce n'est pas très complexe. Bien sûr ça demande un travail sur les graphisme, mais c'est le principe de ce jeu qui le demande...
| |
| | | jpcr
Nombre de messages : 276 Age : 57 Localisation : Val de Marne (94) Date d'inscription : 06/05/2011
| Sujet: Re: Réponse à JPCR concernant les objets cachés Ven 9 Oct 2015 - 14:21 | |
| | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Ven 9 Oct 2015 - 16:59 | |
| Pourquoi effacer le sprite ?
Tu peux faire un zoom/de-zoom au clic puis le faire sortir de l' écran. | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Réponse à JPCR concernant les objets cachés Ven 9 Oct 2015 - 18:18 | |
| | |
| | | jpcr
Nombre de messages : 276 Age : 57 Localisation : Val de Marne (94) Date d'inscription : 06/05/2011
| Sujet: Re: Réponse à JPCR concernant les objets cachés Lun 12 Oct 2015 - 14:22 | |
| je crois qu'il veut dire que tu fais bouger le sprite hors écran pour qu'on ait l'impression qu'il disparait une fois trouvé. | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Lun 12 Oct 2015 - 22:29 | |
| Oui Jpcr, c' est tout à fait cela. Si cela est assez rapide ( sans l' être de trop tout de même ) cela donne un effet et tu peux choisir une direction de sortie pour chaque sprite. | |
| | | Contenu sponsorisé
| Sujet: Re: Réponse à JPCR concernant les objets cachés | |
| |
| | | | Réponse à JPCR concernant les objets cachés | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |