Bonjour,
Je développe un pong en C++/SDL2 et je souhaiterai le faire correctement.
J'ai lu avec attention le livre Coder Efficacement.
J'ai ainsi crée des classes: ball, paddle, collision, et la classe pong.
Si j'ai bien suivi les cours, normalement, ball, paddle n'ont pas vocation à connaître la taille de la fenêtre dans lequel ils évoluent.
Si je veux placer la balle au milieu de l'écran (une fois qu'elle est sortie du cadre) je vais alors lui indiquer le milieu de l'écran lorsque je vais appliquer la fonction pour placer la balle à partir de la classe pong qui connaît la taille de la fenêtre via deux variables screenX et screenY:
void Ball::resetBall(int posX, int posY);
appelée ainsi
ball.resetBall(screenX/2, screenY/2);
Mais si je regarde ma classe collision, elle a besoin des informations sur la fenêtre.
Alors comment je dois lui les donner ?
J'ai des pistes, mais que valent-elles ?
0) je passe par paramètre ces infos comme le cas ci dessus (mais alors je vais avoir des fonctions avec des arguments à rallonge)
1) Au constructeur au moment de son initialisation ? Mais ce n'est pas modifiable pour plus tard, donc je serais obligé de faire le 2) ?
2) Je crée une fonction
void init(int size_x, int size_y)
qui recupère size_x et size_y et si je modifie la taille de la fenêtre, je rapplique init avec les nouvelles tailles ?
Or la classe collision aura en mémoire les deux variables size_x et size_y, ce qui est de la duplication ...
3) Je crée une classe singleton (une grosse variable globale en fait) que j'invoque à chaque fois que j'ai besoin d'une information size_x ou size_y ?
C'est propre cela ? 
...
Car oui, c'est pong, mais si je crée une classe score qui doit afficher les scores, il me faudra bien la aussi connaître la taille de la fenêtre
Si size_x et size_y sont figées durant toute l'exécution du programme, on peut penser à 1° ?
mais si après on veuille pouvoir la redimensionner en cours d’exécution, on se retrouve avec une variable qui change presque jamais. (mais qui parfois peut changer)
Comment faut il faire pour passer ce genre d'information ?
Partager