import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.AffineTransform;
import java.awt.geom.Line2D;
import java.util.Random;

import javax.swing.JFrame;


public class BreakOut {

	JFrame jframe;
	Screen screen;
	Game game;
	
	
	
	public BreakOut() {
		jframe = new JFrame("Hello App");
		jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		//jframe.setPreferredSize(new Dimension((int) Game.xdim,(int) Game.ydim));
		
		screen = new Screen();
		
		
		jframe.getContentPane().add(screen);
		jframe.setVisible(true);
		jframe.pack();
	}
	 
	public void run() {
		
		introScreen();
		
		game = new Game(screen);
		screen.addMouseMotionListener(game.bat);
		
		while (game.numBalls >= 0) {
			game.step();
			screen.clear();
			game.draw(screen.buf.getGraphics());
		    screen.repaint();
			try {
				Thread.sleep(10);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		Graphics g = screen.buf.getGraphics();
		g.setColor(Color.red);
		g.drawString("Game Over", (int) Game.xdim/2 , (int) Game.ydim/2);
		screen.repaint();
		
	}
	
	
	private void introScreen() {
		// TODO Auto-generated method stub
		
		screen.clear();
		Graphics2D g = screen.getGraphics2D();
		Dimension dim = screen.getSize();
		double xw = dim.getWidth();
		double yw = dim.getHeight();
		
		g.setColor(Color.red);
		g.translate(xw/2.0, yw);
		g.scale(1.0, -1.0);
		drawTree(g,14, new Random());
		screen.repaint();
		try {
			Thread.sleep(100000);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		
	}

	final static double treeHeight = 100.0;
	final static double angle = 0.5;
	final static double scale = 0.6;
	
	private void drawTree(Graphics2D g, int i, Random r) {
		// TODO Auto-generated method stub
		
		g.draw(new Line2D.Double(0.0,0.0,0.0,treeHeight));
		if (i > 0) {
			
			AffineTransform at = g.getTransform();
			g.translate(0.0, treeHeight);
			g.rotate(angle + 0.35 - ( r.nextDouble() * 0.7));
			g.scale(scale, scale);
			drawTree(g, i-1, r);
			g.setTransform(at);
			
			at = g.getTransform();
			g.translate(0.0, treeHeight*0.8);
			g.rotate(-angle + 0.35 - ( r.nextDouble() * 0.7));
			g.scale(scale, scale);
			drawTree(g, i-1, r);
			g.setTransform(at);
			
			
		}
		
	}

	public static void main(String[] args) {
		BreakOut gui = new BreakOut();
		gui.run();
	}

}

