Et bien pour ça il va falloir se débrouiller un peu elle ne va pas vous tomber tout cru
Je vous donne en passant des optimisations essentielles pour une "bonne" IA
Se cacher
Une bonne IA fait en sorte de prendre le moins de dégâts possibles et pour ça le mieux est tout simplement de se cacher intelligemment au lieu de fuir l’ennemi n'importe comment !
Pour cela la méthode est relativement simple :
-Récupérer toutes les cellules accessibles avec les MP qu'il nous reste (évitez en général de travailler avec getPathLength( . , . ) car cette fonction consomme beaucoup d'opérations)
-Faire de même pour l'adversaire
-Trouver une case accessible ou l'adversaire n'as pas de ligne de vue depuis toutes ses cases accessibles
Je vous laisse vous INSPIRER (pas copier non mais) du code proposé par pierrotdu18
https://leekwars.com/forum/category-7/topic-1922
Vous remarquerez que le code n'est pas au complet mais l'essentiel y est. Attention j'ai bien dit vous inspirez car il reste du travail a faire !
Dépatouillez vous pour vous cacher la où ça vous arrange le plus (le plus loin, le plus proche etc), ne pas se cacher derrière des alliés (qui peuvent bouger ou tout simplement former des zones facile pour l'adversaire), et encore prendre en compte le fait que si vous n’êtes plus a portée de l'adversaire, c'est tout comme si vous étiez cachés (presque...)
Allez ça je vous aide il suffit de rajouter getAliveAllies() en 3eme paramètre de
... lineOfSight(hisCell, myCell, getAliveAllies()) ...
Une fois cette étape faite, il est simple de créer une fonction similaire pour avancer sinueusement (avancer au plus possible tout en restant caché)
Optimiser les attaques en zone
Si ne pas prendre de dégâts, en faire le maximum est tout aussi important ! (Cette partie ne compte évidemment que pour les attaques de zone...)
Pour cela plusieurs méthodes existent (comme pour tout), je vous livre la mienne même si c'est loin d'être la moins gourmande en terme d'opérations elle marche très bien il s'agit de :
si on sait quel ennemi est visé
-récupérer toutes les cases où notre arme lui inflige des dégâts (pour cela il faut récupérer une zone d'une certaine taille autour de l'adversaire)
-enlever toutes celles trop loin pour que vous puissiez tirer dessus, celles ou depuis toutes les cases accessibles, vous n'avez aucune ligne de vue
-calculer les dégâts infligés aux ennemis en tirant sur chaque case de celles restantes
Pour calculer les dégâts totaux il faut ajouter chaque dégât infligé sur chaque personne qu'on touche en tirant sur la case en question (s'aider de getWeaponTargets(...) puis multiplier les dégâts par un coefficient avant de les ajouter au total
Ce coefficient doit (par exemple) être de -1 si c'est un allié qui est touché, 1 si c'est un ennemi, ensuite a vous de jouer avec (on peut considérer que toucher une invoc ennemie est moins important que d'infliger des dégâts a un ennemi, ou affecter un coeff de 0 si l'allié touché est une de nos invocs etc...)
Attention cependant a bien prendre les armures des ennemis en compte ainsi que la distance a la case sur laquelle on tire !
les dégâts que va subir l'ennemi se détermine selon
degats_de_larme*(1+getStrength()/100)*((100-getRelativeShield(ennemi))/100)-getAbsoluteShield(ennemi);
et la réduction de dégats selon la distance via
1-0.5*getCellDistance(celluleSurLaquelleOnTire, getCell(enemi))/rayon
Dernières optimisations
Bien sur il ne faut pas oublier que quand un ennemi n'a presque plus de vie, pas besoin d'utiliser son attaque la plus chère en PT pour l'achever testez donc si une attaque plus faible ne le tue pas a tous les coups.
Gérer les poisons qu'on a sur soit :
Celle la c'est cadeau parce que vous laissez la chercher n'a pas non plus beaucoup d’intérêt :
function getDegatsPoison(){
var dpoison=0;
for(var i in getEffects()){
if(i[0]==13) dpoison+=i[1];
}
return dpoison;
}
Vous voila parés à utiliser la puce antidote !
(De même utilisez la puce libération pour enlever les armures de l'adversaire...)
Vous avez a présent de quoi faire les bases d'une IA assez bonne (vous attendez pas non plus a tout casser avec ces seules optimisations) ! Voici une IA sur ce principe
https://leekwars.com/leek/4771 et franchement elle marche assez bien (pas non plus god tier hein me faites pas dire ce que je n'ai pas dit) au vu le nombre de lignes de codes assez bas (400 avec une optimisation digne d'un singe) ce qui reste vraiment bas devant les meilleurs IA qui dépassent les 4000 lignes (et oui y a des mecs qui sont vraiment chauds))
Dernier point : Allez sur le forum du jeu ! Vous trouverez pleins d'autres astuces etc !
Sur ce : bon jeu !
Citer : Posté le 06/07/2014 15:21 | #
Suppression de l'IA par Dark Storm (voir les messages suivants)
Citer : Posté le 06/07/2014 15:29 | #
En fait je trouve presque encore moins intéressant de mettre le fonctionnement de l'IA de manière aussi linéaire et textuelle, que du code... Le but comment l'as dit, est d'apprendre à réaliser une IA par soi même, pas d'apprendre un langage, c'est donc plus un problème d'algorithmique que de programmation, et ce que tu fournis c'est clairement un algorithme... Je pense que c'est tout autant mâcher le travail et sortir de l'intérêt du jeu, même si plusieurs personnes te l'ont demandé, je ne suis pas forcément pour, après, c'est simplement mon avis et personnellement je préfère expérimenter par moi même, même si cela peut s'avérer pas toujours ultra efficace :).
Citer : Posté le 06/07/2014 15:31 | #
Pareil, je trouve que le mieux est de tester soit-même, ce qui n'empêche pas quelques petits conseils. C'est pourquoi je ne copie pas vos codes.
Pong400
PierrePaCiseaux (CP400)
Les Triangles
Menu
ASCII
Nombres premiers
Citer : Posté le 06/07/2014 15:53 | #
J'ai rejoins votre avis, c'est pour cela que j'ai supprimé mon IA
Citer : Posté le 06/07/2014 15:53 | #
Ok .
Pong400
PierrePaCiseaux (CP400)
Les Triangles
Menu
ASCII
Nombres premiers
Citer : Posté le 06/07/2014 16:01 | #
Au fait, il s'agit plus d'un truc de team, mais comme les forums de leek sont down, je le dit ici : évitez de faire des combats d'équipe contre des bas niveaux : cela ne donne pas beaucoup d'XP et en plus c'est pas intéressant (exemple : combat un peu nul )
envie de plonger dans la mer pour ramasser des tresors? => ballon sea
envie de sauver l'univers dans un jeu avec une longue durée de vie? => saviors of the future
un add-in addictif avec plein de secret et de trophées => evasion survival
un shmup bien dur et sadique => saviors 2
merci a tout le monde pour son soutien
zelda prizm de smashmaster (en esperant qu'il puisse le finir)
les tests de marmotti
un RPG de dark storm
(dont je connais le nom, mais pas vous )Arcuz !Citer : Posté le 06/07/2014 16:23 | #
Je m'y suis mis aussi, ça à l'air sympa comme jeu !
Citer : Posté le 06/07/2014 16:46 | #
Au fait, il s'agit plus d'un truc de team, mais comme les forums de leek sont down, je le dit ici : évitez de faire des combats d'équipe contre des bas niveaux : cela ne donne pas beaucoup d'XP et en plus c'est pas intéressant (exemple : combat un peu nul )
Le problème c'est que toute l'après-midi on ne pouvait affronter que des team de niveau minimum 7 qui nous démontaient car on est niveau 4, alors c'était le seul moyen de gagner un combat...
Citer : Posté le 06/07/2014 16:49 | #
Comment on gagne de l'XP ?
Citer : Posté le 06/07/2014 17:19 | #
En combattant
envie de plonger dans la mer pour ramasser des tresors? => ballon sea
envie de sauver l'univers dans un jeu avec une longue durée de vie? => saviors of the future
un add-in addictif avec plein de secret et de trophées => evasion survival
un shmup bien dur et sadique => saviors 2
merci a tout le monde pour son soutien
zelda prizm de smashmaster (en esperant qu'il puisse le finir)
les tests de marmotti
un RPG de dark storm
(dont je connais le nom, mais pas vous )Arcuz !Citer : Posté le 06/07/2014 17:24 | #
Sinon, vous savez comment on renomme une IA?
Citer : Posté le 06/07/2014 18:31 | #
oui : tu cliques sur le nom de celle ci
sinon DS j'ai pas vu ton IA mais je pense que je vais faire à peu près la même : elle a l'air très interressante
-Mon Fall Down
-Mon jeu de mains
-Mon starwars
-Mon dessinatout
-Mon niaiseux version 2.0
-Mon niaiseux version 3.0
-Inferno
-Mon super labyrinthe (en cours)
-Mon call of duty en 3D
-Casion (avec Az)
Citer : Posté le 06/07/2014 19:42 | #
Je précise, le nom en noir juste en dessous de WARS
Citer : Posté le 06/07/2014 19:43 | #
Effectivement, merci
Citer : Posté le 06/07/2014 21:50 | #
Pour mon premier tournoi, je perds en demi-final ! (durant mon absence)
Pong400
PierrePaCiseaux (CP400)
Les Triangles
Menu
ASCII
Nombres premiers
Citer : Posté le 06/07/2014 22:27 | #
Article très intéressant : http://leekwars.com/forum/category-7/topic-176
Citer : Posté le 07/07/2014 21:44 | #
http://leekwars.com/report=344540, ou comment la beginner school gère 4 diaboliques 8) !
Pong400
PierrePaCiseaux (CP400)
Les Triangles
Menu
ASCII
Nombres premiers
Citer : Posté le 08/07/2014 17:17 | #
WTF ? Quand je relance un combat de la team des beginners contre les 4 diaboliques (des potes des 4 fantastiques) l'ID remplace le précédent match donc le lien vers le rapport donné par Legolas envoie maintenant sur mon combat de test (où on les a défoncés d'ailleurs).
Citer : Posté le 08/07/2014 17:21 | #
Yep, j'ai eu droit à la même chose ce matin.
Et pire encore : lorsque j'ai vu pour la première fois le message de Legolas, le match de test était celui de la Master School face à deux diaboliques. Rien à voir...
Citer : Posté le 14/07/2014 15:54 | #
Le lien marche pour moi .
Ajouté le 14/07/2014 à 15:55 :
C'est décidé, je suis un gros tank !
Pong400
PierrePaCiseaux (CP400)
Les Triangles
Menu
ASCII
Nombres premiers
Citer : Posté le 14/07/2014 19:48 | #
je m'y suis mis, j'ai déjà deux poireaux lvl 8-9 (je me suis fais deux comptes avec deux de mes nombreuses adresses mail), mais je n'ai pas encore trouvé comment rejoindre de team
(mon lvl 8 est boosté en vie et force et a un ration de 9.00 avec 54 victoires pour 6 defaites, mon lvl 9 est boosté en vie et force principalement, mais a quelques points en agilité et a un ratio de 3.33 avec 60 victoires pour 18 défaites)
-en C:
-Un pong.
-Un projet en pause. Je compte le reprendre de temps en temps: Summer Cursed
-mon tuto sur les Str
Mes calto: G25+, G75
Mon minecraft en dévelopement
-Portal2D de JavierXD
-CalCraft de Wime
-GeekBros du groupe GeekBrothers (Eiyeron,Siapran,KevKevVTT,Adbook,LIMachi)