Ouaip j'avais fini par trouver et corriger dans ma dernière mouture avec un code plus propre, merci
Ouaip j'avais fini par trouver et corriger dans ma dernière mouture avec un code plus propre, merci
J'aimerais créer une couverture plus tard aussi mais faudra que je me plonge dedans. Et puis là je vise surtout le point de mouvement supplémentaire dès que possible, mais j'ai peur que tout ce temps à économiser de l'xp me rende vraiment naze par rapport aux poireaux de mon niveau qui auront tout dépensé.
Uh la loose.
J'étais parti dans le développement de mon truc et au bout d'une heure je me rend compte que le simple fait de vérifier si une case est un obstacle, demande d'être lv 21. Tout tombe à l'eau.
J'ai fait du H&R en fait c'est marrant , au final v'la mon script :
Code:function hitAndRun(cible) { while(getCellToUseWeapon(cible) != getCell() && getMP() > 0) moveToward(cible,1); //On est pas à portée et on a encore des points de mouvement while(useWeapon(cible) == USE_SUCCESS); if(getMP() > 0) moveAwayFrom(cible);//Il nous reste des MP, on recule. }
Napa.
En effet c'est plus propre que moi. Par contre ton while USE_SUCCESS risque de stopper ton action si tu foires un tir (sur le pourcentage d'échec possible de l'arme) aussi non ?
J'ajouterais :
Qui devrait permettre de retenter de tirer après un miss.Code:while(useWeapon(enemy) == USE_SUCCESS || USE_FAILED);
Ouais c'est pas faux, je vais le rajouter .
En fait ca serait plus logique de faire :
Mais je suis pas sur que si la cible n'existe pas ou qu'elle est invalide ça nous enlève des TP :/.Code:while(useWeapon(enemy) != USE_NOT_ENOUGH_TP);
Napa.
Ouais bah ça marche pas, je viens d'avoir un fail et il a pas tiré une seconde fois...
On ne perd de TP que si le résultat de useWeapon est USE_SUCCESS ou USE_FAILED (en somme si le poireau pouvait effectivement tirer sur l'enemi en paramètre). Du coup, si ton ennemi n'est pas à portée, tu as une boucle infinie.
Par contre je dois avouer que je ne comprends pas pourquoi il tire une première fois et pas une seconde fois. Peut-être que le script n'aime pas les boucles while sans accolades ?
Bon c'est la merde. Mon script fonctionne très bien, sauf quand l'ennemi est amorphe.
Résultat mon bot veut pas se mettre en danger et reste à la limite de portée d'un adversaire qui bouge pas, et comme j'ai pas encore accès aux nombre de tours, bah il se pass rien et match nul.
J'ai suivi le conseil de la première page pour me créer une variable globale qui compte les tours.
En début de code :
Et à la finCode:global tour = 1;
Donc par exemple mon taunt de premier tour est fait comme ça :Code:tour++;
Code:if (tour == 1) say("Bonne chance camarade " + getName(getNearestEnemy()) + " !");
L'est frustrant ce jeu, t'as plein d'idée qui te viennent en tête, tu commences à réfléchir dessus et tu te rends compte que tu peux rien faire sans des fonctions qui se débloques plus tard.
Donc t'améliores ton bot avec ce que tu peux, ça marche nickel en test. Puis tu te rends compte que c'est foireux quand tu tombes sur des originaux et que tu peux pas régler les bugs avant de débloquer de nouveaux trucs.
Ouaip : http://www.leekwars.com/help
La même ici avec mon poireau qui restait bloqué. Au final, si à la fin du tour il me reste des MP, je les dépense en avançant
Tu peux aussi faire un globale qui en fin de tour prend la cell de l'ennemi, que tu compares le tour d'après avec sa position actuelle pour vérifier s'il a bougé
En plus, ce qu'il faut savoir, c'est que les purs devs (genre ceux qui font du C++) sont à se prendre la tête pour avoir un code joli, mais derrière qui ne marche pas
Mention spéciale à un canard que je ne citerai pas qui, à 23h58 (le compteur de combat est réinitialisé à 00h00) n'avait toujours pas de code fonctionnel, et qui nous sort comme excuse, qu'il a malencontreusement supprimé son script
Sinon, va falloir commencer à penser à la stratégie d'équipe :
- Définir les cibles prioritaires
- Se diviser en deux équipes avec 4 attaquants et 2 supports
- Trouver un moyen pour que les supports restent toujours hors de portée des ennemies et à portée de chip des attaquants
- ???
- Profit !
Je peux pas voir le chat d'équipe derrière le proxy de l'école .
Et pourtant je préfère programmer un poireau que faire du php
N'empêche que ma nouvelle IA déboîte pas mal.
Apres, le language a quelques spécificités un peu chelou. Genre nulle == 0 (c'est plutôt classique mais comme les identifiants de poireaux ou cellules sont des entiers et que 0 est un id valide, c'est trompeur), ou [] == null == [1,2,...] == "123", ou encore des fonctions bugguees comme subArray. Mais une fois qu'on le sait ça va.
"Dieu est mort" · "Si le téléchargement c’est du vol, Linux c’est de la prostitution."
Ouais, y'a 2 3 trucs bizarres, perso, j'ai une boucle qui plante à la fin si je bute le poireau adverse. Et pourtant, j'ai bien mis un isAlive avant (mais non, il essaie de chopper une distance entre ma Cell() et celle de null). Sinon, petit bug sur le match : http://leekwars.com/fight=152110
Je suis sensé focus Patatheal, et il focus sur Patator.
Edit :
Ouais, c'est peut-être ça.PeaK
9:18
Je me posais la même question, moi aussi j'ai focus Patator...
Ce serait pas à cause du "if target == null --> target = enemies[i]" ? Si Patatheal est le leek 0, on le remplace...
Ceci dit, vu le nombre de TP qu'on possède, on tire au max 2 fois. Je ne pense pas que ça vaille le coup de faire des boucle while potentiellement infinie.
C'est presque plus simple de faire :
En plus par la suite tu seras amené à étudier plus minutieusement le résultat du 1er tir pour choisir une 2ème action qui ne sera pas forcément un tir, ou alors pas avec la même arme.Code:var ret = useWeapon(enemy); if (ret == USE_SUCCESS || ret == USE_FAILED) { useWeapon(enemy); }