Je ne pense pas que le fait de passer le parent dans un constructeur soit une bonne idée. Au lieu de cela, vous devriez utiliser une classe qui maintient une liste de tous les éléments de jeu et des interactions d'installations entre eux; par exemple, la classe de jeu illustrée ci-dessous permettrait de vérifier les collisions entre deux joueurs et si elle est détectée, dites à chacun d'eux qu'ils ont été touchés et par qui. Je ne suis pas sûr si cela vous sera bénéfique, mais je l'ai tapé pour ma première réponse, donc je pourrais aussi soumettre. Notez que tout cela est toujours pertinent si vous parlez d'un jeu en mode texte, ignorez simplement les allusions aux graphiques dans ce cas. La conception du jeu est basé autour d'une boucle de jeu continue, et peut être considéré tout simplement comme:
while(true)
for each tick:
react to user input
update player, enemies, objects, etc.
end while
Où « tick » est chaque itération de l'horloge de jeu, mais vous choisissez de mettre en œuvre - sur la base des images par seconde , chaque seconde, peu importe. Dans votre exemple, l'utilisateur clique sur le ballon de football, le jeu voit le clic et demande au football de se déplacer. Pour ce faire très simplement, maintenez une liste de tous les éléments du jeu dans une classe qui maintient l'état. Pour illustrer, voici est une façon très simple, vous pouvez mettre en œuvre ceci:
class Game {
vector<GameElement> elements;
Football football;
Player currentPlayer;
Game() {
this.football = new Football();
}
void update() {
for e in elements:
e.update();
// Once every element has been updated for the current tick, redraw them on the screen
screen.redraw();
}
void addElement(GameElement e) {
elements.add(e);
}
}
class GameElement {
int posx, posy; // screen coordinates
void paint() {}; // method to draw this element to the screen
virtual void update();
}
class Football: public GameElement {
bool kicked;
int anglex, angley;
double velocity;
void update() {
if(kicked){
// update position, angle, velocity; slow it down, check for bounce, whatever
posx = new x position;
posy = new y position;
if(velocity == 0)
kicked = false;
}
paint(); // call the paint method after the new position has been found
}
}
Supposons que vous avez une autre classe qui hérite de GameElement, joueur, avec un coup de pied de la méthode (de football) qui définit le ballon passé dans motion-- c'est-à-dire, définit kicked = True. Donc, pour initialiser le jeu, vous souhaitez le configurer avec quelque chose comme:
Game game = Game();
game.add(new Football());
game.add(new Player());
while(true) {
if(user_input==X)
game.currentPlayer.kick(football);
game.update();
sleep(1);
}
Cela pourrait être changé pour maintenir, par exemple, des couches au lieu de l'ensemble du jeu, puis une classe de niveau supérieur pourrait appeler la mise à jour de chaque Couchez dans l'ordre, permettant aux objets d'être peints les uns sur les autres et aux enfants d'interagir uniquement avec leurs frères et sœurs. Il y a beaucoup de possibilités.