Comparer la valeur de deux objets (cartes)


#1

Bonjour à tous,
je suis en train de créer un jeu de carte dont le but est de comparer 2 cartes qui s’affichent de manière random. Il y en a une à gauche, l’autre à droite. Au milieu il faudra sélectionner = ou < ou >.
Je débute dans le game. Pour le moment j’ai attribué une valeur aux cartes qui s’affichent, mais je ne sais pas comment comparer ces valeurs pour pouvoir valider ou non le choix du joueur.

Auriez-vous une petite idée de la procédure s’il vous plait ?


#2

Salut,
Tes cartes sont des objets différents, des animations différentes d’un même objet, ou juste du texte ou … ?
Dans GDevelop, il y a un projet exemple qui s’appelle “pairs”. Peut-être que tu devrais y jeter un œil. :slight_smile:


#3

Bonjour Gruk, merci de m’avoir accordé du temps!
Mes cartes sont des objets différents, elles sont compilées dans un groupe d’objets.
En faisant un clique souris elles apparaissent sur le plateau de manière aléatoire (le programme fait un choix aléatoire dans le groupe d’objet), toujours une à gauche et une à droite. Peut-être que je devrais m’y prendre autrement?


#4

Non non, ça va.
Il faut que tu attribues des variables d’objet (clic-droit sur l’objet dans la liste) avec la valeur de chacune, je pense.
Ensuite, tu utilises les conditions de variables pour récupérer les valeurs des cartes et les comparer.
Dans ce style :
image


#5

Parfait, c’est là que je bloque, mais tes indications me permettent de comprendre plein de choses!!
En fait, je ne sais pas comment récupérer la valeur des cartes. Peut-on le faire en fonction de leur coordonnées?
Doit-on créer une zone pour repérer la valeur de l’objet qui s’y trouve?


#6

Ah, je crois que je vois ce que tu veux dire.
Tu peux créer une variable d’objet CarteActive qui sera à 1 tant que la carte est affichée, par exemple.
Ou si tu veux les distinguer, CarteGauche et CarteDroite, par exemple.

Ou tu peux aussi utiliser la position de la carte, effectivement, si l’emplacement est fixe, ou créer un objet invisible avec lequel la carte sera en collision.
Plusieurs solutions s’offrent à toi. :blush:


#7

Je vois pas trop comment m’y prendre en partant de la position de la carte. Je pense que je coince sur la manière d’identifier une carte d’un groupe sur le plateau.
Il faut vérifier la valeur de la carte crée à partir du groupe cartegauche en position (x;y) et la comparer avec la carte crée à partir du groupe cartedroite en position (x;y). si la valeur de l’une est supérieure à celle de l’autre alors…
désolé si je ne suis pas claire.
En dessous, voici où j’en suis :blush:


#8

condition “point is inside object” : coordonnées 165:300 est dans Leftcards
action variable de scène : stocker la valeur de Leftcards dans une variable CarteGaucheActive.

Pareil côté droit, et ensuite tu compares CarteGaucheActive et CarteDroiteActive.


#9

OK j’avance doucement (désolé, je débute), je dois avoir des problèmes avec les expressions, j’en suis ici :slight_smile:


Je ne suis pas certain que cette formulation stocke bien la valeur attribuée à la carte active.
La dernière ligne de test de comparaison de valeur n’est pas concluante puisque mon objet “valider” n’apparait pas.
Il y a là aussi un un problème d’expression peut être.
Une fois ce problème règlé, j’imagine qu’il faut faire un reset des valeurs stockées à chaque tour?
Merci pour ton aide précieuse et ta patience!


#10

Pas de souci :slight_smile:
Tu utilises les actions de stockage permanent, ça sert à sauvegarder (highscore, niveaux débloqués, etc.).
Pour définir/modifier une variable, utilise une action de variable.

Ensuite, je vois que tu stockes une variable de scène “leftcards” mais l’as-tu définie ?
Il faut que tu utilises des variables d’objets. Tu attribues à chaque objet carte une variable (nommée “valeur” par exemple) et lorsqu’elle est affichée, tu copies sa valeur dans la variable de scène Carte…Active.

Change the scene variable CarteGaucheActive : set to Leftcards.Variable(valeur).