如何在这里实现我的最后一个方法(绘画)?

时间:2016-11-26 16:22:47

标签: java swing recursion

所以,我有点为这个名为“河内之塔”的游戏写了这个代码。 我以前的代码显示了控制台中每一步的移动。我试图以图形方式显示这些动作。

我想我来得相当远,但我无法实现绘画方法。

我试过了g.drawRect(s1.x,s1.y+200,s1.width,s1.height);之类的几件事,但它只显示了一个矩形,没有移动等等。

继承我的守则:

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 == "klein" ) return 30;
    if ( d == "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 == "klein" ) return s3;
    if ( d == "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;
  }
}

也许你们可以看看它

btw原谅我的坏英语

1 个答案:

答案 0 :(得分:0)

尝试

public static int xSize(String d) {
    if ( d.equals("klein")) return 30;
    if ( d.equals("mittel")) return 40;
    else return 50;
  }