Voir le sujet précédent :: Voir le sujet suivant |
Auteur |
Message |
Sapeur-Goblin Floodeur prématuré
Inscrit le: 14 Oct 2009 Messages: 719 Sujets: 40 Spécialité en worldedit: Les bugs Médailles: 1 (En savoir plus...)
|
Posté le: 15/08/13 20:09 Sujet du message: Gros gros calculs |
|
|
Plop .
J'ai un ami - qui fait du gui, le pauvre - cherchant à résoudre des sudokus sur wc3.
Il a donc fait un algorithme qui marche plutôt bien, sauf que le limit op est assez vite atteint.
Au début il a donc utilisé des waits de 0 seconde pour reset la limite, mais la résolution prenait 15 minutes !
Donc je lui ai expliqué comment utiliser ExecuteFunc en gui, et... ça crashe.
Les calculs sont trop lourd, donc wc3 croit que c'est une boucle infinie.
Comment résoudre ça?
Tirlititi, dans l'exemple que t'avais donné, dans une conversation à propos du limit op, pourquoi ça crashait pas?
Est-ce que c'est parce que à l'intérieur de la fonction appelée en boucle tu faisais une autre boucle? _________________
|
|
Revenir en haut |
|
|
Tirlititi
Inscrit le: 21 Fév 2010 Messages: 1785 Sujets: 22 Spécialité en worldedit: La modestie Médailles: 1 (En savoir plus...)
|
Posté le: 15/08/13 20:16 Sujet du message: |
|
|
C'est pas censé crashé du tout. Le plus probable est que c'est un mauvais paramètre qu'il a utilisé dans "ExecuteFunc".
En gui, tu peux simplement utiliser "Execute trigger". _________________
|
|
Revenir en haut |
|
|
Sapeur-Goblin Floodeur prématuré
Inscrit le: 14 Oct 2009 Messages: 719 Sujets: 40 Spécialité en worldedit: Les bugs Médailles: 1 (En savoir plus...)
|
Posté le: 15/08/13 20:19 Sujet du message: |
|
|
Non non, j'ai vérifié. Le paramètre est bon dans ExecuteFunc : en ajoutant des waits de 0 seconde, on voit que tout fonctionne.
On a déjà testé avec Execute Trigger, et ça marche pas. _________________
|
|
Revenir en haut |
|
|
Tirlititi
Inscrit le: 21 Fév 2010 Messages: 1785 Sujets: 22 Spécialité en worldedit: La modestie Médailles: 1 (En savoir plus...)
|
Posté le: 15/08/13 21:27 Sujet du message: |
|
|
Ben c'est pas la limitop le problème alors...
Fais voir le code/déclo? _________________
|
|
Revenir en haut |
|
|
Sapeur-Goblin Floodeur prématuré
Inscrit le: 14 Oct 2009 Messages: 719 Sujets: 40 Spécialité en worldedit: Les bugs Médailles: 1 (En savoir plus...)
|
Posté le: 15/08/13 21:32 Sujet du message: |
|
|
Ca c'était pour le test de ExecuteFunc (je suis pas sûr que le code ait un sens :p) :
Mais de toute façon, quand un déclencheur appelle un autre qui lui même appelle le premier, le jeu crashe. Là c'est le même phénomène, non? _________________
|
|
Revenir en haut |
|
|
Tirlititi
Inscrit le: 21 Fév 2010 Messages: 1785 Sujets: 22 Spécialité en worldedit: La modestie Médailles: 1 (En savoir plus...)
|
Posté le: 15/08/13 22:58 Sujet du message: |
|
|
Non, le jeu freeze, y'a pas de fatal error (ou peut-être si on attend et que l'ordi ne peut plus allouer de mémoire vive, mais moi, ça a toujours freezé).
Mais là il devrait y avoir une fin dans la boucle quand le sudoku se termine ou qu'il ne peut pas aller plus loin. Essaie de voir ce qui se passe avec ces 2 tests différents :
- En rajoutant ça à la fin du testloop juste avant le "ExecuteFunc" (VarInt est une nouvelle variable initialisée à 0) :
Gui: | Trigger: Set VarInt = VarInt + 1 Partie - Display to All Players the text : String(VarInt) |
- En rajoutant ça au même endroit :
Gui: | Trigger: Set Int = 81 |
Je suppose que les variables X, Y et Bloc_Value sont initialisée ailleurs ? _________________
|
|
Revenir en haut |
|
|
Sapeur-Goblin Floodeur prématuré
Inscrit le: 14 Oct 2009 Messages: 719 Sujets: 40 Spécialité en worldedit: Les bugs Médailles: 1 (En savoir plus...)
|
Posté le: 16/08/13 11:52 Sujet du message: |
|
|
Citation: | Non, le jeu freeze, y'a pas de fatal error (ou peut-être si on attend et que l'ordi ne peut plus allouer de mémoire vive, mais moi, ça a toujours freezé). |
Chez moi ça crashe. Et chez mon pote aussi :s. C'est d'ailleurs pour ça qu'on a pas utilisé Run Trigger.
Pour le premier test que tu décris, ça n'affichera pas grand chose, le jeu crashe instantanément (aucun freeze avant) :p. Donc j'ai mis un wait pour éviter que ça crashe, et on voit bien la variable augmenter.
Le deuxième test arrête directement la boucle (et pas de crashe).
Citation: | Je suppose que les variables X, Y et Bloc_Value sont initialisée ailleurs ? |
Yep _________________
|
|
Revenir en haut |
|
|
Tirlititi
Inscrit le: 21 Fév 2010 Messages: 1785 Sujets: 22 Spécialité en worldedit: La modestie Médailles: 1 (En savoir plus...)
|
Posté le: 16/08/13 15:21 Sujet du message: |
|
|
Ben c'est que tu dois avoir raison, alors : c'est le fait qu'il y ait trop de calcul qui fait planter... C'est bizarre...
Parce que là, y'a que des opérations sur des entiers (y'a même pas de nombre négatif ou de division...) et ça peut pas crash en soi.
Du coup, tu peux toujours essayer avec un Timer(0) à la place du wait (tu peux ajouter l'event "TIMER expires" à TestLoop et remplacer ExecuteFunc par "Start TIMER that expires in 0.00 seconds as a un coup timer"). _________________
|
|
Revenir en haut |
|
|
Sapeur-Goblin Floodeur prématuré
Inscrit le: 14 Oct 2009 Messages: 719 Sujets: 40 Spécialité en worldedit: Les bugs Médailles: 1 (En savoir plus...)
|
Posté le: 22/08/13 20:24 Sujet du message: |
|
|
Ça semble fonctionner avec le timer!
Merci _________________
|
|
Revenir en haut |
|
|
|