2010-07-31 9 views
0

Le nouveauPos me donne la position d'agent pacman (comme (3,5)). L'ancien aliment me donne la nourriture restante disponible pour pacman sous forme de grille. Nous pouvons accéder au réseau via la liste comme si nous voulons savoir si la nourriture est disponible à (3,4), alors nouscomment vérifier les états voisins en python

oldFood = currentGameState.getFood() 
    if oldFood[x][y] == true.... 


newGhostStates = successorGameState.getGhostStates() 

Cela me donnera la liste des fantômes qui sont présents.

J'ai besoin de trouver les fantômes environnants, c'est-à-dire les fantômes qui sont à côté de newPos. Comment ferais-je cela? Je ne suis pas capable de l'implémenter. J'ai obtenu une requête sur google mais je ne veux pas utiliser cette méthode. Ici, le rayon est utilisé, je ne sais pas pourquoi?

def surroundingGhosts(gList,(x,y), radius=1): 
     allGhosts = {} 
     sGhosts = [] 
     for g in gList: 
     ### map ghosts positions to ghost obj 
     allGhosts[g.getPosition()] = g 

     checkPos = [] 
     for xx in range(x-radius,x+radius+1): 
     if xx == x: 
      for yy in range(y-radius, y+radius+1): 
      checkPos += [(xx,yy)] 
     else: 
      checkPos += [(xx,y)] 
     for p in checkPos: 
     if p[0] and p[1] >= 0: 
      if p in allGhosts: 
      sGhosts += [allGhosts[p]] 

     return sGhosts 

fondamentalement, j'ai besoin de trouver les positions environnantes liées à ma position actuelle. Ensuite, je vais vérifier ces positions avec les positions gjost, si elles correspondent, puis il y a un fantôme.

Répondre

2

Eh bien, imaginez ceci:

... 
.P. 
.G. 

P est le pacman un G est un fantôme. Vérifier avec "rayon = 1" est des fantômes adjacents au pacman. Cette vérification va trouver le fantôme. Mais:

.... 
.P.G 
.... 
.... 

Mais ici un fantôme ne sera pas trouvée avec un rayon de 1, donc rayon de 2 est nécessaire.

+0

Y at-il une autre méthode par laquelle je peux le faire? sans utiliser le rayon? – Shilpa

+0

fondamentalement, j'ai besoin de trouver les positions environnantes liées à ma position actuelle. Ensuite, je vais vérifier ces positions avec les positions gjost, si elles correspondent, puis il y a un fantôme. – Shilpa

+0

@Shilpa: si vous avez seulement besoin des positions adjacentes (c'est-à-dire "juste à côté" du Pacman), vérifiez "x, y + 1", "x, y-1", "x + 1, y", 1, y' et vous avez terminé. Cela peut être étendu à des plages plus longues avec du code qui est probablement un peu plus simple que ce que vous avez collé ci-dessus. –

Questions connexes