- Registriert
- 3 Aug. 2014
- Beiträge
- 28.573
Hallo,
im Zuge des Snake-Contest suche ich gerade nach einem Weg Wände, nach bestimmten vorgegebenen Mustern, erzeugen zu lassen, ich weiß aber nicht recht wie ich die Daten in Code abbilden kann.
Da ich SDL2 verwende, wollte ich die SDL_Point Klasse nutzen, welche eine X und Y Koordinate speichern kann.
Ein Beispiel der Koordinaten einer "Eckwand", angelegt im 90 Grad Winkel:
[0, 2, 0, -2, 2, 0]
Das heißt die Wand-Punkte liegen auf einem bestimmen X, Y Punkt/Feld und würden dann wie eine Turtle Grafik abgelaufen werden:
Wandert von der aktuellen Position zu "0x, +2y", geht wieder zurück mit "0x, -2y", wandert nach rechts zu "+2x, 0y".
Daraus sollte dann eine Ecke konstruiert werden.
Die Datenstruktur um die Wand zu speichern würde in etwa so aussehen:
[src=c]typedef struct wallShape {
int length; // Anzahl der Wege im Shape (im Beispiel 3)
SDL_Point* points; // Die Zeichenpunkte (3 mal jeweils X und Y-Koordinaten)
} wallShape;[/src]
Ich hatte jetzt daran gedacht eine Funktion zu schreiben, die einmal die Anzahl (3) und die Punkte als Array (3 mal X,Y-Koordinaten) erhält und das wallShape mit allokiertem Speicher und gesetzten Werten zurückgibt.
Aber ich weiß nicht wie es möglich wäre die Anzahl der Punkte dynamisch an die Funktion zu übergeben da die Länge dieser variable sein soll.
Das Problem was dabei immer aufkommt, ich kann ein Array ala:
[src=c]int corners[10];
corners = {0, 2, 0, -2, 2, 0};[/src]
dazu verwenden die Daten an die Funktion zu übergeben, also:
createWallShape(3, corners);
Aber gibt es einen Weg die Funktion mit Parametern zu überladen also das ich "createWallShape(3, [0, 2, 0, -2 ...])" irgendwie umsetzen kann oder geht nur der Weg mit einem fixen Array das immer anders gesetzt wird und ist das überhaupt "sinnvoll" gelöst?
Ich stehe gerade ein wenig auf dem Schlauch wie man das umsetzen könnte und wäre über einen Denkanstoß dankbar.
Eine andere Idee wäre, meiner Meinung nach, die Wände mutieren und zufällige Shapes generieren zu lassen, in der man nur die Anzahl der Wandteile vorgibt.
Aber das wäre vermutlich mit den ganzen Regeln und Corner-Cases noch komplexer zu realisieren, außerdem wollte ich schon die Formen vorgeben lassen können.
im Zuge des Snake-Contest suche ich gerade nach einem Weg Wände, nach bestimmten vorgegebenen Mustern, erzeugen zu lassen, ich weiß aber nicht recht wie ich die Daten in Code abbilden kann.
Da ich SDL2 verwende, wollte ich die SDL_Point Klasse nutzen, welche eine X und Y Koordinate speichern kann.
Ein Beispiel der Koordinaten einer "Eckwand", angelegt im 90 Grad Winkel:
[0, 2, 0, -2, 2, 0]
Das heißt die Wand-Punkte liegen auf einem bestimmen X, Y Punkt/Feld und würden dann wie eine Turtle Grafik abgelaufen werden:
Wandert von der aktuellen Position zu "0x, +2y", geht wieder zurück mit "0x, -2y", wandert nach rechts zu "+2x, 0y".
Daraus sollte dann eine Ecke konstruiert werden.
Die Datenstruktur um die Wand zu speichern würde in etwa so aussehen:
[src=c]typedef struct wallShape {
int length; // Anzahl der Wege im Shape (im Beispiel 3)
SDL_Point* points; // Die Zeichenpunkte (3 mal jeweils X und Y-Koordinaten)
} wallShape;[/src]
Ich hatte jetzt daran gedacht eine Funktion zu schreiben, die einmal die Anzahl (3) und die Punkte als Array (3 mal X,Y-Koordinaten) erhält und das wallShape mit allokiertem Speicher und gesetzten Werten zurückgibt.
Aber ich weiß nicht wie es möglich wäre die Anzahl der Punkte dynamisch an die Funktion zu übergeben da die Länge dieser variable sein soll.
Das Problem was dabei immer aufkommt, ich kann ein Array ala:
[src=c]int corners[10];
corners = {0, 2, 0, -2, 2, 0};[/src]
dazu verwenden die Daten an die Funktion zu übergeben, also:
createWallShape(3, corners);
Aber gibt es einen Weg die Funktion mit Parametern zu überladen also das ich "createWallShape(3, [0, 2, 0, -2 ...])" irgendwie umsetzen kann oder geht nur der Weg mit einem fixen Array das immer anders gesetzt wird und ist das überhaupt "sinnvoll" gelöst?
Ich stehe gerade ein wenig auf dem Schlauch wie man das umsetzen könnte und wäre über einen Denkanstoß dankbar.
Eine andere Idee wäre, meiner Meinung nach, die Wände mutieren und zufällige Shapes generieren zu lassen, in der man nur die Anzahl der Wandteile vorgibt.
Aber das wäre vermutlich mit den ganzen Regeln und Corner-Cases noch komplexer zu realisieren, außerdem wollte ich schon die Formen vorgeben lassen können.