Wie erstelle ich eine JavaFX Anwendung von diesem Code?

Status
Nicht offen für weitere Antworten.

bob651

Aktives Mitglied
HI. Ich bräuchte mal Hilfe.
Ich habe einen Code, was mir Outputs in der Konsole liefert. Ich will es aber grafisch dargestellt haben. Wie mache ich es vom Prinzip her?

Code:
public class TuermeVonHanoi {
   
static void ziehe_scheibe(int nummer, String von, String nach) {
System.out.println("Scheibe " + nummer + " wird von " + von +
" nach " + nach + " verschoben ");
}

    static void hanoi(int N, String platz1, String hilfsplatz, String platz2)
{
if (N == 1) {
ziehe_scheibe(N, platz1, platz2);
} else {
hanoi(N-1, platz1, platz2, hilfsplatz);
ziehe_scheibe(N, platz1, platz2);
hanoi(N-1, hilfsplatz, platz1, platz2);
}
}

public static void main(String[] args) {
hanoi(4, "A", "B", "C");
}
}

Ist das der richtige Ansatz?
Code:
public void start(Stage primaryStage) throws Exception {
root = new Group();
        Scene scene = new Scene(root, 600, 400);
        primaryStage.setScene(scene);
        primaryStage.setTitle("Hanoi");
       
        Rectangle panel = new Rectangle(600, 400, Color.WHITESMOKE);
        root.getChildren().add(panel);
        primaryStage.show();
 
Viel Code ist es nicht, somit ist es schwer festzustellen, ob es sich hier um den richtigen Ansatz handelt. Der "UI-Code", wenn man es denn so bezeichnen möchte, ist der Anfang einer GUI und ausser einem Rechteck, seh ich nichts. Vielleicht solltest du dir das Spielbrett erst einmal mit Tools wie Scene Builder entwerfen und dann, davon aussgehend, weitermachen.
Die obere Klasse scheint ja so hinzukommen, ich hab aber das Spiel schon ewig nicht mehr als Code-Aufgabe in den Händen gehabt und müsste es mir auch erst einmal ansehen. Mit Rekursion kannst du da sicher arbeiten, aber es fehlt jeder Bezug zu GUI. Dadurch, dass du Statics verwendest, würdest du es dir aber auch IMHO zu schwer machen.
Alles in allen ist ein Ansatz, der aber so rudimentär ist, dass man da schwer sagen kann, ob er "richtig" ist, oder nicht. Liefer etwas mehr und wir versuchen dir zu helfen, wenn es Probleme gibt. Ok?
 
Bin jetzt soweit, dass ich alles nötige schon habe, außer die paint methode. Was ich da machen soll, weiß ich nicht. Wenn ich g.draw nutze, sehe ich zwar was, aber bewegen tut sich nichts..


Code:
import java.io.*;
import java.util.*;
import java.awt.*;
/**
*
*
*
*
*/
public class hanoi {

  public static void ziehe_scheibe(MyFrame f,Pole von, Pole nach) {
    int hs = von.onPole.size();
    int ht = nach.onPole.size();
    int hy = -25*(ht-hs+1);
    int hx = (nach.xPos - von.xPos);

    String d = von.scheibenehmen();
    nach.scheibelegen(d);
    f.moveDisk(d,hx,hy);
  }

 
  public static void hanoi(MyFrame f,int n, Pole platz1, Pole platz2, Pole hilfsplatz) {
   
      if ( n==1 )
      ziehe_scheibe(f,platz1,platz2);
    else
    { hanoi(f,n-1,platz1,hilfsplatz,platz2);
      ziehe_scheibe(f,platz1,platz2);
      hanoi(f,n-1,hilfsplatz,platz2,platz1);
    }
  }
 
  public static int xSize(String d) {
      if ( d.equals("klein")) return 30;
        if ( d.equals("mittel")) return 40;
        else return 50;
  }

  public static void main(String args[]) {

    Pole p1 = new Pole("a",60);
    Pole p2 = new Pole("b",180);
    Pole p3 = new Pole("c",300);

    p1.scheibelegen("groß");
    p1.scheibelegen("mittel");
    p1.scheibelegen("klein");
   
    Rectangle r1 = new Rectangle(p1.xPos-50,50,100,20);   
    Rectangle r2 = new Rectangle(p1.xPos-40,25,80,20);   
    Rectangle r3 = new Rectangle(p1.xPos-30,0,60,20);
   
    MyFrame fff = new MyFrame(r1,r2,r3);
    fff.setSize(800,600);
    fff.setVisible(true);  
   
    hanoi(fff,3,p1,p3,p2);
  }

}














// Frame-Klasse zur Anzeige des Zustandes
class MyFrame extends Frame {
   
  public Rectangle s1, s2, s3;
 
 
  public MyFrame(Rectangle a, Rectangle b, Rectangle c) {
    s1 = a; s2 = b; s3 = c;
   
  }

  public void paint(Graphics g) {
  

  }

  public Rectangle xRect(String d) {
    if ( d.equals("klein")) return s3;
    if ( d.equals("mittel")) return s2;
    else return s1;
   
   
  }
 
  public void moveDisk(String name,int dx,int dy)
  { xRect(name).translate(dx,dy);
    repaint();
    try
    { System.in.read();System.in.read(); }
    catch (Exception e) {}
  }
}









// Pole-Klasse: Repräsentation eines Stabes
        
class Pole {
  public String label;
  public Vector onPole;
  public int xPos;
 
  public Pole(String s, int i) {
    onPole=new Vector();
    label = s; xPos = i;
  }
 
  public void scheibelegen(String d) {
    this.onPole.addElement(d);
  }
 
  public String scheibenehmen() {
    Object lastEl = this.onPole.lastElement();
    String lastElStr = lastEl.toString();
    this.onPole.removeElement(lastEl);
    return lastElStr;
  }
}
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben