Puis-je empêcher le mouvement en diagonale d’explorer davantage la carte?

57

Dans une grille de tuiles où le mouvement dans l'une des 8 directions prend exactement le même nombre de tours (règles de style d'échiquier), puis-je empêcher le mouvement en diagonale de montrer plus de nouvelles tuiles que le mouvement orthogonal?

Par exemple: Vous êtes la boîte rouge dans l'image ci-dessous. Les cellules vertes sont actuellement visibles pour vous (champ de vision carré). Vous pouvez déplacer une distance d'une tuile dans l'une des huit directions.

Si vous vous déplacez au nord-est , vous explorerez 13 nouvelles tuiles (indiquées en bleu). Si vous vous déplacez vers le sud , vous n’explorerez que 7 nouvelles tuiles (indiquées en violet).

grille avec visibilités dépendant de la position

Comment puis-je rendre les voyages dans chaque direction également propices à l'exploration?

M. Smith
la source
27
C'est un défaut fondamental dans la conception d'un jeu comme celui-ci. Vous devez soit ne pas autoriser le mouvement en diagonale, soit basculer sur une grille semblable à celle des hexagones ne présentant pas ce problème.
Tetrad
1
@Tetrad Vous ne vous trompez pas sur le fait qu'il s'agisse d'une faille, mais vous ne réalisez probablement pas à quel point c'est répandu dans des jeux comme celui-ci .
M. Smith
8
Dans tous les jeux où les mouvements orthogonaux et diagonaux sont également rapides, il y aura toujours des choses pour lesquelles le mouvement diagonal est préférable au mouvement orthogonal et inversement. Ce n'est tout simplement pas soluble - si vous branchez un trou, un autre s'ouvre.
Patashu
3
Pas tout à fait une réponse, mais est-il possible dans votre jeu de faire en sorte qu'un mouvement en diagonale prenne plus de temps qu'un mouvement orthogonal proportionnel à la longueur de la diagonale? Deuxièmement, vous pouvez avoir une solution mixte où le mouvement utilise le motif en losange et la distance de vue utilise le carré?
Vality
2
Une autre réponse pas tout à fait satisfaisante: les déplacements orthogonaux se comportent comme ils le font maintenant, mais les déplacements en diagonale font que la source de lumière devient "floue" - elle ne révèle pas tous les 13 carrés qui viennent d'arriver, mais seulement 7. (ou alors) d'entre eux, déterminés au hasard.
Snowbody

Réponses:

67

Dungeons and Dragons 3.5 (RPG stylo-papier) propose une solution à la fois pour le calcul du mouvement et du rayon basé sur la grille: le mouvement en diagonale coûte 1,5 fois le coût orthogonal. Étant donné que la diagonale d'une unité carrée est d'environ 1,414, 1,5 est assez proche.

Etant donné que D & D 3.5 ne prend en charge que les mouvements d’entiers, la méthode de calcul utilisée est que les mouvements orthogonaux coûtent «un carré». Votre premier mouvement en diagonale ne coûte également qu’un «carré», mais la deuxième diagonale coûte «deux carrés». Vous alternez un et deux carrés pour chaque mouvement diagonal. L'implémentation de cette règle de mouvement dans votre jeu résoudra plusieurs problèmes de mouvement en diagonale.

Comme le montre ce diagramme, cette règle de mouvement crée une approximation raisonnable des cercles et n’est pas décalée de plus de 1 par rapport à la distance réelle (à moins de 15 unités du départ).

entrez la description de l'image ici

Si votre rayon de vision / exploration est également calculé de cette manière, le mouvement et les découvertes diagonales seront à peu près aussi proches ou aussi éloignés que ceux orthogonaux.

Danois
la source
Exactement ce que je voulais suggérer. Bien que cela vaille la peine de noter que cette stratégie échoue en termes de limitation des mouvements si le personnage ne peut se déplacer que d'un espace par tour (ce qui semble être le cas d'après le diagramme de la question?). Vous pouvez vous "en souvenir" s’ils sont sur des diagonales paires / impaires entre les tours, bien que cela puisse être déroutant / frustrant pour le joueur. Quoi qu’il en soit, cela fonctionne bien pour la question de la visibilité.
Alexis Beingessner
5
@AlexisBeingessner, vrai. Et le questionneur a indiqué qu'il souhaitait un mouvement ressemblant à un roi d'échecs, mais je suppose que puisqu'il s'agit d'un site de développement de jeux informatiques, je signalerais une bonne solution de jeu. Si ceci est plus une énigme ou une question de maths pure, je l’attendrais sur un autre site. Si c'est pour un jeu de type voyou, certains d'entre eux supportent déjà des vitesses de déplacement variables.
Dane
La plupart des jeux Roguelike semblent être au tour par tour, mais comportent en réalité une composante temporelle. Par conséquent, si vous vous déplacez en diagonale, les autres objets auront plus de temps pour réagir avant de pouvoir effectuer un autre mouvement.
Kos
67

Vous devez modifier la forme du champ de vision.

Ainsi, lorsque vous vous déplacez dans n'importe quelle direction, le même nombre de nouveaux carrés devient visible.

Voici une possibilité:

exemple de grille

Chargepun
la source
5
Intéressant; Je n'ai jamais envisagé un champ de vision en diamants. Cependant, ce point de vue pose également un problème. C'est une idée terrible de voyager en diagonale maintenant, car si vous repérez un ennemi lors de son déplacement en diagonale, il sera beaucoup plus proche de vous que si vous aviez voyagé orthogonalement.
M. Smith
43
@ mr.smith, oui, c'est un nouveau problème, mais j'ai résolu votre ancien problème ...
ChargingPun
En effet vous avez fait; semble que je n'étais pas assez spécifique avec la question.
M. Smith
8
Une forme circulaire aiderait-elle ici?
amitp
3
Ce @amitp est une forme circulaire - à condition que votre fonction de distance est la distance de Manhattan.
Daniel Wagner
27

Pour que les mouvements diagonaux et orthogonaux révèlent approximativement la même zone, vous avez besoin de deux choses (chacune d’elles ayant déjà été suggérée dans une autre réponse ou commentaire):

  1. Portée de vue approximativement circulaire :

    Image de la plage de vue pseudo-circulaire

    En soi, cela ne donnera pas exactement la même surface révélée pour les deux types de mouvement. Par exemple, dans l'image ci-dessus, le mouvement orthogonal révèle 9 carrés, tandis que le mouvement en diagonale en révèle 13. C'est toujours meilleur que le ratio 13/7 pour la zone d'affichage carré dans votre exemple.

    En fait, à mesure que le rayon de vue augmente, le rapport des zones révélées par pas diagonal / orthogonal tend à √2 1,414 pour une zone circulaire, tandis que le même rapport pour une zone de vue carrée tend à 2.

  2. Mouvement diagonal plus lent :

    Dans la vraie vie, marcher en diagonale sur un champ carré prend plus de temps que de marcher sur l'un des côtés. En fait, cela prend environ √2 ≈ 1,414 fois plus longtemps. Si vous voulez que le mouvement dans votre jeu soit réaliste, vous devez le faire aussi.

    En pratique, 3/2 = 1.5 est une assez bonne approximation de √2. Ainsi, vous pouvez simplement faire en sorte que chaque pas orthogonal prenne deux unités de temps et que chaque pas en diagonale en prenne trois. Avec l'exemple de zone de visualisation ci-dessus, cela donne 9/2 = 4,5 carrés révélés par unité de temps pour le mouvement orthogonal, et 13/3 = 4,33 carrés révélés par unité de temps pour le mouvement diagonal. Assez proche, hein?

    Alternativement, si vous souhaitez vous en tenir à "1 pas = 1 unité de temps" pour le mouvement orthogonal, vous pouvez utiliser quelque chose comme le système de D & D suggéré par Dane et faire en sorte que chaque pas en diagonale consomme un tour supplémentaire. (Si vous faites cela, cependant, vous devez donner à chaque unité un compteur explicite du nombre de pas en diagonale qu’elle a effectués; sinon, vous pourriez vous retrouver avec des exploits comme, par exemple, un E, NE, E, NE, .. . séquence de mouvement permettant à un joueur d'explorer plus rapidement que prévu.)

Ilmari Karonen
la source
Un moyen facile d'empêcher de tels exploits serait de dire qu'un mouvement en diagonale coûte deux ticks, à moins d'être précédé d'un mouvement dans la même direction qui a pris deux ticks.
Supercat
1
@supercat: C'est vrai, mais cela laisserait la séquence E, NE, E, NE, ... nettement moins efficace pour l'exploration que les mouvements droits orthogonaux / diagonaux, ce qui pourrait ne pas être souhaitable.
Ilmari Karonen
Cela rendrait cette séquence moins efficace, mais alors quoi? Toutes les méthodes d'exploration ne doivent pas être aussi efficaces. En réalité, il ne serait peut-être pas mauvais d'avoir une pénalité de temps pour les changements d'orientation, avec une exemption pour les cas où le déplacement avant ou après était une diagonale à double charge.
Supercat
2
J'ai fait quelque chose de similaire il y a quelque temps, et je l'ai résolu en faisant en sorte que le mouvement orthogonal coûte deux "ticks" par carré et que le mouvement en diagonale en coûte trois.
Mason Wheeler
11

Puisque vous utilisez une grille et que vous savez dans quelle direction l'utilisateur se dirige, rien ne vous empêche d'adapter la réponse précédente et d'utiliser un champ de vision différent selon la direction.

Par exemple, vous pouvez élargir le champ pour inclure les coins lorsque vous vous déplacez dans des directions cardinales et le réduire de deux carrés à chaque extrémité dans vos cases en diagonale afin que chacune d’elles découvre 9 carrés.

Une autre alternative, selon le fonctionnement de votre éclairage, consiste à utiliser une meilleure approximation du cercle avec antialiasing pour révéler partiellement certains carrés.

utilisateur43497
la source
C'est un compromis intéressant. si vous voyagez en diagonale, toutes les cellules normalement visibles ne seront pas visibles. Vous pouvez attendre un tour (pour explorer ces cellules) ou continuer à vous déplacer.
M. Smith
8
quelle réponse est "la réponse préalable"?
Mooing Duck
7

Plutôt que d’avoir une portée de visionnage fixe, la zone de visibilité du joueur dépendra de la direction dans laquelle il se trouve, ainsi que peut-être de la direction prise par le joueur au cours des derniers tours (un joueur qui se dirigeait vers le nord pourrait peut-être faire immédiatement un pas en direction du sud, mais peut prendre quelques virages pour obtenir une distance de visualisation maximale dans cette direction). Un joueur qui se dirige vers le nord depuis un couloir étroit vers une grande salle et continue de se déplacer vers le nord aurait une visibilité limitée à l’est et à l’ouest, et devrait probablement le faire. Lorsque le joueur cesse de bouger, le système peut automatiquement "explorer" les zones invisibles se trouvant dans le rayon de vision actuel du joueur. Toutefois, pendant que le joueur se déplace activement, le champ de vision doit être plus limité.

supercat
la source
3

En guise d'alternative à un champ de vision plus complexe (qui, comme discuté ci-dessus, ajoute ses propres problèmes en raison des contraintes d'une mise en page basée sur une grille), vous pouvez essayer d'imiter l'effet de mouvement dans un jeu qui n'est pas basé sur une discrétion. la grille. Là où le libre mouvement est possible, un mouvement diagonal d'une unité correspond exactement à cela, et non aux ~ 1,41 unités de mouvement vues avec une grille carrée.

Bien que vous ne puissiez pas forcer le mouvement d'une seule unité sans perdre votre grille descendante (ce qui modifierait considérablement la conception de votre jeu), vous pourriez peut-être garder une trace du mouvement supplémentaire pris et abandonner des mouvements plus tard: suivez les 0.41 supplémentaires et une fois qu'ils totalisent plus que 1.00 a cette unité sauter un coup. Ou le contraire: considérez la diagonale comme étant normale, additionnez les 0,41 pour chaque mouvement horizontal ou vertical et accordez un crédit de mouvement supplémentaire une fois supérieur à 1 (ou 1,41 pour un mouvement en diagonale).

Vous devez faire attention à la manière dont vous présentez ceci à vos joueurs de manière à ce que cela ait l'air lisse et juste. Dans un scénario multi-humain, de tels changements pourraient devenir un avantage stratégique pour les joueurs. Cela peut être un problème, ou il peut exister un moyen naturel de le mélanger à la mécanique du jeu (permettre éventuellement aux joueurs de stocker une petite montant du "crédit de déménagement inutilisé" qu’ils peuvent utiliser pour réagir rapidement plus tard et disposer des 0,41s supplémentaires de flux de déménagement dans (ou retirer de) ce pool.

Cela fonctionnerait mieux si les entités de contrôle de joueur déplacées bougeaient plus d'une unité à chaque tour. Par exemple, trois points de mouvement peuvent être utilisés comme trois mouvements horizontaux, ou deux diagonaux avec 0,16 restant dans la piscine pour plus tard. Une fois que cela atteint 1,00, le joueur obtient un coup "gratuit" hor / very et à 1,41 une diagonale libre. Vous pouvez plafonner le surplus à 1,5 pour le forcer à être utilisé ou perdu à ce moment-là afin d'empêcher le joueur de conserver cette énergie stockée pendant une éternité ou de la laisser s'accumuler.

Évidemment, ceci est une complication de vos règles de jeu qui peut être complètement indésirable, et ce ne serait pas pratique pour un jeu non informatisé, mais si vous pouviez le faire fonctionner dans les règles existantes de votre jeu, cela limiterait la différence d'exploration entre les directions de mouvement sans avoir besoin d'abandonner le format de grille.

David Spillett
la source
2

Vous pouvez faire en sorte que le joueur bouge de deux cases s’il se déplace de haut en bas, à gauche ou à droite, et d’une seule diagonale. Ce ne serait pas complètement égal, mais ce serait beaucoup plus proche.

drdavehere
la source
C'est une bonne idée, mais je pense que cela équivaut à interdire simplement le mouvement en diagonale (une diagonale ne représentant que deux mouvements orthogonaux)
Vality