Hi, habe ein Problem. Ich habe ein Programm, dass ein Fenster erstellt mit dem Hanoi Spiel.
Aber wenn ich es aufrufe, sehe ich nur 3 Kästchen. Ich weiß aber, dass es nicht so sein soll, da ich den Code von jemand anderem habe.
Hier der Code
Kann es sein, dass MyFrame fff = new MyFrame das Problem ist? Müsste ich nicht JFrame nutzen? Ihr könnt ja den Code direkt bei euch einfügen und sehen, was passiert.
THX
Aber wenn ich es aufrufe, sehe ich nur 3 Kästchen. Ich weiß aber, dass es nicht so sein soll, da ich den Code von jemand anderem habe.
Hier der Code
Code:
// Hauptklasse (Fenster u.a. Objekte generieren, Algorithmus)
public class hanoi {
public static void move(MyFrame f,Pole Source, Pole Target) {
int hs = Source.onPole.size();
int ht = Target.onPole.size();
int hy = -25*(ht-hs+1);
int hx = (Target.xPos - Source.xPos);
String d = Source.takeDisk();
Target.putDisk(d);
System.out.println("Move "+Target.onPole.lastElement()+
" disk from "+Source.label+" to "+Target.label);
f.moveDisk(d,hx,hy);
}
public static void moves(MyFrame f,int n, Pole start, Pole goal, Pole aux) {
if ( n==1 )
move(f,start,goal);
else
{ moves(f,n-1,start,aux,goal);
move(f,start,goal);
moves(f,n-1,aux,goal,start);
}
}
public static int xSize(String d) {
if ( d == "small" ) return 30;
if ( d == "medium" ) 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.putDisk("big");
p1.putDisk("medium");
p1.putDisk("small");
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);
moves(fff,1,p1,p3,p2);
}
}
// Frame-Klasse zur Anzeige des Zustandes
class MyFrame extends JFrame {
public Rectangle s1, s2, s3;
public MyFrame(Rectangle a, Rectangle b, Rectangle c) {
s1 = a; s2 = b; s3 = c;
}
public void paint(Graphics g) {
g.setColor(Color.red);
g.drawRect(s1.x,s1.y+200,s1.width,s1.height);
g.drawRect(s2.x,s2.y+200,s2.width,s2.height);
g.drawRect(s3.x,s3.y+200,s3.width,s3.height);
}
public Rectangle xRect(String d) {
if ( d == "small" ) return s3;
if ( d == "medium" ) 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 putDisk(String d) {
this.onPole.addElement(d);
}
public String takeDisk() {
Object lastEl = this.onPole.lastElement();
String lastElStr = lastEl.toString();
this.onPole.removeElement(lastEl);
return lastElStr;
}
}
Kann es sein, dass MyFrame fff = new MyFrame das Problem ist? Müsste ich nicht JFrame nutzen? Ihr könnt ja den Code direkt bei euch einfügen und sehen, was passiert.
THX