所以,我有点为这个名为“河内之塔”的游戏写了这个代码。 我以前的代码显示了控制台中每一步的移动。我试图以图形方式显示这些动作。
我想我来得相当远,但我无法实现绘画方法。
我试过了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原谅我的坏英语
答案 0 :(得分:0)
尝试
public static int xSize(String d) {
if ( d.equals("klein")) return 30;
if ( d.equals("mittel")) return 40;
else return 50;
}