AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Kippen eines 2d Arrays um 90 Grad

Ein Thema von ShortAnni · begonnen am 24. Feb 2017 · letzter Beitrag vom 24. Feb 2017
Antwort Antwort
ShortAnni

Registriert seit: 24. Feb 2017
6 Beiträge
 
Delphi 10.1 Berlin Professional
 
#1

Kippen eines 2d Arrays um 90 Grad

  Alt 24. Feb 2017, 13:37
Delphi-Version: 5
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

Geändert von ShortAnni (24. Feb 2017 um 13:39 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von alleinherrscher
alleinherrscher

Registriert seit: 8. Jul 2004
Ort: Aachen
797 Beiträge
 
Delphi XE2 Professional
 
#2

AW: Kippen eines 2d Arrays um 90 Grad

  Alt 24. Feb 2017, 14:00
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
„Software wird schneller langsamer als Hardware schneller wird. “ (Niklaus Wirth, 1995)

Mein Netzwerktool: Lan.FS

Geändert von alleinherrscher (24. Feb 2017 um 14:03 Uhr)
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
3.908 Beiträge
 
Delphi 12 Athens
 
#3

AW: Kippen eines 2d Arrays um 90 Grad

  Alt 24. Feb 2017, 14:00
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
  Mit Zitat antworten Zitat
ShortAnni

Registriert seit: 24. Feb 2017
6 Beiträge
 
Delphi 10.1 Berlin Professional
 
#4

AW: Kippen eines 2d Arrays um 90 Grad

  Alt 24. Feb 2017, 14:08
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
  Mit Zitat antworten Zitat
ShortAnni

Registriert seit: 24. Feb 2017
6 Beiträge
 
Delphi 10.1 Berlin Professional
 
#5

AW: Kippen eines 2d Arrays um 90 Grad

  Alt 24. Feb 2017, 14:22
@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?
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.006 Beiträge
 
Delphi 12 Athens
 
#6

AW: Kippen eines 2d Arrays um 90 Grad

  Alt 24. Feb 2017, 14:23
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:

result[I, J] := source[J, High(source) - I];
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
3.908 Beiträge
 
Delphi 12 Athens
 
#7

AW: Kippen eines 2d Arrays um 90 Grad

  Alt 24. Feb 2017, 14:30
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
  Mit Zitat antworten Zitat
ShortAnni

Registriert seit: 24. Feb 2017
6 Beiträge
 
Delphi 10.1 Berlin Professional
 
#8

AW: Kippen eines 2d Arrays um 90 Grad

  Alt 24. Feb 2017, 14:42
@Uwe Raabe

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

LG Annika
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:11 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz