//ハノイの塔
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
public class cHanoi extends Applet {
private boolean isStandalone = false;
int m_num;
String str;
boolean m_vs=false;
private TextField textField1 = new TextField();
private Label label1 = new Label();
private TextArea textArea1 = new TextArea();
private Button button1 = new Button();
private Checkbox checkbox1 = new Checkbox();
//アプレットの初期化
public void init() {
try {
jbInit();
}
catch(Exception e) {
e.printStackTrace();
}
}
//コンポーネントの初期化
private void jbInit() throws Exception {
textField1.setText("3");
textField1.setBounds(new Rectangle(157, 25, 72, 21));
this.setLayout(null);
label1.setText("枚数");
label1.setBounds(new Rectangle(55, 16, 51, 22));
textArea1.setText("textArea1");
textArea1.setBounds(new Rectangle(22, 64, 272, 172));
button1.setLabel("実行");
button1.setBounds(new Rectangle(58, 248, 61, 24));
button1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
button1_actionPerformed(e);
}
});
checkbox1.setLabel("詳細");
checkbox1.setBounds(new Rectangle(183, 250, 48, 22));
this.add(textField1, null);
this.add(label1, null);
this.add(textArea1, null);
this.add(button1, null);
this.add(checkbox1, null);
}
//「実行」ボタンを押すと実行します
void button1_actionPerformed(ActionEvent e) {
//枚数を読み込む
m_num=Integer.parseInt(textField1.getText());
m_vs=checkbox1.getState();
str="";
Hanoi(m_num,'A','B','C');
textArea1.setText(str);
}
void Hanoi(int Num,char A,char B,char C)
{
if (Num > 0){
if(m_vs){
space(Num);
str += "(Hanoi Num:"+(Num-1)+" from:"+A+" to:"+C +")\n";
};
Hanoi(Num-1,A,C,B);
space(Num);
str += "move "+Num+" th disk from " + A+ " to "+ B+"\n";
if(m_vs){
space(Num);
str += "(Hanoi Num:"+(Num-1)+" from:"+C+" to:"+B +" via "+A+")\n";
};
Hanoi(Num-1,C,B,A);
}
}
//枚数に応じて空白を表示する
void space(int Num)
{
for(int i=0;i<(m_num-Num);i++) str +=" ";
}
}