JavaKara Pyramide

lily

Aktives Mitglied
hallo :)

ich habe mit javakara angefangen und versuche gerade eine pyramide zu erstellen, ich finde leider
nicht den fehler den ich gemacht habe, kara legt zwar mit blättern eine pyramide, aber sie lässt immer
zwischen zwei blätter ein feld frei und ich finde einfach nicht den fehler, ich möchte das kara
eine komplette pyramide legt und keine freiräume lässt.
hoffe ihr könnt helfen, werd langsam schon ganz kirre :autsch:...


public class Pyramide extends JavaKaraProgram
{
public void legeBlaetter(int anz)
{
for(int i=0; i<anz; i++)
{
if(!kara.onLeaf())
{
kara.move();
kara.putLeaf();
kara.move();
}
}
}
public void pyramide(int zeilen)
{
for(int i=0; i<zeilen; i++)
{
legeBlaetter(zeilen-i);
if(i%2==0)
{
kara.turnLeft();
kara.move();
kara.turnLeft();
kara.move();
}
else
{
kara.turnRight();
kara.move();
kara.turnRight();
kara.move();
}
}
}
public void myProgram()
{
world.clearAll();
world.setSize(25,15);
kara.setPosition(1,14);
pyramide(11);
}
}


lg lily
 

Camill

Bekanntes Mitglied
Ich weiß zwar nicht was die einzelnen Methoden machen aber für mich sieht folgendes "verdächtig" aus:
Java:
kara.move();
kara.putLeaf();
kara.move();

Einer der beiden [c]move()[/c] Aufrufe scheint überflüssig zu sein. Fall dies nicht der Fall ist wäre es sinnvoll weitere beteiligte Klassen zu posten.
 

Kevin94

Top Contributor
Der Hinweis ist doch eigentlich groß genug:
Java™ Quelltext ist bitte in
Java:
-Tags zu schreiben[/SIZE][/COLOR]

Ansonsten glaube ich kaum, dass deine legeBlätter Methode richtig ist. Du machst es dir mit dem Ansatz das ganze zeilenweise zu legen schwieriger als es ist. Ich hoffe ich hab dich richtig verstanden, das du mit einer Pyramide so was meinst:
[CODE]XXXXXXXXX
X       X
X XXXXX X
X X   X X
X X X X X
X X   X X
X XXXXX X
X       X
XXXXXXXXX
Dann würde ich dir empfehlen das ganze in Kreisen abzulaufen. Erst der Äusere kreis, dann nach innen laufen, nächster Kreis, solange bis der Kreis nur noch 1 bis 4 Blätter groß ist.
 

lily

Aktives Mitglied
also so sieht meine pyramide aus

attachment.php


so sieht die pyramide oder eher tannenbaum ;) aus wenn das "move" unten stehen bleibt

attachment.php



und wenn das "move" oben stehen bleibt, ist keine pyramide zu erkennen :noe:


was meinst du genau mit klassen?
 

Anhänge

  • IMAG2007.jpg
    IMAG2007.jpg
    118,4 KB · Aufrufe: 187
  • IMAG2008.jpg
    IMAG2008.jpg
    145,2 KB · Aufrufe: 141

lily

Aktives Mitglied
sorry
Java:
public class pyramide extends JavaKaraProgram 
{
    public void legeBlaetter(int anz)  
    {
       for(int i=0; i<anz; i++)
       {
       if(!kara.onLeaf())
       {
            kara.move();
            kara.putLeaf();
            kara.move();
       }
       }
    }
    public void pyramide(int zeilen)
    {
      for(int i=0; i<zeilen; i++)   
      {
            legeBlaetter(zeilen-i);
      if(i%2==0)
      {
            kara.turnLeft();
            kara.move();
            kara.turnLeft();
            kara.move();
      }
      else
      {
            kara.turnRight();
            kara.move();
            kara.turnRight();
            kara.move();
      }
      }
    }
    public void myProgram() 
    {
            world.clearAll();
            world.setSize(25,15);          
            kara.setPosition(1,14);
            pyramide(11); 
    }
}


nee ich muss eine pyramide erstellen die von vorne zusehen ist,keine vogelperspektive ;)
 
Zuletzt bearbeitet:

timbeau

Gesperrter Benutzer
Dir ist aber schon klar, dass du keine symmetrische Pyramide hinkriegst, wenn du pro Zeile nur 1 Blatt weniger zeichnest?
 

lily

Aktives Mitglied
und kannst du mir das bitte etwas genauer erklären, bin tiefster anfänger :), wo genau und was genau muss ich jetzt einsetzen oder korrigieren...???:L

ok ich war zu voreilig sorry :oops:
 

Volvagia

Top Contributor
Also willst du einfach nur die Zwischenräume entfernen? Versuch mal das. Kara ist bei mir nicht angesprungen, deshalb hab ich mir einfach etwas eigenes mit gleichsignaturigen Methoden geschrieben. Allerdings kenn ich dir keine Garantie geben, dass ich es richtig implementiert habe und es so auch bei dir läuft.

Java:
import java.awt.EventQueue;

public class Pyramide extends MyKaraLikeImpl {
	private void legeBlaetter(int anz) {
		for(int i = 0; i < anz; i++) {
			if(!onLeaf()) {
				putLeaf();
				
				if(i != anz - 1) { //Am letzten Blatt nicht noch mal ziehen.
					move();
				}
			}
		}
	}
	private void buildPyramide(int zeilen) {
		for(int i = 0, zeilenAnzahl = ((zeilen - 1) * 2) + 1; i < zeilen; i++, zeilenAnzahl-= 2) {
			legeBlaetter(zeilenAnzahl);
			if(i%2 == 0) {
				turnLeft();
				move();
				
				if(i != zeilen - 1) { //In der letzten Zeile darf er nicht 1 Feld weiter ziehen
					turnLeft();
					move();
				}
			} else {
				turnRight();
				move();
				
				if(i != zeilen - 1) { //Dito
					turnRight();
					move();
				}
			}
		}
    }
	protected void myProgram() {
		clear();
		setWorldSize(25, 25);
		setPosition(1,14);
		buildPyramide(3);
	}
	public static void main(String[] args) {
		final Pyramide program = new Pyramide();
		
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				program.startup();				
			}
		});
	}
}

Hier meine Superklasse, falls du sie willst

Java:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Point;
import java.util.LinkedList;
import java.util.List;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class MyKaraLikeImpl {
	private static enum ViewDirectory {
		NORTH {
			public void move(Point d) {
				d.y--;
			}
			public ViewDirectory turnLeft() {
				return WEST;
			}
			public ViewDirectory turnRight() {
				return EAST;
			}
		},
		SOUTH {
			public void move(Point d) {
				d.y++;
			}
			public ViewDirectory turnLeft() {
				return EAST;
			}
			public ViewDirectory turnRight() {
				return WEST;
			}
		},
		WEST {
			public void move(Point d) {
				d.x--;
			}
			public ViewDirectory turnLeft() {
				return SOUTH;
			}
			public ViewDirectory turnRight() {
				return NORTH;
			}
		},
		EAST {
			public void move(Point d) {
				d.x++;
			}
			public ViewDirectory turnLeft() {
				return NORTH;
			}
			public ViewDirectory turnRight() {
				return WEST;
			}
		};
		
		
		/**
		 * Verändert Eigenschaften des Parameters!!!
		 * @param d
		 * @return
		 */
		public abstract void move(Point d);
		public abstract ViewDirectory turnLeft();
		public abstract ViewDirectory turnRight();
	};
	
	private static final int OBJECT_SIZE = 20;
	
	private Point location;
	private Dimension worldSize;
	private ViewDirectory viewDirectory;
	private List<Leaf> leafs;
	
	public MyKaraLikeImpl() {
		location = new Point(0, 0);
		viewDirectory = ViewDirectory.EAST;
		leafs = new LinkedList<Leaf>();
		worldSize = new Dimension(0, 0);
	}
	protected boolean onLeaf() {
		for(Leaf leaf:leafs) {
			if(leaf.getX() == location.x && leaf.getY() == location.y) {
				return(true);
			}
		}
		return(false);
	}
	protected void putLeaf() {
		leafs.add(new Leaf(location));
	}
	protected void move() {
		viewDirectory.move(location);
	}
	protected void turnLeft() {
		viewDirectory = viewDirectory.turnLeft();
	}
	protected void turnRight() {
		viewDirectory = viewDirectory.turnRight();
	}
	protected void clear() {
		leafs.clear();
	}
	protected void setPosition(int x, int y) {
		location.x = x;
		location.y = y;
	}
	protected void setWorldSize(int w, int h) {
		worldSize.width = w;
		worldSize.height = h;
	}
	protected void startup() {
		myProgram();
		
		JFrame frame = new JFrame();
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		JPanel drawPanel = new JPanel() {
			protected void paintComponent(Graphics g) {
				super.paintComponent(g);
				
				g.setColor(Color.RED);
				for(Leaf leaf:leafs) {
					g.drawOval(leaf.getX() * OBJECT_SIZE, leaf.getY() * OBJECT_SIZE, OBJECT_SIZE, OBJECT_SIZE);
				}
				
				g.setColor(Color.RED);
				g.drawRect(location.x * OBJECT_SIZE, location.y * OBJECT_SIZE, OBJECT_SIZE, OBJECT_SIZE);
			}
		};
		frame.add(drawPanel);
		
		frame.setSize(worldSize.width * OBJECT_SIZE, worldSize.height * OBJECT_SIZE);
		frame.setVisible(true);
	}
	
	protected void myProgram() {}

	private final static class Leaf {
		private final int x;
		private final int y;
		
		public Leaf(Point p) {
			this(p.x, p.y);
		}
		public Leaf(int x, int y) {
			this.x = x;
			this.y = y;
		}
		
		public int getX() {
			return x;
		}
		public int getY() {
			return y;
		}
	}
}
 
Zuletzt bearbeitet:
H

hüteüberhüte

Gast
und kannst du mir das bitte etwas genauer erklären, bin tiefster anfänger :), wo genau und was genau muss ich jetzt einsetzen oder korrigieren...???:L

ok ich war zu voreilig sorry :oops:

Also 1 und 1 zusammenzählen kannst du doch wohl noch... Die Methoden mit ähnlichen Bezeichnern wie in meinem Beispiel sind entweder bereits vorgegeben oder können direkt ihren Bezeichnern nach implementiert werden. Oder anders gesagt antworte ich ohne ein Danke auch nicht mehr.
 

lily

Aktives Mitglied
jetzt sei nicht so, von mir kriegen alle n dankeschön, muss mich doch auch erst auf der seite zurechtfinden und schaun wie das hier so läuft...

bin für jede hilfe dankbar :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S JavaKara Null Exception Error Java Basics - Anfänger-Themen 4
L In Javakara Palindrom erkennen. Java Basics - Anfänger-Themen 9
B JavaKara rekursiven Teppich erstellen??? Java Basics - Anfänger-Themen 5
F JavaKara - Rückgabetyp java.awt.Point Java Basics - Anfänger-Themen 2
J JavaKara RandomWalk Java Basics - Anfänger-Themen 6
J Erste Schritte JavaKara Labyrinth Java Basics - Anfänger-Themen 17
L Klassen Anfänger braucht Hilfe! Probleme mit Javakara.jar Java Basics - Anfänger-Themen 25
N Frage zu JavaKara Java Basics - Anfänger-Themen 6
I Javakara Java Basics - Anfänger-Themen 3
K JavaKara Programm - erfolgreich compiliert jedoch kein Start Java Basics - Anfänger-Themen 12
J [JavaKara] '.' expected import JavaKaraProgram Java Basics - Anfänger-Themen 2
D JavaKara Java Basics - Anfänger-Themen 14
MaZ Quadrat Schleife(Pyramide) Java Basics - Anfänger-Themen 9
Lion.King for-Kontrollstruktur für Pyramide Java Basics - Anfänger-Themen 8
C Pyramide aus * erstellen Java Basics - Anfänger-Themen 23
H Pyramide Java Basics - Anfänger-Themen 49
D Pyramide: Summe der diagonal über ihr stehenden Zahlen! Java Basics - Anfänger-Themen 6
S Sternchen Pyramide Java Basics - Anfänger-Themen 11
N Pyramide in Java Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben