Hi,
ich versuche ein Spielfeld zu zeichnen, das bis zu einer bestimmten Reihe jeweils um
ein Feld zunimmt und ab der Mitte jeweil wieder um ein Feld abnimmt.
Nun möchte ich nicht jede Reihe per Hand definieren sondern überlege an irgendeiner
cleveren Schleife. Hat jemand ne Idee??
So würde es gehen ist aber wenig effektiev
//1. Reihe
for (int i = 1; i < 6; i++) {
g.drawOval(369,55,40,40);
...
//2.Reihe
for(int i = 1; i < 7; i++){
g.fillOval(329,95,40,40);
Pseudocode-Beispiel:
Schleife: Alle Reihen durchgehen
Wenn aktuelle Reihe vor Mitte
Feldanzahl um eins erhöhen
Oder nach Mitte
Feldanzahl um eins verringern
Ende Wenn
Schleife: Alle Felder durchgehen
Irgendwas mit den Feldern machen
Ende Schleife
Ende Schleife
A wise man can learn more from a foolish question than a fool can learn from a wise answer!
Bruce Lee
Populanten von Domizilen mit fragiler, transparenter Außenstruktur sollten sich von der Translation von gegen Deformierung resistenter Materie distanzieren!
Wer im Glashaus sitzt, sollte nicht mit Steinen werfen.
Danke, vom Prinzip ist es mir jetzt klar, aber irgendwie komme ich nicht drauf,...
Vielleicht kannst du mir mit ein wenig Code weiterhelfen. Danke!
//1. Reihe
for (int i = 1; i < 6; i++) {
g.setColor(dunkelrot);
int temp = (350+(abstand_x*i));
g.fillOval(temp,55,40,40);
g.setColor(Color.white);
g.setStroke(new BasicStroke(2.0F));
g.drawOval((temp-x),(55),40,40);
}
//2.Reihe
for (int i = 1; i < 7; i++){
g.setColor(dunkelrot);
int temp = (329+(abstand_x*i));
g.fillOval(temp,95,40,40);
g.setColor(Color.white);
g.setStroke(new BasicStroke(2.0F));
g.drawOval((temp-x),(95),40,40);
}
Hallo MisterXY,
nimm einfach zwei ineinander geschachtelte Schleifen. That's all.
herbivore
Original von herbivore
nimm einfach zwei ineinander geschachtelte Schleifen. That's all.
So hatte ich das auch gemeint gehabt.
Äußere Schleife: Reihen durchgehen.
Innere Schleife: Einzelne Felder durchgehen.
A wise man can learn more from a foolish question than a fool can learn from a wise answer!
Bruce Lee
Populanten von Domizilen mit fragiler, transparenter Außenstruktur sollten sich von der Translation von gegen Deformierung resistenter Materie distanzieren!
Wer im Glashaus sitzt, sollte nicht mit Steinen werfen.
Ein zweidimensionaler Array funktioniert reicht simpel, wenn Reihen und Spalten übereinstimmen. Aber doch nicht mit unterschiedlicher Anzahl Spalten je Reihen,...
Oder???
Also wüßte jetzt nicht wie,..
Du kannst statt einem 2dimesnionalen Array auch ein "Array im Array" erstellen:
string[][] test = new string[2][];
test[0] = new string[3];
test[1] = new string[10];
A wise man can learn more from a foolish question than a fool can learn from a wise answer!
Bruce Lee
Populanten von Domizilen mit fragiler, transparenter Außenstruktur sollten sich von der Translation von gegen Deformierung resistenter Materie distanzieren!
Wer im Glashaus sitzt, sollte nicht mit Steinen werfen.
Hallo MisterXY,
nur mal so: fürs Zeichnen brauchst du kein Array.
herbivore
Das Problem ist das ich in der ersten Zeile im Array 5, in der zweiten Zeile 6 Felder, usw.. benötige, bis zur 5 Zeile, dann sollen die Feler wieder weniger werden,...
Wie soll das denn gehen???
Ich weiß ich keinen Array zum Zeichnen benötige, aber wie soll ich denn sonst 60 Kreise zeichnen bei denen sich die Koordinaten in jeder Zeile und Spalte ändert?
Aber an dieser Stelle möchte ich mich erstmal für eure Hilfe bedanken 😉!!!!
Hallo MisterXY,
erstens könntest du ein Array benutzen, das so breit ist, wie die breiteste Zeile und die Felder, die du nicht brauchst, einfach leer lassen.
Zweitens hat ja progger schon geschrieben wie du Arrays baust, die in jeder Zeile genau so lang sind, wie du sie brauchst.
Und drittens brauchst du kein Array nur um die Koordinaten zu bestimmen, an die die Kreise gezeichnet werden. Sondern das kriegst du einfach über Koordinatenbrechnung mit Hilfe der Laufvariablen hin. So zeichnet der folgende Code 6 Kreise nebeneinander. Analog geht das mit einer äußeren Schleife für y.
for (int x = 0; x < 6; x++) {
g.drawOval(369+x*40,55,40,40);
}
herbivore
Es kann sein, dass ich mich vielleicht gerade etwas doof anstelle oder so,...
Aber eure Bemühungen helfen mir bis jetzt noch nicht auf den Sprung. Für die erste Reihe die Kreise zu zeichnen ist ja auch kein Problem und für die zweite Reihe auch noch net, aber dann wirds schwierig.
Vielleicht könnte sich jemand dafür nochmal die Mühe machen und mir den Code für die ersten drei Reihen schreiben,...
So solls mal werden:
http://www.coolmen.ch/abalone/abalone.htm
Danke!
Wenn die Felder versetzt sind, ist das natürlich was anderes. Ich würds wahrscheinlich so machen:
float aktuellesY=irgendwas;
// Die Anzahl der Felder in der aktuellen Reihe:
int feldAnzahl=5;
// Reihen druchgehen:
for (int i=0; i<9; i++){
// An welchem x man sich gerade befindet. Anfangs die Stelle, an welcher diese Reihe anfängt:
float aktuellesX=mitteSpielfeld-feldAnzahl/2.0F*feldBreite;
// Felder durchgehen:
for (int j=0;j<feldAnzahl;j++){
// Feld zeichnen an (aktuellesX|aktuellesY).
// ...
aktuellesX+=feldbreite;
}
if (i<4){
feldAnzahl++;
} else {
feldAnzahl--;
}
aktuellesY+=feldHöhe;
}
Ich hoffe du verstehst, wie das laufen soll. Ich garantiere auch nicht, dass es läuft, ich habs nicht getestet! Bei Problemen sags einfach.
Vielleicht hat auch wer anders ne bessere Idee 😉
A wise man can learn more from a foolish question than a fool can learn from a wise answer!
Bruce Lee
Populanten von Domizilen mit fragiler, transparenter Außenstruktur sollten sich von der Translation von gegen Deformierung resistenter Materie distanzieren!
Wer im Glashaus sitzt, sollte nicht mit Steinen werfen.
Hallo MisterXY,
diese Frage verleitet mich zu dem wohlmeinenden Ratschlag: Schnapp dir ein Buch und arbeite dich erstmal in (geschachtelte) Schleifen ein.
Ich denke mal die kürzeste und geschlossenste Lösung wäre:
for (int y = 0; y < 9; ++y) {
for int x = 0; x < 9 - Math.Abs (y - 4); ++x) {
}
}
herbivore