Question

Je construis donc le jeu pacman en Java pour apprendre la programmation de jeux moi-même.

J'ai la fenêtre de jeu de base avec le sprite pacman et les fantômes dessinés, le pacman bouge 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:

Le labyrinthe de Pacman

Sans me donner la solution directe / complète à ce problème, quelqu'un peut-il me guider quant à la manière de le construire? Je parle uniquement des limites et des tuyaux (marques en «T») que vous ne pouvez pas traverser et que vous devez contourner. 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? Doit-il être dessiné à chaque fois que la méthode paint () est appelée ou existe-t-il un moyen de la dessiner uniquement au début du jeu et jamais plus?

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

3) Des indications sur la détection des collisions (afin que pacman / fantômes ne puissent pas traverser les murs) seraient utiles.

4) Tous les conseils sur la manière de calculer l'espace libre entre les tuyaux afin que les points puissent être remplis entre eux seront également très utiles.

Merci

Était-ce utile?

La solution

Je ne le ferais pas de cette façon.

Je dessinerais la carte graphique, puis créerais un tableau de données 2D représentant la carte. La carte de données serait responsable de la détermination des collisions, de la consommation de points, de l'emplacement des bonbons et des fantômes. Une fois que toute la logique de tout est gérée, utilisez simplement le tableau 2D pour tout afficher dans les coordonnées de pixel appropriées sur la carte graphique.

Par exemple, l'utilisateur appuie sur la touche gauche. Tout 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.

EDIT:

Chaque élément représenterait à peu près l'emplacement d'un point. Par exemple:

Non, en regardant le tableau, je dirais que le tableau ressemblerait à quelque chose comme ça.

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 souple que les caractères, car certaines zones doivent contenir une foule d'informations différentes. Bien que la zone de frai des fantômes soit vide, pacman n’est pas autorisé à y entrer. Le mouvement des fantômes et de pacman est différent pour les fuites latérales, le point d'apparition des bonbons est un point vide, mais si vous souhaitez rester flexible, vous voudrez indiquer son emplacement par carte.

Vous devez également vous rappeler que pacman et les fantômes sont souvent situés entre deux points. Par conséquent, il est important de contenir des informations représentant un pourcentage d'espace compris entre 1,2 et 1,3, pour la détection des collisions. ainsi que pour déterminer quand vous voulez supprimer les points, les bonus et les bonbons du tableau.

Autres conseils

Voici un indice pour vous:

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

Cet indice, correctement utilisé, vous permettra de gérer le rendu et la détection de collision, et vous permettra également de représenter le labyrinthe de manière compacte.

  1. Vous pouvez peindre la carte dans une image BufferedImage et simplement dessiner que sur chaque peinture (). Vous obtiendrez des performances assez raisonnables de cette façon.

  2. Si vous êtes satisfait de la solidité des murs, vous pouvez dessiner chaque bloc de mur carré avec fillRect. Si vous souhaitez obtenir le même aspect que sur l'image, vous devez comprendre comment tracer les lignes de la bonne façon et utiliser les arcs pour les angles.

  3. La carte du jeu de Pacman est composée de carrés. Pacman et les fantômes se déplacent toujours d’une case à l’autre dans une étape animée (c’est-à-dire que vous appuyez à droite, le pacman se déplace d’une case à droite). Cela signifie que la détection des collisions est facile: n'autorisez tout simplement pas les déplacements vers des carrés non vides.

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

1) Juste pour donner mon conseil sur le redessinage. Si vous trouvez que redessiner l’ensemble de l’image est lent, vous pouvez uniquement déterminer les éléments qui ont changé à l’écran et les redessiner. Une approche pour cela serait la suivante: Déterminez les sprites qui se sont déplacés. Déterminez (approximativement) un rectangle autour de ces sprites. Redessine ces rectangles seulement. De cette façon, vous ne rafraîchissez que des parties de l'écran et non la totalité de l'écran. Cela devrait entraîner une augmentation des performances par rapport au redessinage de la totalité de l'écran.

Les autres réponses étaient raisonnables pour les autres questions que vous avez posées.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top