import javax.swing.JPanel; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.awt.Graphics; import java.awt.Color; import javax.swing.Timer; import java.awt.Rectangle; import java.awt.Graphics2D; import java.awt.Font; public class Gameplay extends JPanel implements KeyListener, ActionListener { private boolean play = false; private int score = 0; private int totalBricks = 21; private Timer timer; private int delay = 8; private int playerX = 310; private int ballposX = 120; private int ballposY = 350; private int ballXdir = -1; private int ballYdir = -2; private MapGenerator map; public Gameplay() { map = new MapGenerator (3, 7); addKeyListener(this); setFocusable(true); setFocusTraversalKeysEnabled(false); timer = new Timer(delay, this); timer.start(); } public void paint (Graphics g) { // Background g.setColor(Color.black); g.fillRect (1,1, 692, 592); // Drawing Map map.draw ((Graphics2D)g); // Borders g.setColor (Color.yellow); g.fillRect (0,0, 3, 592); g.fillRect (0,0, 692, 3); g.fillRect (691,0, 3, 592); // scores g.setColor (Color.WHITE); g.setFont (new Font("sans-serif", Font.BOLD, 25)); g.drawString (""+score, 520, 30); // Paddle g.setColor (Color.green); g.fillRect (playerX, 525, 80, 40); //550, 100, 8 // Ball g.setColor (Color.yellow); g.fillOval (ballposX, ballposY, 20, 20); if (totalBricks <= 0) { play = false; ballXdir = 0; ballYdir = 0; g.setColor (Color.yellow); g.setFont (new Font("serif", Font.BOLD, 25)); g.drawString ("You won! ", 190, 300); g.drawString ("Press Enter to Restart", 230, 350); } // game Over if (ballposY > 570) { play = false; ballXdir = 0; ballYdir = 0; g.setColor (Color.RED); g.setFont (new Font("serif", Font.BOLD, 25)); g.drawString ("Game Over, Scores: ", 190, 300); g.drawString ("Press Enter to Restart", 230, 350); } g.dispose(); } @Override public void actionPerformed (ActionEvent e) { timer.start(); if (play) { if (new Rectangle (ballposX, ballposY, 20, 20).intersects (new Rectangle(playerX, 525, 80, 40))) { ballYdir = -ballYdir; } for (int i = 0; i < map.map.length; i++) { for (int j = 0; j < map.map[0].length; j++) { if (map.map[i][j] > 0) { int brickX = j* map.brickWidth + 80; int brickY = i * map.brickHeight + 50; int brickWidth = map.brickWidth; int brickHeight = map.brickHeight; Rectangle rect = new Rectangle(brickX, brickY, brickWidth, brickHeight); Rectangle ballRect = new Rectangle (ballposX, ballposY, 20, 20); Rectangle brickRect = rect; if (ballRect.intersects (brickRect)) { map.setBrickValue (0, i, j); totalBricks--; score += 5; if (ballposX + 19 <= brickRect.x || ballposX + 1 >= brickRect.x + brickRect.width) { ballXdir = -ballXdir; } else { ballYdir = -ballYdir; } } } } } ballposX += ballXdir; ballposY += ballYdir; if (ballposX < 0) { ballXdir = -ballXdir; } if (ballposY < 0) { ballYdir = -ballYdir; } if (ballposX > 670) { ballXdir = -ballXdir; } } repaint(); } @Override public void keyTyped (KeyEvent e) { } @Override public void keyPressed (KeyEvent e) { if (e.getKeyCode() == KeyEvent.VK_RIGHT) { if (playerX >= 600) { playerX = 600; } else { moveRight(); } } if (e.getKeyCode() == KeyEvent.VK_LEFT) { if (playerX < 10) { playerX = 10; } else { moveLeft(); } } if (e.getKeyCode() == KeyEvent.VK_ENTER) { if (!play) { play = true; ballposX = 120; ballposY = 350; ballXdir = -1; ballYdir = -2; playerX = 310; score = 0; totalBricks = 21; map = new MapGenerator(3, 7); repaint(); } } } @Override public void keyReleased (KeyEvent e) { } public void moveRight() { play = true; playerX += 20; } public void moveLeft() { play = true; playerX -= 20; } }