Autor Beitrag
Sylexx
Hält's aus hier
Beiträge: 4



BeitragVerfasst: So 21.03.10 18:27 
Hallo,

ich beschäftige mich z.Z. mit der Erstellung eines sechseckigen Feldes, welches 61 Kreise beinhaltet. Es handelt sich hierbei um das Spiel "Abalone". Zur Verdeutlichung ein Beispiel: page.mi.fu-berlin.de...t/sumo/andere/g5.png

Habe schon etliche Foren erfolglos durchsucht. Ich sitze schon ne ganze Weile an der Erstellung des SPielfeldes und finde einfach keinen Ansatz sprich wie ich beginne. Ich weiß, aus welchen Bestandteilen ein Sechseck besteht, das die Mittelpunkte der Kreise berechnet werden können. Man könnte es sich auch so vorstellen: homepages.di.fc.ul.p.../gv/boards/conn6.gif

Wäre über jeden Ansatz bzw. Hilfestelltung sehr froh.
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8535
Erhaltene Danke: 473

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: So 21.03.10 20:10 
Hallo und :welcome: in der Entwickler-Ecke,

Du kannst ja erstmal damit anfangen, die 9 Kreise in der Mitte zu zeichnen. Die Koordinaten der Kreise darüber bekommt man mit Pythagoras raus: Die Kreismittelpunkte bilden jeweils gleichseitige Dreiecke. Wenn du den horizontalen Abstand kennst, kannst du daraus auch den vertikalen berechnen und hast damit die Koordinaten der Kreise in den anderen Zeilen.
g5
Einloggen, um Attachments anzusehen!
_________________
We are, we were and will not be.
Sylexx Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Mo 22.03.10 01:28 
Danke erstmal für deine Antwort. Die 9 Kreise habe ich nun und pfeile gerade daran, die Kreise in den anderen Zeilen zu erstellen.

Was mich bei der Erstellung noch beschäftigt, ist, wie ich später, wenn ich das Feld habe, diese Kreise ansteuern kann...ich zeichne
ja momentan nur...
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19276
Erhaltene Danke: 1741

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 22.03.10 03:09 
Vielleicht gibt dir mein Periodensystem da eine Idee, der Quelltext sieht zwar erstmal vielleicht etwas kompliziert aus, aber das sieht nur so aus. :mrgreen:
www.delphi-forum.de/viewtopic.php?p=557541
jfheins
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 918
Erhaltene Danke: 158

Win 10
VS 2013, VS2015
BeitragVerfasst: Mo 22.03.10 11:24 
Ich würde ein schnuckeliges schiefwinkliges Koordinatensystem aufstellen, mit dem einen Einheitsvektor nach rechts un der zweite im 60° Winkel nach oben rechts. Die Einheitsvektoren im kartesischen Koordinatensystem kannst du dann einmal berechnen (sollte nicht allzu schwer sein)

Dann kannst du prozeduren schreiben wie z.B. MaleKreis(1,1) die den Kreis an Position 1,1 (ein nach rechts, ein nach oben rechts) zeichnet.

Die Grenzen des Sechsecks sind dann wie folgt:
max(x,y) <= (n-1)
abs(x+y) <= (n-1)
wobei n die Kantenlänge des Sechsecks ist. (beide Bedingungen müssen erfüllt werden)
Sylexx Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Mo 22.03.10 14:20 
Also ich habe das obere Hälfte des Spielfeldes erstmal so erstellt, wie es Gausi in etwa beschrieben hat (siehe Anhang).
Habe die 9 Kreise in der Mitte gezeichnet und habe dann die Positionen der darüber liegenden Zeilen/Kreise anhand des Pythagoras berechnet.

Habe mir mal das Periodensystem angeschaut, könnte auch zu einer guten Lösung verhelfen.

Ist die Frage, was jetzt am Besten ist und ob ich mit meinem jetzigen Lösungsansatz auch später gut fahre...
Einloggen, um Attachments anzusehen!
jfheins
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 918
Erhaltene Danke: 158

Win 10
VS 2013, VS2015
BeitragVerfasst: Mo 22.03.10 18:23 
Ich glaube das kommt auch drauf an, ob du danach noch was damit machen möchtest. Für solche Sachen wie "Welche Felder sind benachbart? Wiviele Felder liegen zwischen dem da und dem da?" ist ein passendes Koordinatensystem schon praktisch ;)

Ich hatte ein bisschen freie Zeit, und hab auc direkt eine Norm entwickelt:
Abstand = MIN(ABS(x) + ABS(y) ,ABS(x+y) + MIN(ABS(x), ABS(y)))
gibt den Anstand eines Punkts zum Ursprung an. Anstand zwischen zwei Punkten geht dann entsprechend.
Sylexx Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Di 23.03.10 00:46 
Ohje, ich war noch nie so gut in Algebra. Aber nun gut, das mit dem Koordinatensystem sollte ich hinkriegen, allerdings verstehe ich nicht ganz, was du mit diesem Satz ausdrücken willst:

"Die Einheitsvektoren im kartesischen Koordinatensystem kannst du dann einmal berechnen (sollte nicht allzu schwer sein)"

Meinst du damit die Achsen und deren Abschnitte? Die muss ich ja dann auch aufteillen, damit ich die Koordinaten zuordnen kann...
jfheins
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 918
Erhaltene Danke: 158

Win 10
VS 2013, VS2015
BeitragVerfasst: Di 23.03.10 01:00 
Damit meinte ich die Umwandlung von "hex-koordinaten" nach kartesische Koordinaten.

Wenn du zum Beispiel ein Canvas hast, in dem die X-Achse nach rechts zeigt und die Y-Achse nach unten, dann gilt
(hex) = (kartesisch)
(1, 0) = (1, 0)
(0, 1) = (0.5, sqrt(3)/2)

Wenn du also die Position (5, -2) auf dem Canvas darstellen möchtest, rechnest du einfach
5 * (1, 0) + -2* (0.5, sqrt(3)/2)
= (4, -sqrt(3)) ~ (4, 1.732)

letzeres ist dann diene x-y-Koordinate, mit der du auf das Canvas malen kannst.