Advertisement
Samuel_Berkat_Hulu

hahaaha

Jun 8th, 2021
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.56 KB | None | 0 0
  1.  
  2. /**
  3.  * Write a description of class Rekursi_TowerOFHanoi here.
  4.  *
  5.  * Samuel Berkat Hulu
  6.  * 5025201055
  7.  *
  8.  * @version 5.0 Tugas Sturktur data 4 Juni 2021
  9.  */
  10. import java.awt.Toolkit;
  11. import java.awt.Graphics;
  12. import java.awt.Color;
  13. import java.awt.FlowLayout;
  14. import java.awt.Container;
  15. import java.awt.event.ActionEvent;
  16. import java.awt.event.ActionListener;
  17. import java.util.Stack;
  18. import java.util.EmptyStackException;
  19. import javax.swing.JFrame;
  20. import javax.swing.JLabel;
  21. import javax.swing.JPanel;
  22. import javax.swing.JScrollPane;
  23. import javax.swing.JTextField;
  24.  
  25. //disk class
  26. class TowerStack extends Stack<Integer> {
  27.    
  28.     public void display(int x, int y, Graphics g) {
  29.         for(int i = 0; i < size(); i++) {
  30.             int width = 20*((Integer)get(i)).intValue();
  31.             g.setColor(Color.green);
  32.             g.fillRoundRect(x-width/2,y-10*(i+1),width+1,10,10,10);
  33.             g.setColor(Color.red);
  34.             g.drawRoundRect(x-width/2,y-10*(i+1),width+1,10,10,10);
  35.         }
  36.     }
  37.    
  38. }
  39.  
  40.  
  41. public class Towers_Of_Hanoi {
  42.     JFrame theFrame;
  43.     JLabel promptN;
  44.     int n;
  45.     int moves;
  46.     JTextField inputN;
  47.     JPanel one;
  48.     JScrollPane inputPane;
  49.     final int WIDTH = 650;
  50.     final int HEIGHT = 500;
  51.     final int XLEFT = 110;
  52.     final int XMIDDLE = 320;
  53.     final int XRIGHT = 520;
  54.     final int YDOWN = 280;
  55.     final int YUP = 170;
  56.     final int WIDTHINC = 110;
  57.     final int HEIGHTINC = 220;
  58.     Graphics g;
  59.     TowerStack tow1 = new TowerStack();
  60.     TowerStack tow2 = new TowerStack();
  61.     TowerStack tow3 = new TowerStack();
  62.    
  63.     public Towers_Of_Hanoi() {
  64.         theFrame = new JFrame("Towers of Hanoi");
  65.         Toolkit tk = Toolkit.getDefaultToolkit();
  66.         theFrame.setSize(WIDTH,HEIGHT);
  67.         theFrame.setLocation(tk.getScreenSize().width/4,tk.getScreenSize().height/4);
  68.         theFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  69.         Container content = theFrame.getContentPane();
  70.         content.setBackground(Color.white);
  71.         content.setLayout(new FlowLayout(FlowLayout.CENTER,10,10));
  72.         one = new JPanel();
  73.         promptN= new JLabel("Enter the number of disks (1-10): ");
  74.         one.add(promptN);
  75.         inputN= new JTextField(5);
  76.         inputN.addActionListener(new inputNAction());
  77.         one.add(inputN);
  78.         one.setBackground(Color.green);
  79.         inputPane = new JScrollPane(one);
  80.         content.add(inputPane);
  81.         theFrame.setVisible(true);
  82.     }
  83.    
  84.     public static void main(String[] args) {
  85.         new Towers_Of_Hanoi();
  86.     }
  87.    
  88.     public void moveDisks(int n, TowerStack source, TowerStack dest, TowerStack aux){
  89.         if ( n == 0 ) return;
  90.         moveDisks(n-1,source,aux,dest);
  91.         dest.push( source.pop());
  92.         moves++;
  93.         drawTowers(g);
  94.         moveDisks(n-1,aux,dest,source);
  95.     }
  96.    
  97.     public void drawLines(Graphics g) {
  98.         g.drawLine(XLEFT,YDOWN,XLEFT,YUP);
  99.         g.drawLine(XMIDDLE,YDOWN,XMIDDLE,YUP);
  100.         g.drawLine(XRIGHT,YDOWN,XRIGHT,YUP);
  101.         g.drawLine(10,YDOWN,HEIGHTINC,YDOWN);
  102.         g.drawLine(10+WIDTHINC,YDOWN,2*HEIGHTINC,YDOWN);
  103.         g.drawLine(10+2*WIDTHINC,YDOWN,3*HEIGHTINC,YDOWN);
  104.     }
  105.    
  106.     public void drawTowers(Graphics g) {
  107.         g.setColor(Color.white);
  108.         g.fillRect(0,75,WIDTH,HEIGHT-75);
  109.         g.setColor(Color.green);
  110.         drawLines(g);
  111.         tow1.display(XLEFT,YDOWN,g);
  112.         tow2.display(XMIDDLE,YDOWN,g);
  113.         tow3.display(XRIGHT,YDOWN,g);
  114.         try{Thread.sleep(500);}catch(Exception e){}
  115.     }
  116.    
  117.     class inputNAction implements ActionListener {
  118.        
  119.         public void actionPerformed(ActionEvent A){
  120.             try{
  121.                 n=Integer.parseInt(inputN.getText());
  122.             } catch(NumberFormatException e){
  123.                 inputN.setText("1 to 10");
  124.                 inputN.selectAll();
  125.                 return;
  126.             }
  127.             if( n < 1 || n > 10 ){
  128.                 inputN.setText("1 to 10");
  129.                 inputN.selectAll();
  130.                 return;
  131.             }
  132.             inputN.setText("");
  133.             moves = 0;
  134.            tow1.setSize(0);
  135.             for(int i = n; i > 0; i--) {
  136.                tow1.push(i);
  137.             }
  138.            tow2.setSize(0);
  139.            tow3.setSize(0);
  140.             g = theFrame.getGraphics();
  141.             drawTowers(g);
  142.             moveDisks(n,tow1,tow3,tow2);
  143.             g.drawString("___________________________"+n+" disks need "+moves+" move"+(moves>1?"s":"")+"___________________________",100,100);
  144.         }
  145.        
  146.     }
  147.    
  148.    
  149. }
  150.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement