Not a member of Pastebin yet?
                        Sign Up,
                        it unlocks many cool features!                    
                - /**
 - * Write a description of class Rekursi_TowerOFHanoi here.
 - *
 - * Samuel Berkat Hulu
 - * 5025201055
 - *
 - * @version 5.0 Tugas Sturktur data 4 Juni 2021
 - */
 - import java.awt.Toolkit;
 - import java.awt.Graphics;
 - import java.awt.Color;
 - import java.awt.FlowLayout;
 - import java.awt.Container;
 - import java.awt.event.ActionEvent;
 - import java.awt.event.ActionListener;
 - import java.util.Stack;
 - import java.util.EmptyStackException;
 - import javax.swing.JFrame;
 - import javax.swing.JLabel;
 - import javax.swing.JPanel;
 - import javax.swing.JScrollPane;
 - import javax.swing.JTextField;
 - //disk class
 - class TowerStack extends Stack<Integer> {
 - public void display(int x, int y, Graphics g) {
 - for(int i = 0; i < size(); i++) {
 - int width = 20*((Integer)get(i)).intValue();
 - g.setColor(Color.green);
 - g.fillRoundRect(x-width/2,y-10*(i+1),width+1,10,10,10);
 - g.setColor(Color.red);
 - g.drawRoundRect(x-width/2,y-10*(i+1),width+1,10,10,10);
 - }
 - }
 - }
 - public class Towers_Of_Hanoi {
 - JFrame theFrame;
 - JLabel promptN;
 - int n;
 - int moves;
 - JTextField inputN;
 - JPanel one;
 - JScrollPane inputPane;
 - final int WIDTH = 650;
 - final int HEIGHT = 500;
 - final int XLEFT = 110;
 - final int XMIDDLE = 320;
 - final int XRIGHT = 520;
 - final int YDOWN = 280;
 - final int YUP = 170;
 - final int WIDTHINC = 110;
 - final int HEIGHTINC = 220;
 - Graphics g;
 - TowerStack tow1 = new TowerStack();
 - TowerStack tow2 = new TowerStack();
 - TowerStack tow3 = new TowerStack();
 - public Towers_Of_Hanoi() {
 - theFrame = new JFrame("Towers of Hanoi");
 - Toolkit tk = Toolkit.getDefaultToolkit();
 - theFrame.setSize(WIDTH,HEIGHT);
 - theFrame.setLocation(tk.getScreenSize().width/4,tk.getScreenSize().height/4);
 - theFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 - Container content = theFrame.getContentPane();
 - content.setBackground(Color.white);
 - content.setLayout(new FlowLayout(FlowLayout.CENTER,10,10));
 - one = new JPanel();
 - promptN= new JLabel("Enter the number of disks (1-10): ");
 - one.add(promptN);
 - inputN= new JTextField(5);
 - inputN.addActionListener(new inputNAction());
 - one.add(inputN);
 - one.setBackground(Color.green);
 - inputPane = new JScrollPane(one);
 - content.add(inputPane);
 - theFrame.setVisible(true);
 - }
 - public static void main(String[] args) {
 - new Towers_Of_Hanoi();
 - }
 - public void moveDisks(int n, TowerStack source, TowerStack dest, TowerStack aux){
 - if ( n == 0 ) return;
 - moveDisks(n-1,source,aux,dest);
 - dest.push( source.pop());
 - moves++;
 - drawTowers(g);
 - moveDisks(n-1,aux,dest,source);
 - }
 - public void drawLines(Graphics g) {
 - g.drawLine(XLEFT,YDOWN,XLEFT,YUP);
 - g.drawLine(XMIDDLE,YDOWN,XMIDDLE,YUP);
 - g.drawLine(XRIGHT,YDOWN,XRIGHT,YUP);
 - g.drawLine(10,YDOWN,HEIGHTINC,YDOWN);
 - g.drawLine(10+WIDTHINC,YDOWN,2*HEIGHTINC,YDOWN);
 - g.drawLine(10+2*WIDTHINC,YDOWN,3*HEIGHTINC,YDOWN);
 - }
 - public void drawTowers(Graphics g) {
 - g.setColor(Color.white);
 - g.fillRect(0,75,WIDTH,HEIGHT-75);
 - g.setColor(Color.green);
 - drawLines(g);
 - tow1.display(XLEFT,YDOWN,g);
 - tow2.display(XMIDDLE,YDOWN,g);
 - tow3.display(XRIGHT,YDOWN,g);
 - try{Thread.sleep(500);}catch(Exception e){}
 - }
 - class inputNAction implements ActionListener {
 - public void actionPerformed(ActionEvent A){
 - try{
 - n=Integer.parseInt(inputN.getText());
 - } catch(NumberFormatException e){
 - inputN.setText("1 to 10");
 - inputN.selectAll();
 - return;
 - }
 - if( n < 1 || n > 10 ){
 - inputN.setText("1 to 10");
 - inputN.selectAll();
 - return;
 - }
 - inputN.setText("");
 - moves = 0;
 - tow1.setSize(0);
 - for(int i = n; i > 0; i--) {
 - tow1.push(i);
 - }
 - tow2.setSize(0);
 - tow3.setSize(0);
 - g = theFrame.getGraphics();
 - drawTowers(g);
 - moveDisks(n,tow1,tow3,tow2);
 - g.drawString("___________________________"+n+" disks need "+moves+" move"+(moves>1?"s":"")+"___________________________",100,100);
 - }
 - }
 - }
 
Advertisement
 
                    Add Comment                
                
                        Please, Sign In to add comment