Risiko map -Einheitenbewegung

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

mas93

Betreff: Risiko map -Einheitenbewegung

BeitragSo, Nov 25, 2007 16:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi Leute,

Ich habe mal eine Frage und zwar:
Ich habe eine map, wie bei dem Brettspiel risiko z.b.:
user posted image

Wie soll ich das jetzt machen.
Ich will ja testen, wenn eine Einheit jetzt z.b in Land 1 steht, ob es zu Land2 laufen kann(also wenn es angrenzt an Land1)

Bei einem Dimfeld mit rechtecken wäre das ja einfach, da könnte man einfach map(x+1,y) machen, da bei risiko die felder aber keine rechtecke sind, weiss ich nicht wie ich das machen soll...


wäre nett wenn ihr mir helfen könntet.

mfg
mas93
www.lpbase.de
Meine Linkin Park Fanseite[Noch im Aufbau]
 

HyDr0x

BeitragSo, Nov 25, 2007 16:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Dimensioniere dein Dimfeld doch in Pixel, 1*1 Pixel große Felder also Wink . Dann ist es zwar A**** langsam aber es geht ^^. Oder du machst es in 3D. Ansonsten weiß ich auch nicht weiter glaube das das wohl nicht geht ....

mas93

BeitragSo, Nov 25, 2007 16:16
Antworten mit Zitat
Benutzer-Profile anzeigen
und wie würde das in 3d gehen?

(2d lösung immer noch gesucht)

mfg
mas93
www.lpbase.de
Meine Linkin Park Fanseite[Noch im Aufbau]

Silver_Knee

BeitragSo, Nov 25, 2007 16:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Types wäre noch ne lösung:
Code: [AUSKLAPPEN]
Type land
Field angrenzendes.land[10]
End Type


Das würde Speicher für 10 angrenzende länder pro land reservieren. Das geht immerhin schneller als die letzte Antwort verbraucht aber immernoch mehr speicher als gebraucht. (zb wenn ein land nur 3 angrenzende länder hat, dann müssen die anderen 7 mit ner "Null" belegt werden)

Da das eig alles Const. sind kann man das auch über Select lösen: jedes land bekommt ne id. und dann kommt ne func wie:
Code: [AUSKLAPPEN]
Functition GetAngrenzendes(land,count)
Select land
case 1;Deutschland
 Select count
 Case 0
  return 2;=Frankreich
 Case 1
......
......
 End Select
Case 2;Frankreich
......
......
End Select
End Function

Das ist aber Ein haufen schreib arbeit dafür ist es -soweit ich es überblicken kann- die schnellste und arbeitsspeichersparende variante die mir einfallt

Cardonic

BeitragSo, Nov 25, 2007 16:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Du speicherst die Länder in Types.
Jeder Type beinhaltet die nötigen Informationen (wie z.b. Position, Name, Besetzer, Anz. Einheiten usw.)
In einer Liste speicherst du die angrenzenden Länder.

BladeRunner

Moderator

BeitragSo, Nov 25, 2007 16:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Schau dir an an wieviele andere Länder jedes Land angrenzt. Das Land mit den meisten Nachbarn ist das an dem du dich orientieren musst.

Nun erstellst du mit Dim ein 2-dimensionales Array welches die Nummern der angrenzenden Länder für jedes Land enthält.

Bsp.:

Es gibt 8 Länder, und land 1 grenzt an die meisten davon.
Land 1 grenzt an Land 3, 5, 7 und 8, das sind 4 Nachbarn.

Dim grenzen(8,4) ;Anzahl Länder, Nachbarn
grenzen(1,1) = 3
grenzen(1,2)=5
grenzen(1,3)=7
grenzen(1,4=8

Das ist nicht unbedingt die sauberste Methode, aber sie funktioniert. wenn in Grenzen bei einem Feld 0 steht, ist da eben kein Nachbar.
Die Koordinaten der einzelnen Länder (also die Stelle wo du die Armeen einzeichnen willst) kannst du ja in einem Separaten Array festhalten.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92
 

HyDr0x

BeitragMo, Nov 26, 2007 16:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich dachte er will wissen wie er die Landesgrenzen genau definieren kann, z.B. auf Kollision. Wann zum Beispiel eine Einheit in ein bestimmtes Land eindringt, geht das in 2D eigentlich? Weil die Grenzen ja unregelmäßig sind kann man da ja schlecht mit Tiles arbeiten, und auch Types bringen nicht sehr viel ....

BladeRunner

Moderator

BeitragMo, Nov 26, 2007 16:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Das ginge ganz exakt mit ql:imagescollide und einer gesetzten ql:maskimage, Hydrox, und sollte daher nicht das Problem sein.
  • Zuletzt bearbeitet von BladeRunner am Mo, Nov 26, 2007 17:00, insgesamt einmal bearbeitet
 

HyDr0x

BeitragMo, Nov 26, 2007 17:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja aber wäre es nicht ein wenig umständlich, wenn man jedes einzelne Land der Erde erst malen und als Datei abspeichern müsste? Weil genau darauf wollte ich eigentlich verzichten ...

EDIT Noch dazu ist imagescollide ziemlich langsam.

BladeRunner

Moderator

BeitragMo, Nov 26, 2007 17:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Für die paar dutzend Bilder wäre es sicher zu verschmerzen. Und sorry, aber wenn du was gutes erschaffen willst musst du eben auch mal Zeit investieren.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92
 

HyDr0x

BeitragMo, Nov 26, 2007 17:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Okay wenn es keine andere Lösung gibt muss ich eben in den sauren Apfel beissen Very Happy thx für die Info

MichiMeister

BeitragMo, Nov 26, 2007 19:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Definiere doch einfach ein Stringarray.

Dim Länder$(anzahl Länder)

Dann weist du jedem String die Länder mit gemeinsamer Grenze zu.

Länder$(0)="BCE" ; ist Land A
Länder$(1)="ADFG" ; ist Land B

usw.

Wenn du wissen willst, ob du von Land A nach C marschieren kannst, fragst du das mit "Instr" ab.

mas93

BeitragDi, Nov 27, 2007 19:36
Antworten mit Zitat
Benutzer-Profile anzeigen
hmm, ich habe mir überlegt, dass ich es jetzt doch ganz anders mache.
Und zwar mit Hexfeldern.

Nur habe ich eine Frage.

Ich habe ein map array z.b.: Dim map(15,31)
Wie kann ich jetzt die hexfelder zeichnen?

Bei rechtecken wäre das ja einfach, aber da die Hexfelder ja immer so verschoben find, bekomm ichs einfach nicht hin...

mfg
mas93
www.lpbase.de
Meine Linkin Park Fanseite[Noch im Aufbau]

KddC

BeitragMi, Nov 28, 2007 15:36
Antworten mit Zitat
Benutzer-Profile anzeigen
http://www.gamedev.net/referen...cle747.asp
da is fürs erste alles was du zu diesem thema wissen musst...ist zu iso und hex tiles... Wink

kannst dir ja mal anschauen
mfg
Mfg Kddc

Macbook Pro 13" 2,66Ghz
 

HyDr0x

BeitragDo, Nov 29, 2007 18:26
Antworten mit Zitat
Benutzer-Profile anzeigen
MichiMeister hat Folgendes geschrieben:
Definiere doch einfach ein Stringarray.


Ich würde es für ein echtzeit Strategiespiel benutzen, daher möchte ich wissen ob eine Einheit die Landesgrenze pixelgenau überschreitet. Dabei nützen mir Arrays nichts, imagescollide ist die einzige Möglichkeit die ich sehe.

ZaP

BeitragDo, Nov 29, 2007 18:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Machs doch so, dass du in eine Datei für jedes Land alle Nachbarn schreibst. So kannst du leicht prüfen, ob der Zug möglich ist, der Aufwand dabei ist zwar ein bisschen groß, aber für ein gutes Spiel investierst du sicher gerne Zeit Wink

//EDIT: etwa nach der Syntax

Code: [AUSKLAPPEN]
[Preußen]
Polen
Timbuktu
[Südafrika]
das-land-über-südafrika
Island
USA
...


Und ja, das Beispiel hat nichts mit den echten Ländergrenzen zu tun...
Starfare: Worklog, Website (download)

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group