Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Kippen eines 2d Arrays um 90 Grad (https://www.delphipraxis.net/191846-kippen-eines-2d-arrays-um-90-grad.html)

ShortAnni 24. Feb 2017 13:37

Delphi-Version: 5

Kippen eines 2d Arrays um 90 Grad
 
Hallo,

ich will mich hier mal kurz vorstellen. Ich lese hier schon einige Zeit mit, bin aber eigentlich immer noch Anfänger. Mit Arduinos kenne ich mich etwas besser aus. Mit Delphi habe ich erst vor ein paar Wochen angefangen, eigentlich um mit meinen Arduinos zu kommunizieren.

Jetzt zu meinem Problem, für das ich keine Lösung gefunden habe. Ich möchte ein kleines Spiel programmieren. Dazu habe ich verschiedene Bausteine die aus einem 2d Array bestehen und jede Zelle stellt eine Farbe dar.

Ich möchte die 2d Arrays kippen. Die Arrays habe immer die gleiche Anzahl von Reihen und Spalten.
In Delphi sind sieht das so aus:
Code:
Baustein1 [0 .. 2, 0 .. 2] of TColor;
Baustein2 [0 .. 3, 0 .. 3] of TColor;
Baustein3 [0 .. 4, 0 .. 4] of TColor;
.
.
Baustein2 [0 .. 15, 0 .. 15] of TColor;
So soll das aussehen wenn ich beispielsweise Baustein2 kippe. Durch Mehrfaches kippen wird der Baustein also gedreht, ähnlich wie bei Tetris.

Original
1,2,3,4
5,6,7,8
9,10,11,12
13,14,15,16

Gekippt
4,8,12,16
3,7,11,15
2,6,10,14
1,5,9,13

Ich habe jetzt schon viel dazu gelesen und auch einige Beispiele gefunden. Aber entweder passen die gar nicht oder sind in einer anderen Sprache (c#) die ich nicht gut genug verstehe um das nach Delphi zu übersetzten.

Ich wollte das ganze in etwa so aufrufen:

Code:
Baustein1 := kippen(Baustein1);
Also das das Original Array in gekippter Form vorliegt.

Hat jemand dazu ein Anfänger freundliches Beispiel in Delphi, oder gibt es evtl. schon eine fertige Funktion dafür.

Würde mich freuen wenn mir da jemand helfen kann.

LG Anni

P.S. Ich habe Delphi 10.1 in einer Schulversion

alleinherrscher 24. Feb 2017 14:00

AW: Kippen eines 2d Arrays um 90 Grad
 
Hey, willkommen in der DP.

Überleg dir mal, wie man die beiden Indizes des Arrays verwenden kann, um Spalten und Zeilen in dem Array zu vertauschen. Also insbesondere: Was passiert, wenn du anstelle von Baustein2[i,j] schreibst: Baustein[j,i].

Beste Grüße,
Michael

Rollo62 24. Feb 2017 14:00

AW: Kippen eines 2d Arrays um 90 Grad
 
Hallo Anni,

geht es dir um die Darstellung, oder um etvl. Rechenoperationen ?

Wenn die Delphi 10.1 hast dann käme doch auch Firemonkey in Frage, da kannst du einfach
Controls definieren, und dann mit RotationAngle drehen.
Ist es so etwas was du suchst ?

Bei Rechenoperationen könnten die Matrixfunktionen hilfreich sein, aber da wird
es dann Mathematiklastig.

Rollo

ShortAnni 24. Feb 2017 14:08

AW: Kippen eines 2d Arrays um 90 Grad
 
Hallo,

mir geht es eigentlich nur um die Rechenoperation.

Also wie berechne ich die neue Zelle im Array? Wenn ich also z.b. Baustein[3,5] habe wie kann ich berechnen wo ich den Wert (nach dem kippen) in ein Temporäres Array TMP[?,?] hin kopieren muss.

LG Anni

ShortAnni 24. Feb 2017 14:22

AW: Kippen eines 2d Arrays um 90 Grad
 
@alleinherrscher

Dann würde ich das Array sozusagen diagonal rüberklappen... Also Rechte Ecke oben, wäre dann linke Ecke unten. ?!? Das ist aber nicht was ich brauche, oder verstehe ich das nicht richtig?

Uwe Raabe 24. Feb 2017 14:23

AW: Kippen eines 2d Arrays um 90 Grad
 
Zitat:

Zitat von ShortAnni (Beitrag 1362553)
Also wie berechne ich die neue Zelle im Array? Wenn ich also z.b. Baustein[3,5] habe wie kann ich berechnen wo ich den Wert (nach dem kippen) in ein Temporäres Array TMP[?,?] hin kopieren muss.

Anhand deines Beispiels:

Delphi-Quellcode:
result[I, J] := source[J, High(source) - I];

Rollo62 24. Feb 2017 14:30

AW: Kippen eines 2d Arrays um 90 Grad
 
Also sowas:

https://rosettacode.org/wiki/Matrix_...osition#Pascal
http://www.entwickler-ecke.de/topic_..._104636,0.html
http://stackoverflow.com/questions/4...ensional-array

Rollo

ShortAnni 24. Feb 2017 14:42

AW: Kippen eines 2d Arrays um 90 Grad
 
@Uwe Raabe

Suuuper.... Vielen Dank. Jetzt habe ich es hinbekommen.

LG Annika


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:10 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz