public Game() {// Constructor

		UPF.f.addKeyListener(this);
		UPF.f.requestFocusInWindow();

		// Background
		sBackground = new JLabel(new ImageIcon("resources/gameBKG.jpg"));
		sBackground.setBounds(14, 46, 253, 445);

		// Return to menu button
		toMenu = new JButton("Menu");
		toMenu.setFont(menuFont);
		toMenu.setBounds(183, 54, 80, 30);
		toMenu.addActionListener(this);

		// Instructions
		insRightTop = new JLabel(new ImageIcon("resources/insTopRight.png"));
		insLeftTop = new JLabel(new ImageIcon("resources/insTopLeft.png"));
		insRightBot = new JLabel(new ImageIcon("resources/insBotRight.png"));
		insLeftBot = new JLabel(new ImageIcon("resources/insBotLeft.png"));

		insRightTop.setBounds(143, 92, 120, 176);
		insLeftTop.setBounds(21, 92, 120, 176);
		insRightBot.setBounds(143, 271, 120, 176);
		insLeftBot.setBounds(21, 271, 120, 176);

		insRightTop.setVisible(false);
		insLeftTop.setVisible(false);
		insRightBot.setVisible(false);
		insLeftBot.setVisible(false);

		// Nets
		net1.setBounds(100, 78, 82, 36);
		net2.setBounds(100, 424, 82, 36);

		// Bars
		ImageIcon barI = new ImageIcon("resources/bar.png");
		for (int i = 0; i < 4; i++)
		{
			bar[i * 2] = new JLabel(barI);
			bar[i * 2 + 1] = new JLabel(barI);
			bar[i * 2].setBounds(14, move.y1[i] + 2, 254, 5); //y1
			bar[i * 2 + 1].setBounds(14, move.y2[i] + 2, 254, 5); //y2
		}

		// Goal message
		goal = new JLabel("GOAL!", SwingConstants.CENTER);
		goal.setBounds(14, 230, 253, 90);
		goal.setFont(goalFont);
		goal.setVisible(false);

		// Win message
		win = new JLabel("", SwingConstants.CENTER);
		win.setBounds(14, 150, 253, 200);
		win.setFont(winFont);
		win.setVisible(false);

		// Start Countdown
		countdown = new JLabel("", SwingConstants.CENTER);
		countdown.setBounds(14, 230, 253, 72);
		countdown.setForeground(Color.yellow);
		countdown.setVisible(false);

		// Player1
		ImageIcon player;
		player = new ImageIcon("resources/player1.png");
		for (int i = 0; i != 10; i++)
		{
			player1[i] = new JLabel(player);
			player1[i].setSize(9, 9);// 12
		}

		// Player2
		player = new ImageIcon("resources/player2.png");
		for (int i = 0; i != 10; i++)
		{
			player2[i] = new JLabel(player);
			player2[i].setSize(9, 9);// 12
		}

		// Ball
		ball = new JLabel(new ImageIcon("resources/ball.png"));
		ball.setBounds(136, 265, 7, 7);
		ball.setVisible(false);

		// Scores
		scoreDash.setForeground(Color.yellow);
		scoreDash.setFont(score);
		scoreBlue = new JLabel("0");
		scoreBlue.setForeground(Color.blue);
		scoreBlue.setFont(score);
		scoreRed = new JLabel("0");
		scoreRed.setForeground(Color.red);
		scoreRed.setFont(score);
		scoreBlue.setBounds(52, 51, 15, 24);
		scoreDash.setBounds(67, 51, 8, 24);
		scoreRed.setBounds(79, 51, 15, 24);

		// Ad button
		UPF.ad.addActionListener(this);

		// Adding
		UPF.lp.add(sBackground, new Integer(1));
		UPF.lp.add(net1, new Integer(2));
		UPF.lp.add(net2, new Integer(2));
		for (int i = 0; i != 8; i++)
			UPF.lp.add(bar[i], new Integer(4));
		for (int i = 0; i != 10; i++)
		{
			UPF.lp.add(player1[i], new Integer(5));
			UPF.lp.add(player2[i], new Integer(5));
		}
		UPF.lp.add(ball, new Integer(3));
		UPF.lp.add(goal, new Integer(6));
		UPF.lp.add(win, new Integer(6));
		UPF.lp.add(insRightTop, new Integer(6));
		UPF.lp.add(insLeftTop, new Integer(6));
		UPF.lp.add(insRightBot, new Integer(6));
		UPF.lp.add(insLeftBot, new Integer(6));
		UPF.lp.add(countdown, new Integer(6));
		UPF.lp.add(scoreDash, new Integer(6));
		UPF.lp.add(scoreBlue, new Integer(6));
		UPF.lp.add(scoreRed, new Integer(6));
		UPF.lp.add(toMenu, new Integer(6));

		UPF.f.repaint();

		resetAll(); //Resets all variables to their initial values 
		new Thread(new RunGame()).start(); //Starts the thread that moves the ball
		new Thread(new MovePlayers()).start(); //Starts the thread that allows user to move players
	}