2010-03-24 5 views
2

Je travaille sur ce qui, au mieux, pourrait être considéré comme un jeu de golf «primitif», où, après un certain caractère aléatoire, j'ai besoin de jouer un trou de golf. Le trou est statique et je ne suis pas préoccupé par l'aspect de l'interface utilisateur car je dois juste tracer une ligne sur un graphique du trou après que la balle a été frappée montrant où elle a voyagé.Simuler une stratégie de jeu de golf

Je suis à la recherche de commentaires sur la façon de gérer le côté «logique» du puzzle, voici quelques-unes de mes réflexions sur le sujet, les commentaires, les suggestions ou les références sont grandement appréciés.

  1. Plan sur le trou dans un tableau avec une quantité spécifique de précision, en notant le type de surface: hors limites, fairway, rugueux, vert, sable, l'eau, et le plus important du trou.
  2. Tracez les "régions" et si la boule est contenue dans l'une de ces régions, configurez les paramètres pour l'angle de départ "maximum". (Par exemple, la première partie du trou, le tir doit être entre certains angles
  3. En utilisant le placement actuel de la balle, et la région contenue dans # 2, définir une routine pour sélectionner au hasard l'angle de tir, et la puissance puis déplacer le balle, ajuster la trajectoire et déplacer à nouveau

Je sais que ce n'est pas la solution la plus «élégante», mais en réalité, nous sommes à la recherche d'une solution rapide et sale, car je dois juste faire une quelques fois, régler et oublier ensuite.

Du point de vue des langues que je vais utiliser ASP.NET et C# pour y parvenir.

+0

Qu'est-ce que cela a à voir avec ASP.Net? – SLaks

+0

Cela se fait dans un contexte Web. Je pourrais enlever l'étiquette, mais c'est applicable je crois. –

+0

Essayez-vous d'écrire un solveur de puzzle ou un fabricant de puzzle? – Brian

Répondre

1

ok, rapide et pas sale: D

ont une fonction pour planifier diverses combinaisons de routes utilisant différents clubs (distances) que pour un joueur donné donnera divers plans approche

plans optimaux sont 1 à 5 coups sur un champ normal (par 3 à 5), vous pouvez donc les forcer en les divisant en carrés avec une certaine précision.

en supposant que vous divisez le champ avec une précision de 10 yards pour le terrain normal supposons Grille de 50x30 comme maximum. Si vous supposez que chaque coup/club atteindra une certaine distance dans 90% des cas, chaque coup tomberait sur un pourcentage de la grille - supposons qu'un club frapperait entre 200 et 250 yards alors il frapperait normalement (125^2 * pi-100^2 * pi)/(500 * 300)/4 * 1500 = 45 carrés. (le premier terme est la zone de distance maximale, la deuxième distance min, il est divisé par la zone complète et seulement 1 4ème est pris parce que viser dans la direction générale du trou - pas plus de 45 degrés à un côté).

cela répété pour max 5 fois donnerait une liste de bons plans possibles avec le nombre de plans 45 sur 5 à 7 * 10^8 (nombre doit être réduit parce que le dernier choix n'est pas aussi libre que le 4 précédent, mais Il y a donc plus d'un club, donc je vais en rester là)

itération sur les clubs et leurs distances typiques et en prenant la grille qui représente le terrain pour réduire davantage la zone que vous tirez (vous ne seriez pas viser la forêt, le sable, l'eau), vous pourriez calculer un score pour un tir particulier - par exemple, si le terrain est proche des dangers, vous pourriez abaisser le score des tirs. Si le terrain n'est pas plat, vous pouvez réduire le score, etc.

Vous pouvez également améliorer l'algorithme ici en permettant d'élargir la zone de visée si vous ne pouvez pas aller directement vers le trou.

vous pouvez tailler votre promenade sur le terrain en gardant une liste des meilleurs coups. À la fin, choisissez parmi les sept meilleurs plans en retournant une pièce de monnaie. et jouez le premier coup. Au tir, appliquez un dé quant à la façon dont la balle est frappée, aux changements de conditions de vent et autres. Relancer la planification en fonction de l'endroit où vous avez atterri.

pour le vert modifier la résolution de la grille.

tout cela vous avez besoin d'avoir

  1. liste des clubs et min et max ils peuvent achive, vous pouvez également stocker des pourcentages de mauvais/bons coups et appliquez un peu de hasard pour les mauvais coups
  2. grille
  3. du terrain du trou avec des valeurs pour les types de terrain et vous devez attribuer des valeurs pour le risque

amélioration de l'algorithme plus approprié serait vous obliger à avoir une fonction qui transformerait le terrain en pleine résolution en un réseau de connecté non des (parce que beaucoup de terrain est conceptuellement le même et le diviser en une grille est une force brute) avec le coût (risque) associé sur le chemin vers le trou et ensuite il se transforme en un problème de voyageur de commerce pour lequel vous auriez des algorithmes existants.

+0

J'aime ça, c'est un peu dans le sens de ce que je pensais faire moi-même –