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 1 von 2  1 2      
Cicaro

Registriert seit: 9. Feb 2005
285 Beiträge
 
Delphi 7 Personal
 
#1

Strategie-Spiel, Nachbarländer

  Alt 12. Mai 2005, 09:12
Hallo !

Ich programmier' gerad' ein Strategie-Spiel, bei dem ich mir eine Karte mit verschiedenen Ländern erstelle.
Folgendes ist dabei wichtig:
- ich verwende 2 Klassen, TMap und TLand
- TMap beinhaltet alle TLand-Instanzen
- in TMap kann ich herausfinden, zu welchem Land ein Bereich auf der Karte gehört

Nun möchte ich durch Zeiger (in TLand) benachbarte Länder zu dem jeweiligen Land registrieren.
Jetzt will ich wissen, wie ich ich dies am besten anstelle ?

Daneben würd' ich gern auch wissen, wie ich am besten jedes einzelne Land von sich aus zeichnen kann statt in TMap alle Bereiche ohne Rücksicht auf die TLand-Instanzen zu zeichnen ?
  Mit Zitat antworten Zitat
Benutzerbild von Airblader
Airblader

Registriert seit: 29. Okt 2004
Ort: Geislingen an der Steige
742 Beiträge
 
#2

Re: Strategie-Spiel, Nachbarländer

  Alt 12. Mai 2005, 11:50
Ohne viel von Pointeren / Klassen zu wissen sage ich mal:

Wie speicherst du denn die Instanzen der Länder in TMap?
Hast du alle in einem oder irgendwie in bspw. einem 2D-Array?

Wenn es kein 2D-Array ist, sollte man wissen, wieviele TLand nebeneinander dargestellt werden.

Ist es ein 2D-Array dann müsste es so sein:

Array[X][Y] sei die Position des MittelFelder.
Die Nachbarländer sind dann:

Zitat:
Links oben:
[X-1][Y-1]

Mitte oben:
[X][Y-1]

Rechts oben:
[X+1][Y-1]

Links:
[X-1][Y]

Rechts:
[X+1][Y]

Links unten:
[X-1][Y+1]

Mitte unten:
[X][Y+1]

Rechts unten:
[X+1][Y+1]
Natürlich müsstest du prüfen, ob X = 0 oder MaxWert bzw. Y = 0 oder MaxWert ist, da du sonst ja auf ein Fekd zugreifst, dass nicht existiert.

Hoffe, dich überhaupt richtig verstanden zu haben
Ingo Bürk
Es nimmt der Augenblick, was Jahre geben.

Johann Wolfgang von Goethe
  Mit Zitat antworten Zitat
Cicaro

Registriert seit: 9. Feb 2005
285 Beiträge
 
Delphi 7 Personal
 
#3

Re: Strategie-Spiel, Nachbarländer

  Alt 16. Mai 2005, 15:05
Also meine TMap enthält einen 2D-Array mit einzelnen Felder, die zu einem bestimmten Land gehören. Problematisch ist hierbei, dass diese Felder unabhängig davon, wo das Zentrum des Landes (in TLand angegeben) sich befindet, sind. Sie könnten einzeln irgendwo liegen.
Das versuche ich in den Griff zu kriegen.
Delphi-Quellcode:
TLand = class
  Center:TPoint;
  // andere benötigte Länderinfos
end;

TMap = class
  Land:array of TLand;
  Field:array of array of Integer;
  // ...
end;
Und wenn ich die Karte zeichnen will muss ich bis jetzt immer auf diese Felder zurückgreifen und mit zwei for-Schleifen jedes Feld einzeln zeichnen. Dabei bleibt mir nichts anderes übrig als verschiedenfarbige Rechtecke zu zeichnen.

[edit]

@Airblader:
Nach deinem Vorschlag kann ich also die Grenzen zwischen den Ländern ermitteln, wobei zunächst nur die 4 NOSW-Richtungen von Bedeutung sind. Ich dachte mir, ich erstelle einen Array in TLand mit Zeigern auf alle benachbarten Länder. So müsste das soweit klappen.
Doch das eigentliche Problem ist, dass einige Länder bestimmte Eigenschaften verlieren und nicht mehr als Nachbarn gelten dürfen (z.B.: ein Gegner hat das Land erobert). Jetzt müsste man irgendwie herausfinden können, ob ein weit entferntes Land vom aktuellen erreicht werden kann. Denn eigene Länder könnten eine Kette bilden und so zu dem Land führen.

Meine erste Idee dazu war, dass ich meine Methoden mit noch mehr for-Schleifen schmücke. Allerdings ist dieser Weg bezüglich der Rechenzeit inakzeptabel !
Was jetzt ?

[/edit]
  Mit Zitat antworten Zitat
Cicaro

Registriert seit: 9. Feb 2005
285 Beiträge
 
Delphi 7 Personal
 
#4

Re: Strategie-Spiel, Nachbarländer

  Alt 8. Jun 2005, 10:25
Zum Thema Zeichnen der einzelnen Felder hier ein Screenshot.
Ich wäre dankbar, wenn mir jemand seine Ideen mitteilt, wie man die Ecken der Felder abrunden könnte.
Diese sind in einem schlichten 2D-Array verpackt.
Miniaturansicht angehängter Grafiken
screenshot0_163.gif  
  Mit Zitat antworten Zitat
Benutzerbild von Lukaro
Lukaro

Registriert seit: 24. Mai 2005
Ort: NRW->OWL
16 Beiträge
 
Delphi 2005 Personal
 
#5

Re: Strategie-Spiel, Nachbarländer

  Alt 8. Jun 2005, 16:38
Du könntest doch gucken, ob an dem aktuellen Feld Land ist oder nicht.
Wenn kein Land dann eventuell abgerundete Bilder einfügen oder selber zeichnen.
Möglicherweise hilft auch eine Linie, die von den Eckpunkten der Nachbarfelder gezogen wird.

Viel Erfolg noch!
Lukaro
A Programer is just a Tool that converts Coffein into Code.
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#6

Re: Strategie-Spiel, Nachbarländer

  Alt 8. Jun 2005, 18:00
Erstmal: Nimm für "Land" eine Delphi-Referenz durchsuchenTObjectList. Die Nachbarländer würde ich auch in eine TObjectList einfügen, natürlich AOwnsObjects = false.
Zum Abrunden: Ist wahrscheinlich übertrieben, aber ein Subdivision Surfaces-Algorithmus sollte gute Ergebnisse bringen .
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Cicaro

Registriert seit: 9. Feb 2005
285 Beiträge
 
Delphi 7 Personal
 
#7

Re: Strategie-Spiel, Nachbarländer

  Alt 13. Jun 2005, 20:09
Zitat von Khabarakh:
Erstmal: Nimm für "Land" eine Delphi-Referenz durchsuchenTObjectList. Die Nachbarländer würde ich auch in eine TObjectList einfügen, natürlich AOwnsObjects = false.
Mein Problem ist eigentlich der Nachbarländer-Such-Algorithmus selbst. Zuerst hab' ich einfach jedes Feld meiner Arrays überprüft, ob diese an einer Grenze liegen. Dabei benötigt man 2 For-Schleifen (Screenshot-Beispiel: 80x60) + Überprüfungscode. Damit hat man aber nur die unmittelbaren Nachbarländer ermittelt. Ich will aber ein weit entferntes Land, das noch über andere Nachbarländer (also über eine Kette von solchen) mit dem aktuellen verbunden ist. Wenn alle Länder der Kette einem bestimmten Spieler angehören, kann der Spieler aus dem aktuellen Land in das 'weit entfernte' reisen. Ist die Kette gerissen ( sprich ein Land aus der Kette gehört dem gegnerischen Spieler ), dann kann man aus dem aktuellen Land nicht in das 'wei entfernte'.

Wenn ich also die 2 for-Schleifen in weitere for-Schleifen lege, dauert die Berechnung dieser Kette Minuten. Es soll aber kaum eine Sekunde Berechnungszeit benötigen.
Da dachte ich mir Berechne für jedes Land die unmittelbaren Nachbarn zur OnCreate-Zeit und zur Spiel-Zeit müsste das irgendwie über Zeiger ablaufen. Doch wie ?
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

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

Re: Strategie-Spiel, Nachbarländer

  Alt 14. Jun 2005, 06:23
Ist doch relativ einfach

Du hast deinen 2 Schleifen Algortihmus, korrekt ?
Du benötigst noch in jedem TLand Objekt eine Liste von TLand Objekten, nennen wir sie mal "NachbarLaender". In deiner Suchschleife erkennst du nun den Fall das du auf ein Grenz-Kästchen gestoßen bist. In diesem Moment hast du ermittelt welches TLand auf ein anderes trifft. In beiden "NachbarLaender" Listen dieser beiden TLand Objekte fügst du nun wechselseitig das jeweils angenzende TLand ein, aber nur wenn es noch nicht eingetragen wurde.
Am Ende deiner Suchschleife hast du nun zu jedem TLand in dessen "NachbarLaender" Liste eine Verlinkung auf alle angrenzenden Länder.

Gruß Hagen
  Mit Zitat antworten Zitat
Cicaro

Registriert seit: 9. Feb 2005
285 Beiträge
 
Delphi 7 Personal
 
#9

Re: Strategie-Spiel, Nachbarländer

  Alt 6. Jul 2005, 19:00
So weit bin ich ja auch schon, aber
Zitat:
Ich will aber ein weit entferntes Land, das noch über andere Nachbarländer (also über eine Kette von solchen) mit dem aktuellen verbunden ist. Wenn alle Länder der Kette einem bestimmten Spieler angehören, kann der Spieler aus dem aktuellen Land in das 'weit entfernte' reisen. Ist die Kette gerissen ( sprich ein Land aus der Kette gehört dem gegnerischen Spieler ), dann kann man aus dem aktuellen Land nicht in das 'wei entfernte'.
// Rechtschreibfehler !

Das hier muss ich noch mit einem möglichst geringen Speicherplatz- und Zeitverbrauch realisieren.
  Mit Zitat antworten Zitat
Ruppi

Registriert seit: 12. Apr 2005
7 Beiträge
 
#10

Re: Strategie-Spiel, Nachbarländer

  Alt 6. Jul 2005, 21:10
Wenn du weißt welches land welche Nachbarländer hat, dann kannst du jedem land je einen Pointer auf jedes der Nachbarländer geben.
Dann fütterst du einen Wegsuchalgorithmus (vgl A*) mit den kanten Knoten und der puckt dann geschwind aus ob es eine Verbundung gibt oder nicht. wenn du nicht die schnellste verbindung suchst dann reicht auch ein einfacherer WegSuchAlgo.

mfg Ruppi

pS : wird das ein Risikoklon? Klingt so ... von wegen reisen etc...
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 20:04 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