import java.awt.*; import java.awt.event.*; import javax.swing.*; class Tennisbana extends JPanel implements ActionListener{ private Timer klocka = new Timer (10, this); private JLabel visaPoäng; private int poäng; private int xMax; private int yMax; private int radie; private int x; private int y; private int vx; private int vy; private int xSteg; private int ySteg; private int racket; private int längdR; private int stegR; public Tennisbana(){ setPreferredSize(new Dimension(300, 400)); setBackgroundcolor(Color.red); } public void start (JLabel p){ visapoäng = p; xMax = getSize ().width; yMax = getSize().height; radie = 15; längdR = 40; stegR= 15; nollställ(); //Kommando från tangentbord addKeyListener (new KeyAdapter(){ public void keyPressed(KeyEvent e){ if (e.getKeyCode() == KeyEvent.VK_LEFT){ racket = Math.max(0, racket-stegR); } else if (e.getKeyCode() == KeyEvent.VK_RIGHT){ racket = Math.min(xMax-längdR, racket+stegR); } } }); //Stroleksändringar addComponentListener(new ComponentAdapter(){ public void componentResized(ComponentEvent e){ xMax = e.getComponent().getSize().width; yMax = e.getComponent().getSize().height; e.getComponent().requestFocus(); repaint(); } }); } private void nollställ(){ poäng = 0; visaPoäng.setText(" 0"); xSteg = vx = 5; ySteg = vy = 5; x = xMax/2; y = radie+2; racket = xMax/2-längdR/2; } public void startaSpel(){ if (poäng < 10){ klocka.start(); } } public void stoppaSpel(){ klocka.stop(); } public void nyttSpel(){ stoppaSpel(); nollställ(); startaSpel(); } //anropas av timern public void actionPerformed(ActionEvent e){ if ( y+radie >= yMax-4){ if (x < racket || x > racket+längdR){ Toolkit.getDefaultToolkit().beep(); visaPoäng.setText(String.valueOf(++poäng)); if (poäng >= 1+){ stoppaSpel(); } } else if (xSteg >0){ xSteg++; vy++; } else{ xSteg--; vy++; } ySteg = -vy; } else if (y-radie <= 0){ ySteg = vy; } if (x-radie<=0 || x+radie>=xMax){ xSteg = -xSteg; } x += xSteg; y += ySteg; if (y < radie){ y = radie; } else if (x > xMax-radie){ x = xMax-radie; } repaint(); } // Boll och racket public void paintComponent(Graphics g) { super.paintComponent(g); g.setColor(Color.yellow); g.fillOval(x-radie, y-radie, 2*radie, 2*radie); g.setColor(Color.yellow); g.fillRect(racket, yMax-4,längdR, yMax); } }