Labyrinthe de Pacman en Java


Je construis donc le jeu pacman en Java pour m'enseigner la programmation de jeux.

J'ai la fenêtre de jeu de base avec le sprite pacman et les sprites fantômes dessinés, le pacman se déplace avec les touches fléchées, ne dépasse pas les murs de la fenêtre, etc. Maintenant, j'essaie de construire le labyrinthe, comme dans cette image:

Pacman labyrinthe

Sans me donner la solution directe/complète à cela, quelqu'un peut-il me guider sur la façon dont cela peut être construit? Je ne parle que des limites et de la tuyaux (marques' T') ici que vous ne pouvez pas traverser et vous devez faire le tour. Pas les points que le pacman mange encore.

Voici mes questions:

1) Quel est l'algorithme/méthode le plus efficace pour créer ce labyrinthe? Devra-t-il être dessiné à chaque fois que la méthode paint() est appelée ou existe-t-il un moyen de le dessiner uniquement au début du jeu et plus jamais?

2) Comment cela sera-t-il réellement dessiné à l'écran? Je suppose que le fillRect() sera utilisé?

3) Des indices sur la détection de collision (donc le pacman/fantômes ne peut pas passer à travers les murs) serait utile.

4) Toute indication sur la façon dont l'espace vacant entre les tuyaux sera calculé afin que les points puissent être remplis entre eux sera également très utile.

Merci

Author: Community, 2009-03-07

4 answers

Je ne le ferais pas de cette façon.

Je dessinerais la carte graphique, puis créerais un tableau de données 2D qui représente la carte. La carte de données serait responsable de déterminer les collisions, de manger des points, où se trouvent les bonbons et où se trouvent les fantômes. Une fois que toute la logique pour tout est gérée, utilisez simplement le tableau 2D pour afficher tout dans leurs coordonnées de pixels appropriées sur la carte graphique.

Par exemple, l'utilisateur appuie sur la touche gauche. D'abord vous déterminez que pacman est à l'élément 3, 3. L'élément 3, 2 contient des informations indiquant un mur afin que vous puissiez implémenter le code pour lui faire ignorer la commande.

MODIFIER:

Chaque élément représenterait l'endroit où un point pourrait être. Par exemple:

Non, en regardant le tableau, je dirais que le tableau ressemblerait à ceci.

d,d,d,d,d,d,d,d,d,d,d,d,w,w,d,d,d,d,d,d,d,d,d,d,d,d
d,w,w,w,w,d,w,w,w,w,w,d,w,w,d,w,w,w,w,w,d,w,w,w,w,d
p,w,w,w,w,d,w,w,w,w,w,d,w,w,d,w,w,w,w,w,d,w,w,w,w,p    
d,w,w,w,w,d,w,w,w,w,w,d,w,w,d,w,w,w,w,w,d,w,w,w,w,d    
d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d

Et ainsi de suite. Vous voudrez peut-être choisir une structure de données plus flexible que de simples caractères, car certaines zones doivent contenir un tas d'informations différentes. C'est à dire même bien que la zone de frai fantôme soit vide, pacman n'est pas autorisé à y entrer. Le mouvement des fantômes et pacman est différent pour les échappées latérales, le point de réapparition des bonbons est un endroit vide, mais si vous voulez rester flexible, vous voudrez indiquer où cela se trouve sur une base par carte.

Une autre chose que vous voudrez retenir est que pacman et les fantômes sont souvent entre les points, donc contenir des informations qui représentent un pourcentage d'un espace qu'ils occupent entre 1,2 et 1,3 est important pour la détection de collision ainsi que de déterminer quand vous voulez supprimer des points, des bonus et des bonbons de la carte.

 9
Author: Spencer Ruport, 2009-03-17 22:12:54

Voici un indice pour vous:

Texte alternatif http://www.freeimagehosting.net/uploads/66e4131f59.jpg

Cet indicateur, utilisé correctement, vous permettra de gérer le rendu et la détection de collision, et vous permettra également de représenter le labyrinthe de façon compacte.

 6
Author: Willie Wheeler, 2009-03-07 21:18:46
  1. Vous pouvez peindre la carte dans un BufferedImage et simplement dessiner cela sur chaque paint(). Vous obtiendrez des performances tout à fait raisonnables de cette façon.

  2. Si vous êtes satisfait que les murs soient solides, vous pouvez dessiner chaque bloc de mur carré avec fillRect. Si vous souhaitez obtenir le même look que sur l'image, vous devez comprendre comment dessiner les lignes de la bonne manière et utiliser des arcs pour les coins.

  3. La carte de jeu Pacman est faite de carrés et Pacman et les fantômes toujours déplacez-vous d'une case à la case voisine en une étape animée (c'est-à-dire que vous appuyez sur la droite, le pacman déplace une case vers la droite). Cela signifie que la détection de collision est facile: il suffit de ne pas autoriser les mouvements vers des carrés qui ne sont pas vides.

  4. Je ne comprends pas ce que vous essayez de demander ici.

 2
Author: TrayMan, 2009-03-07 21:02:39

1) Juste pour donner mes conseils sur le redessinage. Quelque chose que vous pouvez faire si vous trouvez que le redessinage de l'image entière est lent, est de déterminer uniquement les éléments qui ont changé à l'écran et de les redessiner. Une approche pour cela serait la suivante: Déterminer les sprites qui se sont déplacés. Déterminez (approximatif) un rectangle autour de ces sprites. Redessiner ces rectangles seulement. De cette façon, vous ne rafraîchissez que des parties de l'écran et non l'ensemble de l'écran. Cela devrait entraîner une augmentation de performance sur redessiner l'écran entier.

Autres réponses ont été raisonnables pour les autres questions que vous avez posées.

 2
Author: kgrad, 2009-03-07 21:18:24