Advertisement
Guest User

Untitled

a guest
May 30th, 2015
276
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.37 KB | None | 0 0
  1. import javax.swing.*;
  2. import java.awt.*;
  3. import java.awt.event.*;
  4. import java.util.*;
  5.  
  6. public class Obelisk extends JPanel implements ActionListener{
  7.     private static final long serialVersionUID = 1L;
  8.     int height = 600;
  9.     int width = 800;
  10.     int tierWidth = 300;
  11.     int radius = tierWidth/2;
  12.     Color[] colorArray = {new Color(255, 242, 0),new Color(24, 230, 46),new Color(0, 162, 232),new Color(237, 28, 36)};
  13.     static int numOfTiers = 4;
  14.     static ArrayList<JButton> buttonList = new ArrayList<JButton>(2*numOfTiers);
  15.    
  16.     public static void main(String[]args){
  17.         new Obelisk();
  18.     }
  19.     public Obelisk(){
  20.         JFrame frame = new JFrame();
  21.         frame.setSize(width,height);
  22.         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  23.         frame.setResizable(false);
  24.         frame.setLayout(new BorderLayout());
  25.         frame.setLocationRelativeTo(null);
  26.         JPanel leftPanel = new JPanel();
  27.         leftPanel.setLayout(new GridLayout(numOfTiers,1));
  28.         JPanel rightPanel = new JPanel();
  29.         rightPanel.setLayout(new GridLayout(numOfTiers,1));
  30.         for(int i = 0; i < numOfTiers*2; i++){
  31.             buttonList.add(new JButton());
  32.             buttonList.get(i).addActionListener(this);
  33.             if(i%2==0){
  34.                 leftPanel.add(buttonList.get(i));
  35.             }
  36.             else{
  37.                 rightPanel.add(buttonList.get(i));
  38.             }
  39.         }
  40.         for(int i = 0; i< numOfTiers; i++)
  41.             new Tier();
  42.         frame.add(leftPanel, BorderLayout.WEST);
  43.         frame.add(this, BorderLayout.CENTER);
  44.         frame.add(rightPanel, BorderLayout.EAST);
  45.         Tier.shuffle();
  46.         frame.setVisible(true);
  47.     }
  48.     public void actionPerformed(ActionEvent ae) {
  49.         int t;
  50.         if(buttonList.indexOf(ae.getSource())%2==0)
  51.             t = -2;
  52.         else
  53.             t = 2;
  54.         Tier.get(buttonList.indexOf(ae.getSource())/2).move(t);
  55.         repaint();
  56.     }
  57.     public void paintComponent(Graphics g){
  58.         super.paintComponent(g);
  59.         for(int i = 0; i < numOfTiers; i++){
  60.             Tier t = Tier.get(i);
  61.             int tierHeight = buttonList.get(i*2).getHeight();
  62.             int tierY = buttonList.get(i*2).getY();
  63.             int s = t.getState();
  64.             int o = s/2;
  65.             if(s%2==0){
  66.                 int j = (int) (radius*(1-Math.cos(Math.PI/4)))+1;
  67.                 int k = (int) (2*radius*Math.cos(Math.PI/4));
  68.                 g.setColor(colorArray[o]);
  69.                 g.fillRect(width/2-radius, tierY, j, tierHeight);
  70.                 g.setColor(colorArray[(o+3)%4]);
  71.                 g.fillRect(width/2-radius+j, tierY, k, tierHeight);
  72.                 g.setColor(colorArray[(o+2)%4]);
  73.                 g.fillRect(width/2-radius+j+k, tierY, j, tierHeight);
  74.             }
  75.             else{
  76.                 g.setColor(colorArray[o]);
  77.                 g.fillRect(width/2-radius, tierY, radius, tierHeight);
  78.                 g.setColor(colorArray[(o+3)%4]);
  79.                 g.fillRect(width/2, tierY, radius, tierHeight);
  80.             }
  81.         }
  82.     }
  83.     public static class Tier{
  84.         static ArrayList<Tier> list = new ArrayList<Tier>(numOfTiers);
  85.         private int state = 0;
  86.         public Tier(){
  87.             list.add(this);
  88.         }
  89.         public static Tier get(int x){
  90.             return list.get(x);
  91.         }
  92.         public int getState(){
  93.             return this.state;
  94.         }
  95.         public void setState(int x){
  96.             this.state = x;
  97.         }
  98.         public void move(int x){
  99.             this.setState((this.getState()+x+8)%8);
  100.             if(x>1||x<-1){
  101.                 list.get((list.indexOf(this)+1)%numOfTiers).move(-x/Math.abs(x));;
  102.             }
  103.         }
  104.         public String toString(){
  105.             return "[Tier index: "+list.indexOf(this)+", state: "+this.getState()+"]";
  106.         }
  107.         public static void shuffle(){
  108.             Random r = new Random();
  109.             for(int i = 0; i < numOfTiers; i++){
  110.                 int shuf = r.nextInt(100);
  111.                 for(int j = 0; j < shuf;j++){
  112.                     list.get(i).move(2);
  113.                 }
  114.             }
  115.         }
  116.     }
  117.  
  118. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement