Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import javax.swing.*;
- import java.awt.*;
- import java.awt.event.*;
- import java.util.*;
- public class Obelisk extends JPanel implements ActionListener{
- private static final long serialVersionUID = 1L;
- int height = 600;
- int width = 800;
- int tierWidth = 300;
- int radius = tierWidth/2;
- Color[] colorArray = {new Color(255, 242, 0),new Color(24, 230, 46),new Color(0, 162, 232),new Color(237, 28, 36)};
- static int numOfTiers = 4;
- static ArrayList<JButton> buttonList = new ArrayList<JButton>(2*numOfTiers);
- public static void main(String[]args){
- new Obelisk();
- }
- public Obelisk(){
- JFrame frame = new JFrame();
- frame.setSize(width,height);
- frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- frame.setResizable(false);
- frame.setLayout(new BorderLayout());
- frame.setLocationRelativeTo(null);
- JPanel leftPanel = new JPanel();
- leftPanel.setLayout(new GridLayout(numOfTiers,1));
- JPanel rightPanel = new JPanel();
- rightPanel.setLayout(new GridLayout(numOfTiers,1));
- for(int i = 0; i < numOfTiers*2; i++){
- buttonList.add(new JButton());
- buttonList.get(i).addActionListener(this);
- if(i%2==0){
- leftPanel.add(buttonList.get(i));
- }
- else{
- rightPanel.add(buttonList.get(i));
- }
- }
- for(int i = 0; i< numOfTiers; i++)
- new Tier();
- frame.add(leftPanel, BorderLayout.WEST);
- frame.add(this, BorderLayout.CENTER);
- frame.add(rightPanel, BorderLayout.EAST);
- Tier.shuffle();
- frame.setVisible(true);
- }
- public void actionPerformed(ActionEvent ae) {
- int t;
- if(buttonList.indexOf(ae.getSource())%2==0)
- t = -2;
- else
- t = 2;
- Tier.get(buttonList.indexOf(ae.getSource())/2).move(t);
- repaint();
- }
- public void paintComponent(Graphics g){
- super.paintComponent(g);
- for(int i = 0; i < numOfTiers; i++){
- Tier t = Tier.get(i);
- int tierHeight = buttonList.get(i*2).getHeight();
- int tierY = buttonList.get(i*2).getY();
- int s = t.getState();
- int o = s/2;
- if(s%2==0){
- int j = (int) (radius*(1-Math.cos(Math.PI/4)))+1;
- int k = (int) (2*radius*Math.cos(Math.PI/4));
- g.setColor(colorArray[o]);
- g.fillRect(width/2-radius, tierY, j, tierHeight);
- g.setColor(colorArray[(o+3)%4]);
- g.fillRect(width/2-radius+j, tierY, k, tierHeight);
- g.setColor(colorArray[(o+2)%4]);
- g.fillRect(width/2-radius+j+k, tierY, j, tierHeight);
- }
- else{
- g.setColor(colorArray[o]);
- g.fillRect(width/2-radius, tierY, radius, tierHeight);
- g.setColor(colorArray[(o+3)%4]);
- g.fillRect(width/2, tierY, radius, tierHeight);
- }
- }
- }
- public static class Tier{
- static ArrayList<Tier> list = new ArrayList<Tier>(numOfTiers);
- private int state = 0;
- public Tier(){
- list.add(this);
- }
- public static Tier get(int x){
- return list.get(x);
- }
- public int getState(){
- return this.state;
- }
- public void setState(int x){
- this.state = x;
- }
- public void move(int x){
- this.setState((this.getState()+x+8)%8);
- if(x>1||x<-1){
- list.get((list.indexOf(this)+1)%numOfTiers).move(-x/Math.abs(x));;
- }
- }
- public String toString(){
- return "[Tier index: "+list.indexOf(this)+", state: "+this.getState()+"]";
- }
- public static void shuffle(){
- Random r = new Random();
- for(int i = 0; i < numOfTiers; i++){
- int shuf = r.nextInt(100);
- for(int j = 0; j < shuf;j++){
- list.get(i).move(2);
- }
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement