Autor |
Beitrag |
Sylexx
Hält's aus hier
Beiträge: 4
|
Verfasst: 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
Beiträge: 8535
Erhaltene Danke: 473
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: So 21.03.10 20:10
Hallo und 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.
Einloggen, um Attachments anzusehen!
_________________ We are, we were and will not be.
|
|
Sylexx
Hält's aus hier
Beiträge: 4
|
Verfasst: 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
Beiträge: 19276
Erhaltene Danke: 1741
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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.
www.delphi-forum.de/viewtopic.php?p=557541
|
|
jfheins
Beiträge: 918
Erhaltene Danke: 158
Win 10
VS 2013, VS2015
|
Verfasst: 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
Hält's aus hier
Beiträge: 4
|
Verfasst: 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
Beiträge: 918
Erhaltene Danke: 158
Win 10
VS 2013, VS2015
|
Verfasst: 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
Hält's aus hier
Beiträge: 4
|
Verfasst: 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
Beiträge: 918
Erhaltene Danke: 158
Win 10
VS 2013, VS2015
|
Verfasst: 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.
|
|