[VBA] - Cherche Méthode pour 'Recolorier' une image

Bonjour à toute la team

Je suis en train de créer mon tout premier jeu sur Excel et c'est super fun !!

Ce que je recherche n'est pas dispo avec la fonction 'enregistrer une macro', c'est pourquoi je viens solliciter un petit coup de main.

J'utilise déjà msoPictureGrayscale et msoPictureAutomatic qui fonctionne bien.

Function DisableInvincibleMode()

    PacIsInvicible = False
    ActiveSheet.Shapes.Range(Array("pac")).PictureFormat.ColorType = msoPictureAutomatic

End Function

Function EnableHungryMode()

    ' Fonction pas encore utilisé
    PacIsHungry = True
    ' Je cherche à mettre une autre couleur que grayscale ( voir une autre méthode )
    ActiveSheet.Shapes.Range(Array("pac")).PictureFormat.ColorType = msoPictureGrayscale
    Application.OnTime Now + TimeValue("00:00:05"), "DisableHungryMode"

End Function

Je souhaites avoir le code VBA pour 'recolorier une image', j'ai testé pas mal de choses, rien de fonctionnel ( RGB etc ... )

Je met mon fichier complet, toute aide et suggestion sera la bienvenue, merci beaucoup

1'307pac-man.xlsm (240.50 Ko)

Bonsoir à tous,

Ayant cherché de nouveau sans succès j'ai contourné le problème avec mode de jeu différent.

Mais je suis toujours preneur d'une méthode pour 'recolorier' une image !

Le code est super bien avancé et le jeu fonctionnel à 100%, reste à ajouter quelques difficultés selon les dires des mes enfants

<"code ialement"/>

Bonsoir,

une astuce pour ne pas avoir la tête à l'envers : ActiveSheet.Shapes("Pac").Flip msoFlipHorizontal

@ bientôt

LouReeD

Une autre chose, je crois que le Application.onTime n'est précis qu'à la seconde près, non ?

Pour la vitesse des fantômes, comment faites vous pour augmenter leur vitesse ? J'ai Joué, mais on ne peut pas les manger ?

@ bientôt

LouReeD

Bonsoir,

ci joint votre fichier avec le PacMan jaune qui devient vert s'il entre en contact avec un fantôme. Cette couleur est issue d'un RGB !

Mais comment ai-je fait ? En me posant les bonnes questions

En fait j'ai "dessiné" un PacMan avec des formes "Shapes" que j'ai groupé, car je connais le code VBA pour en choisir la couleur avec le RGB :
ActiveSheet.Shapes("PacMan").Fill.ForeColor.RGB = RGB(255, 0, 0)

Regardez également la simplicité du code en appelant directement le nom du shape sans passer par Range ni Array !

Encore plus simple est d'attribuer le shape à une variable avec SET et à ce moment là c'est encore plus court :

Dim PacMan as Object
Set PacMan = ActiveSheet.Shapes("PacMan")
PacMan.Fill.ForeColor.RGB = RGB(255, 0, 0)

Votre fichier avec ce nouveau PacMan :

1'333pac-manlrd.xlsm (237.53 Ko)

Pour la rotation horizontal il y a beaucoup de code à changer...

@ bientôt

LouReeD

Bonjour,

Merci pour toutes ces réponses intéressantes et constructives !

Je vais regarder tout ça de plus près et je reviendrais faire un petit retour :)

Re Bonjour,

Donc, oui c'est excel-lent la méthode Flip, beaucoup plus joli !

Très bien aussi la méthode Fill, j'ai fait comme sur ton modèle, créé un pacman à partir de shapes , c'est exactement ce que je voulais, merci beaucoup !!

Pour la tempo, oui à la seconde malheureusement ...

J'ai tenté pas mal de choses pour accélérer le mouvement, bof !

Pour le moment je pense avoir une bonne base pour l'améliorer, le code est propre et le jeu fonctionnel, je le poste si tu veux voir

Merci pour le coup de main !

16pac-man.zip (781.42 Ko)

Bonsoir,

super le flip !
j'ai réussi à manger des fantômes ! Mais il y en a 3 qui sont entrés dans la "quatrième dimension" :

image

le jaune "en haut à droite", le rouge et le vert à gauche...

Sinon pour la limite de la seconde vous avez mon application ICI qui montre comment cela fonctionne pour pouvoir aller en dessous en utilisant les boucles Do Loop qui elles permettent d'aller au millième de secondes (en théorie) grâce au test sur le Timer qui lui est précis au millième :

Tempo = Timer
Do
    DoEvents
Loop While Tempo + 0.05 > Timer

Ici la boucle de temporisation tourne pendant 0.05 secondes.

@ bientôt

LouReeD

Bonsoir,

Très intéressant cette façon de procéder, simple à arrêter avec une condition, je vais tester la fluidité demain, merci !!

Pour ce qui est de la '4ème dimension', oui c'est volontaire, quand on mange un fantôme il va dans sa prison :)

De ce que j'ai compris du code, il faut intégrer la détections d'events à l'intérieur de la boucle, sinon on ne peut rien faire pendant son exécution !?

C'est à l'opposé de la structure de mon code je vais voir comment adapter ( tout casser )

Sinon oui j'ai testé c'est précis et on peut bien utiliser le 'temps' que l'on souhaites, merci !!

Bonjour

En effet c'est la structure même du code qu'il faut revoir...

L'idée de la boucle est qu'à chaque top chrono une action joueur et AI est faite mais le code est fait qu'en fonction de la vitesse de jeu du joueur ou de l'AI et bien leurs actions sont plus ou moins freinées. Ce qui fait qu'en fonction du niveau l'AI peut aller vraiment plus vite (moins d'une seconde) alors que le joueur reste à la même vitesse.

Le code est commenté en espérant que cela soit suffisant pour que vous vous l'approprier.

Bon courage !

@ bientôt

LouReeD

Bonjour,

Voilà le code modifié

Gestion de la vitesse des fantômes selon le nombre de 'points' mangés !

La pause m'a donné du fil à retordre: en effet la boucle relisait l'appuie de la touche espace une deuxième fois donc annulait la pause

Merci beaucoup pour l'astuce, c'est plus fun comme ça !! N'hésitez pas à me faire un retour sur le code ( et si on peut se tutoyer entre dév :) )

( j'ai du ne laisser qu'un seul niveau pour le poids du fichier limité ici )

10pac-man-light.zip (698.78 Ko)

<code'ialement/>

Bonsoir,

voilà qui est bien mieux !

Petite chose : empêcher le pacman de tourner quand il ne peut pas :

image

C'est purement esthétique ! Mais comme vous avez pris en compte le flip !
D'ailleurs je crois que dans "le vrai" il n'est pas possible de stopper la course du pacman juste modifier sa trajectoire, non ?

Quoi qu'il en soit, beau travail, et je vous rassure je suis loin d'être un développeur !

Par contre pour une compatibilité "totale" voici une correction du code pour l'appel des fonctions

#If VBA7 Or Win64 Then
    Private Declare PtrSafe Function GetAsyncKeyState Lib "User32" (ByVal vKey As LongPtr) As Integer
    Private Declare PtrSafe Function SetCursorPos Lib "User32" (ByVal x As Long, ByVal y As Long) As Long
    Private Declare PtrSafe Function GetSystemMetrics32 Lib "User32" Alias "GetSystemMetrics" (ByVal nIndex As Long) As Long
#Else
    Private Declare Function GetAsyncKeyState Lib "User32" (ByVal vKey As Long) As Integer
    Private Declare Function SetCursorPos Lib "User32" (ByVal x As Long, ByVal y As Long) As Long
    Private Declare Function GetSystemMetrics32 Lib "User32" Alias "GetSystemMetrics" (ByVal nIndex As Long) As Long
#End If

@ bientôt

LouReeD

Bonjour,

Merci pour ce retour, oui effectivement j'ai adapté le mouvement pour faire plus 'vrai'

Voici le code complet avec tous les niveaux créés ( pour jouer à un niveau en particulier il suffit d'entrer le N° du niveau en "A1" )

8pac-man3.zip (1.48 Mo)

J'imagine qu'on va aussi me dire que 'en vrai' le pacman retourne à son emplacement quand il a été touché par un fantôme

C'est corrigé !!

16pac-man4.zip (1.48 Mo)

Bonsoir

C'est marrant depuis peu vous avez le flip vertical !

@ bientôt

LouReeD

Bonsoir,

Comment ça ? un bug que je n'aurais pas vu ?

Le flip est juste horizontal, j'avais tenté avec le vertical en + mais l'effet ne me plaisait pas trop !

Sinon oui j'ai un gros travail de suppression de variables globales ...

<code'ialement/>

Bonsoir,

ne vous arrachez pas les cheveux !

Je parlais de ceci :

image

@ bientôt

LouReeD

Bonsoir,

si je peux me permettre il a le menton un peu en avant, non ?

image

Et sur le niveau 2 lors de la téléportation chemin de gauche vers chemin de droite, cette dernière arrive sur la cellule (je pense) qui déclenche la téléportation chemin de droite vers chemin de gauche et inversement et inversement.... On arrive à sortir du cycle mais il suffit d'arrêter le mouvement du Pac-Man et alors on se retrouve dans une spirale infernale ! Quand je vous parlais de quatrième dimension...

@ bientôt

LouReeD

Bonsoir,

perturbant le niveau 11 !

image

Le Pac-Man traverse les murs et les fantômes aussi !

La gestions des scores ?! J'ai perdu et je n'ai pas pu entrer mon nom !

Bonne éclate ! Par contre les niveaux avec les "peignes"... pas facile de réussir à tourner au bon moment. Il faudrait mettre en mémoire la direction anticipée du joueur, mais une seule, faut voir, il y a bien longtemps que j'ai joué au Pac-Man et je ne sais plus s'il gardait en mémoire la prochaine direction, ne serait-ce quelques instant afin d'avoir une petite facilité pour les "peignes". Je ne sais je lance des idées, remarques et autres, pas d'obligations à suivre !

@ bientôt

LouReeD

Rechercher des sujets similaires à "vba cherche methode recolorier image"