Modification couleur d'un caractère

Fermé
Julien253 - 17 avril 2018 à 21:01
 critou - 17 avril 2018 à 23:37
Bonjour,
je programme actuellement un jeu avec le langage python mais je rencontre quelques problèmes, le joueur est modélisé par un caractère "O" se déplaçant dans une grille, j'aimerais faire prendre plusieurs couleurs à mon joueur (Rouge, Jaune, Bleu), la couleur du caractère doit être incrémenté a chaque appui sur une touche par l'utilisateur mais je ne vois pas vraiment comment m'y prendre, j'avais pensé à utiliser une liste dans laquelle rentrer les codes correspondant à chacune des couleurs pouvant être prises par le joueur puis à naviguer à travers cette liste pour sélectionner la couleur prise par le joueur...j'espère n'avoir pas été trop imprécis dans ma question, j'espère que quelqu'un pourra m'éclairer un peu plus sur la manière de réaliser cette fonction, toute aide sera la bienvenue,
Merci beaucoup


A voir également:

1 réponse

Bonsoir.

La solution la plus basique est d'utiliser une simple fonction et un modulo.

couleurs = ('#ff0000', '#ffff00', '#0000ff')
index_couleur = 0
def generer_couleur():
    global index_couleur
    couleur = couleurs[index_couleur%len(couleurs)]
    index_couleur += 1
    return couleur


Mais ce n'est pas ce qu'il y a de mieux à faire, car cela nécessite d'utiliser une variable hors de la fonction.

On peut alors fourrer tout cela dans une simple classe pour rendre cela un peu plus propre.

class Couleurs:
    def __init__(self):
        self.couleurs = ('#ff0000', '#ffff00', '#0000ff')
        self.len = len(self.couleurs)
        self.index = 0
        
    def __next__(self):
        couleur = self.couleurs[self.index%self.len]
        self.index += 1
        return couleur

couleurs = Couleurs()
for _ in range(5):
    print(next(couleurs))


J'ai utilisé ici la méthode __next__ pour obtenir la couleur suivante, mais tu peux utiliser ce que tu veux comme nom de méthode, get, couleur, etc.

Mais en python, il y aussi les générateurs qui s'utilise avec le mot clef python yield.

def generer_couleurs(couleurs):
    i = 0
    while True:
        try:
            yield couleurs[i]
        except IndexError:
            i = 0
            continue
        i += 1

couleurs = ('#ff0000', '#ffff00', '#0000ff')
couleur = generer_couleurs(couleurs)
for _ in range(5):
    print(next(couleur))


Comme tu vois, il y a de multiples façons de procéder, la 1ère étant à éviter amha.
0