AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Strategie-Spiel, Nachbarländer
Thema durchsuchen
Ansicht
Themen-Optionen

Strategie-Spiel, Nachbarländer

Ein Thema von Cicaro · begonnen am 12. Mai 2005 · letzter Beitrag vom 6. Jul 2005
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#11

Re: Strategie-Spiel, Nachbarländer

  Alt 6. Jul 2005, 21:34
A* brauchst du nicht, du benötigst noch nichtmal einen Suchalgorithmus sondern nur die richtigen Datenstrukturen.

Also oben erklärte ich dir wie du die Map=TLand->TNachbarlisten Objekte zum start des Spieles initialisierst.
Mehrere zusammenhängende Länder die EIN Spieler erobert hat verhalten sich technisch gesehen wie EIN Land. Erobert ein Spieler ein Land so wird es sehr wahrscheinlich eines der Nachbarländer sein das vorher nicht diesem Spieler gehört hat. In dem Moment wo ein Spieler ein neues Nachbarland sein eigen nennt vermischst du einfach die TNachbarländerListen des eroberten Landes mit allen Listen der schon angrenzenden Ländern, fertig. Denn wenn dieser Spieler ALLE Länder erobert hat so enthalten ALLE Länder in ihren TNachbarländerListen automatisch alle anderen Länder, also alle die direkt erreichbar sind. Denk mal drüber nach und zeichne es dir auf.

Jedes TLand hat eine Liste mit TNachbarländern, fest initialisiert um die Original Map zu erhalten.
Jedes TLand hat eine Liste mit TEroberteNachbarländern die dem Spieler gehören.
Erobert ein Spieler ein TLand so wird die Liste der TEroberteNachbarländer des eroberten TLands und aller angrenzenden eroberten TLand Objekten geupdatet.

Somit steht zb. im TLand(A).TEroberteNachbarländer autom. das TLand(Z) falls es eine direkte Landbrücke gibt.

Du kanst aber auch recht simpel einen "Suchalgo." schreiben. Möchtest du wissen ob ein Spieler von TLand(A) nach TLand(Z) reisen kann so beginnst du die TNachbarLänderList von TLand(A) rekursiv zu durchsuchen. Alle dort eingetragenen Nachbarländer die ebenfalls diesem Spieler gehören werden durch die Rekursive Suche ebenfalls durchsucht. Die Abbruchbedingung der Rekursiven Suche ist entweder TLand(A) oder TLand(Z). Trifft man auf TLand(Z) so gibt es eine Landbrücke, trifft man auf TLand(A) so ist man fertig mit der Suche. Allerdings kann eine solche Suche bei sehr vielen Ländern und Mitspielern schon ziemlich zeitaufwendig werden. Natürlich sind Maps mit 100 Ländern noch kein Problem.

Ein dritter Algorithmus verwaltet zu jedem Spieler eine Liste der eroberten Ländern. Willst du von TLand(A) nach TLand(Z) so müssen diese Länder zwangsweise auch in der Liste TEroberteLänder enthalten sein, logisch. Nun durchsuchst du die TNachbarländerListe von TLand(A) nach einem Land das in TEroberteLänder enthalten ist. Sollte es keines geben so gibt es keinen Weg nach TLand(Z). Sollte es eines geben so durchsuchst du nun rekursiv mit der gleichen Methode dessen TNachbarländerListe(). Dabei wird TLand(A) logischerweise ignoriert und trifft man dort auf TLand(Z) so gibt es eine Landbrücke zwischen A und Z. Diese Landbrücke ist sogar durch die Rekursion nachvollziehbar.

Ich würde denoch den Weg der "richtigen" Datenstrukturen gehen und direkt bei der Eroberung/Änderung der Map die Liste der erreichbaren Nachbarländer jedes Spielers und Land updaten.

Du hast also verschiedene Möglichkeiten: entweder Speed = mehr Speicher, oder höhere Komplexität in der Suche = weniger Speicher.

Gruß Hagen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:26 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz