2017-04-25 1 views
0

J'apprends à faire un simple IA pour prédire la direction que le joueur va frapper au prochain tour. il n'y a que 3 directions, gauche, droite et avant.Javascript prédisait le prochain mouvement en se basant sur les données précédentes

Actuellement, je peux seulement prédire le prochain mouvement en fonction de la direction la plus perforée. Voici mon code

function Actor(name) { 
    this.name = name 
} 

var r = 'right' 
var l = 'left' 
var f = 'front' 

Actor.prototype.punch = function(direct, target) { 
    if (this == player) { 
     if (!target) target = enemy 
     console.log(this.name + ' hit ' + target.name + ' on ' + direct) 
     player_log.push(direct) 
     console.log(target.name + ' block to the ' + mode(player_log)) 
    } 
    console.log(this.name + ' hit ' + target.name + ' on ' + direct) 
} 

var player = new Actor('Player') 
var enemy = new Actor('Enemy') 

var player_log = [] 

function mode(arr) { 
    if (arr.length == 0) return null 

    var map = {} 
    var max = 1 
    var maxEl = arr[0] 
    for (var i = 0; i < arr.length; i++) { 
     var el = arr[i] 

     if (!map[el]) { 
      map[el] = 1 
     } else { 
      map[el]++ 
     } 

     if (map[el] > max) { 
      max = map[el] 
      maxEl = el 
     } 
    } 

    return maxEl 
} 

Maintenant, ce que je veux, si le joueur a une combo, par exemple coup de poing droite, droite, gauche, droite, droite, avant. Ce que je dois faire pour que le IA reconnaisse ce combo après quelques fois que le joueur a utilisé ce combo. Alors que le même combo ne fonctionnera plus et que le joueur doit trouver un nouveau combo que l'ai n'a pas encore reconnu.

Aussi je suis nouveau dans ce genre de programmation. J'ai besoin de l'algorithme, pas seulement du code. Et que devrais-je apprendre d'autre si je veux développer cette IA? Je sais qu'il y a peut-être beaucoup de bibliothèques qui peuvent faire cela, mais je veux d'abord connaître la base avant d'utiliser une librairie.

Répondre

0

De véritables motifs de détachage sont très compliqués. Comme - l'équipe de recherche compliquée.

Cependant, vous pouvez faire une version simpliste en enregistrant tous les mouvements jusqu'à présent, puis en regroupant les derniers mouvements n et en les recherchant dans la liste de coups existante dans cet ordre. Si vous les trouvez (et pas seulement à la fin), alors vous pouvez deviner que le prochain mouvement sera le même que celui de la liste. Le plus de fois que vous trouvez la séquence et le prochain mouvement est le même, plus vous pouvez être sûr.

En continuant, vous pourriez gagner du temps entre les coups et commencer à les comparer, mais cela compliquera beaucoup les choses.

Bonne chance!