Syht / StochPong

1 stars 0 forks source link

Stochastic bounces #7

Closed Syht closed 7 years ago

Syht commented 7 years ago

As stated in "a game with different levels" post, I managed to ensure that the bounces on bricks have a 1/2 chance (customisable) to normally bounce or bounce the other way.

But now I'm having a hard time trying to assign probabilities to brick color. The fact is that bricks are all processed the same way, independently of their color. The interaction Ball/Bricks is described in class Ball; def move; section #destroy bricks, whereas the brick color is assigned in main(). I think it might be possible to do what we want to but I didn't manage to do it today and I hardly have a clue on how to do so. If you have any thoughts or suggestions!

PS: An alternative I thought of is to set each probabilities (1/4, 1/2, 3/4, etc..) on the level we're in instead of the color of the bricks. That, I think I can do. Is it contrary to what we want? What do you think?

laurentperrinet commented 7 years ago

As you instantiate any new brick, you can assign it a new attribute such as self.color at random

Then you may use a dictionnary to convert this attribute to a probability...

My 2 cents :-)

Syht commented 7 years ago

Bon, je m'arrache les cheveux depuis deux jours, mais je pense avoir une piste de solution.

ligne 241

            # top [(]) bottom
            if brick.rect.top < oldrect.top < brick.rect.bottom < oldrect.bottom:
                self.rect.top = brick.rect.bottom
                self.setint()
                down = 1
                **if Brick.colortype[3]:**
                    **right = -1**

ligne 259

class Brick(pygame.sprite.Sprite): def init(self, arena, x, y, color): pygame.sprite.Sprite.init(self, self.containers) self.image = self.images[color] self.rect = self.image.get_rect() self.rect.left = arena.rect.left + xself.rect.width self.rect.top = arena.rect.top + yself.rect.height def colortype(self): Brick.couleur = self.color return Brick.couleur

Donc, j'ai mis en gras ce que j'essaye de rajouter pour assigner une couleur à un rebond spécifique (ici right = -1 fera repartir la balle d'où elle vient). La class Brick prend comme argument dans le main() :

Brick.images = spritesheet.imgsat([(2, 193, 55, 20),
                                                        (2, 225, 55, 20),
                                                        (2, 257, 55, 20),
                                                        (2, 289, 55, 20),
                                                        (66, 193, 55, 20),
                                                        (66, 225, 55, 20),
                                                        (66, 257, 55, 20),
                                                        (66, 289, 55, 20)])

qui permet de localiser l'image des bricks (donc leur couleur) dans la spritesheet. Lors de la création du lvl, ces 8 couleurs sont numérotés de 1 à 8 (par exemple : rouge = 3). Je cherche donc à récupérer l'information sur la couleur grâce à l'index de la list afin de mettre le if qui permettra de gérer la proba en fonction de la couleur. J'ai donc, entre autre, essayé de sortir l'information 'color' de la class Brick afin de pouvoir l'utiliser dans la class move, mais sans succès. J'ai le sentiment que je suis sur la bonne voie mais je n'arrive pas à trouver d'informations concluantes sur le net. Pourrais-tu y jeter un coup d'oeil plus en détails quand tu as le temps ? Je vais continuer à chercher de mon côté et fermerai cet issue si jamais j'y arrive. Merci d'avance !

Edit : Je commence vraiment à penser que ce n'est pas possible de retrouver la couleur de la brick que l'on percute afin de faire ce que l'on souhaite. Je me répète mais les fonctions qui gèrent la destruction des bricks et le rebond de la balle (cf. class Ball) n'utilisent pas d'information de couleur. J'ai bien l'impression qu'il n'existe que des Bricks qui sont toutes régies par les mêmes règles et que les couleurs sont juste un affichage, totalement séparé du comportement de la balle. Je ne trouve pas comment faire et aurais bien besoin d'aide !

bwicker commented 7 years ago

Est ce qu'on ne peut pas remplacer la brique par une image ou une texture, sinon on peut trouver un autre moyen pour différencier les briques, forme différentes par exemple ?

laurentperrinet commented 7 years ago

a priori le problème de lier un attribut (une couleur, ...) de brique a un comportement est résolu maintenant... Thys, tu confirmes?

bwicker commented 7 years ago

​ah ok désolé ! Tant mieux si c'est résolu ! Bruno​

2017-05-25 15:38 GMT+02:00 Laurent Perrinet notifications@github.com:

a priori le problème de lier un attribut (une couleur, ...) de brique a un comportement est résolu maintenant... Thys, tu confirmes?

— You are receiving this because you commented. Reply to this email directly, view it on GitHub https://github.com/Syht/StochPong/issues/7#issuecomment-304012134, or mute the thread https://github.com/notifications/unsubscribe-auth/AbPMZBcgmI1QXGCqmsZwd1BIG71ndWDeks5r9YRdgaJpZM4Nd7GJ .

-- Bruno Wicker, PhD.

Laboratoire de Neurosciences Cognitives. CNRS & Aix-Marseille Université 3, place Victor Hugo 13331 Marseille cedex 3

Tel : +33(0)413550900 Fax : +33(0)413550958

Syht commented 7 years ago

Tout à fait !! Merci beaucoup Laurent, ça marche parfaitement. Grâce à vous j'ai maintenant accès à la couleur de la brique percutée par la balle. On peut donc associé à chaque brique la probabilité de rebond que l'on souhaite. Je suis un peu triste de voir que la solution à mon problème était plus simple que tout ce que j'ai pu tenter de faire ! Mais très heureux d'être enfin débloqué ! Je ferme l'Issue.

laurentperrinet commented 7 years ago

oui, toute la force de la programmation objet est la flexibilité de pouvoir "coller" des variables à des objets, comme tout naturellement... une couleur à une brique: self.color ! maintenant on va pouvoir spécifier leur comprtements (j'ai fait un comportement très aléatoire pour tester...)