[C++] Boucles independantes

Résolu/Fermé
Mastaking Messages postés 35 Date d'inscription samedi 10 mars 2007 Statut Membre Dernière intervention 5 septembre 2011 - 19 déc. 2008 à 20:44
hamzafes Messages postés 243 Date d'inscription lundi 26 juin 2006 Statut Membre Dernière intervention 4 mai 2013 - 19 déc. 2008 à 22:12
Bonjour,

Je suis actuellement en train de coder un petit jeu (spaceinvaders) en C++ mais je suis confronte a un probleme au niveau des boucles.

J'ai en gros, une condition qui fait tourner ma boucle tant que l'utilisateur n'appuie pas sur "echap".
Mais le probleme est que les actions liees a la touche appuyee par l'utilisateur s'effectuent de maniere sequentielle.
Ainsi, il ne peut pas bouger le vaisseau tant que l'animaation du laser n'est pas terminee, de meme il ne peut pas lancer un deuxieme laser en meme temps etc.

Je sais qu'il est possible de faire "tourner" une boucle independament d'une autre dont elle peut dependre.
Si quelqu'un a une idee....

je vous donne une partie de mon code pour que vous voyez :

while(hit!=27){

cout.flush();

hit = getch();

if(hit == 224){

hit = getch();

switch(hit){

case 75 :

if(ship.coord.getPositionX() >= 33){
ship.modifierPosition('k');
ship_part2.modifierPosition('k');
}
break;

case 77 :

if(ship.coord.getPositionX() <= 108){
ship.modifierPosition('l');
ship_part2.modifierPosition('l');
}
}
cout.flush();
}

else if(hit == 32){

laser.startLaser(ship.coord.getPositionX()+5);

for(int i = 0 ; i < 57 ; i++){
laser.putLaser();
laser.moveLaser();
laser.putLaser();
Sleep(5);
}
}

else {

switch(hit){

case 'k' :

if(ship.coord.getPositionX() >= 33){
ship.modifierPosition('k');
ship_part2.modifierPosition('k');
}
break;

case 'l' :

if(ship.coord.getPositionX() <= 108){
ship.modifierPosition('l');
ship_part2.modifierPosition('k');
}
}
cout.flush();
}

cout.flush();

}

Ecran.gotoXY(1, hauteur);







ce code fonctionne mais le probleme est que je veux rendre la boucle gerant l'animation du laser independante de la boucle principale.
Merci pour votre temps !

2 réponses

Mastaking Messages postés 35 Date d'inscription samedi 10 mars 2007 Statut Membre Dernière intervention 5 septembre 2011 14
19 déc. 2008 à 21:00
Probleme resolu,
Je pense que je devrai me reposer un peu :p

Je donne cependant la solution au cas ou une personne tomberai sur le meme "probleme".

en fait c'est tout simplement impossible a moins de lancer un autre "main" dans un system multi-thread, mais ce n'est de toute facon pas ce que je voulais faire donc....
Il suffit de decomposer son(ses) animations et de les ordonnee en fonction de leur "Grandeur" et de leur frequence.
Cela peut paraitre confu (D'autant que je n'explique pas forcement bien) mais en gros si dans mon cas, j'ai un vaisseau dont l'affichage est gere dans une boucle principale (donc qui le reaffiche avec un temps de latence relativement faible) et bien la position "statique" de ce vaisseau n'est qu'un loeur, que j'ai genere et dans lequel je suis moi meme tombe lol. Il faut creer donc l'animation du laser dans l'animation du vaisseau, des animations imbriques ens somme.
Pour ceux qui on du mal a voir ce que je dis ---> eviter des boucles dans votre boucle principal, au contraire utilisez votre boucle principale comme boucle d'animation pour votre animation.

Je sais je sais, je ne suis pas clair du tout mais j'espere avoir eclaire au moins un eu ceux qui tomberont sur le meme probleme.

Merci en tout cas a ceux qui ont pris de leur temps pour tenter de m'aider.
1
hamzafes Messages postés 243 Date d'inscription lundi 26 juin 2006 Statut Membre Dernière intervention 4 mai 2013 54
19 déc. 2008 à 22:12
Utilise des threads, ils permettent d'exécuter plusieurs tâches en "parallèle"
Essayes l'expression "C++ threads" sur un moteurs de recherche
0