AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  Connexion  

Partagez | 
 

 Boucle infinie, comportement illogique, bref, pétage de plomb.

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
alio
Pas mal


Messages : 34

MessageSujet: Boucle infinie, comportement illogique, bref, pétage de plomb.   Mar 2 Juil 2013 - 21:52

Bonjour à toutes et à tous.

Comme tout amateur de jeux vidéos qui se respecte, je me suis penché sur la création de jeux et la programmation, il y a un petit moment déjà ... et je suis tombé la tête la première dans ce domaine passionant, comme beaucoup d'autres (vous vous reconnaissez ?).
Aujourd'hui, on peut dire que j'ai une assez bonne expérience en programmation : j'ai déjà monté ou participé à plusieurs projets qui ont plus ou moins aboutis et je maitrise des langages tel que le C et le C++ qui sont mes favoris et avec lesquelles j'ai beaucoup travaillé, surtout le C.

J'ai découvert Game Maker, un logiciel d'une puissance et d'une simplicité d'utilisation plus qu'étonnante, à mon avis le meilleur dans son domaine, à savoir la création de jeux 2D. Inutile de vous dire qu'il m'a été impossible de ne pas utiliser Game Maker pour mon nouveau projet, un jeux d'action en ligne. Je ne voudrais pas m'éterniser sur le sujet et de toute façon il me faudrait un post entier pour vous présenter mon idée, alors je vous passe les détails sur le jeu et préfère me concentrer sur l'essentiel. Sachez seulement qu'il s'appelle Escrime Game et qu'il devrait être disponible sur le web d'ici peu.

Entrons dans le vif du sujet: je poste ici pour la première fois (eh oui, encore un nouveau) car je rencontre un problème ... comment dire ? ... assez bizarre:
Je veux ouvrir une connexion avec la fonction mplay_init_tcpip(). Pas de problème, seulement il faut tester si elle a réussie en vérifiant si la valeur retournée par mplay_connect_status() est bien 2, soit "connexion TCP/IP" (selon http://gamemaker.info/fr/manual/413_01_connection ). J'affiche un message d'erreur dans le cas contraire, et tant que la connexion n'a pas été effectuée je redemande l'adresse IP du serveur et je réessaye de me connecter. Voici mon code :

Code:
do
{
      ip = get_string("Entrez l'addresse IP du serveur :", "127.0.0.1")    //On récupère l'adresse ip
      mplay_init_tcpip(ip)                                                 //On tente de se connecter
      statutConnexion = mplay_connect_status()                             //On récupère le statut de la connexion
      if (statutConnexion != 2)                                            //Si il est différent de 2, c'est qu'il y a une erreur
      {      
            show_message("Echec de la connexion au serveur")               //Dans ce cas on affiche un message
      }
}
until (statutConnexion != 2)                                               //Tant qu'il y a erreur on recommence

Vous pouvez tester le code et vous verrez si ca marche ou pas mais là n'est pas la question, le fait est que chez moi, ca ne marche pas, ne me demandez pas pourquoi, je n'en sais rien pour l'instant. Je penche pour un problème externe au programme genre pare feu qui bloque ou je ne sais quoi ... mais ça je suis sûr qu'une personne attentionnée passant par là aura l'amabilité de m'aider, du moins je l'espère.

Ca c'est le premier probleme, le second, plus bizarre, c'est que quand je teste le programme, il me demande à chaque fois l'IP du serveur ... une boucle infinie quoi. La vous allez me dire: c'est normal ! Tu dis : tant qu'il y a erreur, on redemande l'adresse et on tente de se connecter ! Game Maker fait simplement ce que tu lui demandes ! Sauf que vous oubliez un détail: en cas d'erreur le programme devrait m'afficher un message, et je peux vous assurer que chez moi, quand je teste, pas l'ombre d'un bout de message d'erreur n'apparait !

Ca veut dire qu'à cette ligne:
Code:

      if (statutConnexion != 2)                                            //Si il est différent de 2, c'est qu'il y a une erreur
      {      
            show_message("Echec de la connexion au serveur")
vu que rien ne s'affiche, la variable statutConnexion est FORCEMENT égale à 2.

Et ici, comble du paradoxe:
Code:
}
until (statutConnexion != 2)                                               //Tant qu'il y a erreur on recommence
Le même test, E-X-A-C-T-E-M-E-NT le même test, la variable statutConnexion est égale à 2, on le sait, on vient de le démontrer, rien ne s'est passé entre ces deux lignes, à part peut être l'intervention du saint esprit qui se demandait qui il pouvait bien faire c h i e r aujourd'hui (évidement c'est tombé sur moi triste) et le programme boucle la dessus p u t a i n ... pour lui le test est ... vrai ... Et la variable statutConnexion, tu te rappelles ? On avait pas dit qu'elle était égale à deux juste avant ? Bah nan mon gars, moi j'en ai rien f o u t r e de ta variable à deux balles (d'ailleurs tu sais ou tu peux te la mettre).

S'il vous plaît ! Dites moi que ce scénario ne peut pas être vrai ! Désolé pour le petit écart mais il est tard et ce problème m'a vraiment usé, vous vous en doutez. Du coup je vous ai fait un joli post bien écrit, je suis en vacances, j'ai donc pu me permettre un petit pavé plutôt inutile maintenant que j'y réfléchi, à part peut-être pour me faire travailler mon francais mais sinon voilà. Si quelqu'un pourai (zut! j'avais fait un sans-fautes jusque là, et c'est le cas de le dire ...) m'aider ou me donner une piste si il en a le temps ce serai super sympa, merci d'avance à mon sauveur à lunettes clinoeuil

PS: J'ai espacé les gros mots pour qu'ils passent le filtre. Je sais, c'est pas bien, je suis méchant, je choque les plus jeunes ... mais bon les plus jeunes, ils ont rien à faire là et je trouve le texte moins expressif sans, comme amputé d'un membre important, à savoir le troisieme doigt de la main en partant du pouce. Nan et puis par nature je déteste la censure. guns
Revenir en haut Aller en bas
D-z
Utilisateur confirmé: Rang *****
avatar

Messages : 1608
Localisation : Montpellier

MessageSujet: Re: Boucle infinie, comportement illogique, bref, pétage de plomb.   Mar 2 Juil 2013 - 22:39

Si tu observe le footer de ta boucle, tu remarqueras que ce n'est pas un do while comme en C, mais un do until, "faire jusqu'à". Inverse donc ta condition ;)

_________________
 
Home is not a place, it's a feeling.
Revenir en haut Aller en bas
alio
Pas mal


Messages : 34

MessageSujet: Re: Boucle infinie, comportement illogique, bref, pétage de plomb.   Mer 3 Juil 2013 - 9:41

Ah oui d'accord, c'est vrai que je suis tellement habitué au do ... while que le do ... until, j'ai même pas imaginé une seconde que ca pouvait exister.
Bah merci beaucoup, mon probleme est resolu du coup.
Code:

b) Le do until


Il s'agit ici simplement d'une variante du while. On effectue d'abord une fois toutes les actions présentes dans la boucle puis ensuite on teste si la condition est vraie, dans ce cas on réeffectue les actions jusquà ce que la condition ne soit plus vérifiée.La syntaxe se présent ainsi:
Do
{
//actions
//actions
//actions
}
until(condition)
http://www.lecbna.org/pages/tuto_list.php?subaction=showfull&id=1239568315&archive=&start_from=&ucat=11&
Apparement je ne suis pas le seul à m'être planté ...



Revenir en haut Aller en bas
D-z
Utilisateur confirmé: Rang *****
avatar

Messages : 1608
Localisation : Montpellier

MessageSujet: Re: Boucle infinie, comportement illogique, bref, pétage de plomb.   Mer 3 Juil 2013 - 10:44

Il est vrai que très peu de langage utilisent cette syntaxe :)

_________________
 
Home is not a place, it's a feeling.
Revenir en haut Aller en bas
Contenu sponsorisé




MessageSujet: Re: Boucle infinie, comportement illogique, bref, pétage de plomb.   

Revenir en haut Aller en bas
 
Boucle infinie, comportement illogique, bref, pétage de plomb.
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» boucle de ceinture
» mauvais comportement à la garderie
» Agoraphobie, phobie sociale: Maladie ou trouble du comportement?
» Les Femmes du 6ème étage
» Dechavanne, hyperactif ou fêtard?

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Forum Le CBNA :: Développement :: Entraide débutants-
Sauter vers: