//Main method public class pong{ public static void main(String[] arg){ Tennis tennisFönster = new Tennis(); tennisFönster.setVisible(true); } } //Tennis import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Tennis extends JFrame{ private Tennisbana bana = new Tennisbana(); private JLabel poäng; private JPanel p; private JButton[] knapp = new JButton[4]; private String[] knapptext = {"Nytt spel" , "Paus" , "Fortsätt" , "Avsluta"}; public Tennis(){ super("Tennis"); poäng = new JLabel(" 0", JLabel.RIGHT); poäng.setFont(new Font("Arial", Font.BOLD, 30)); p = new JPanel(); Lyssnare minLyssnare = new Lyssnare(); for (int i=0; i < knapp.length; i++){ knapp[i] = new JButton(); knapp[i].setText(knapptext[i]); knapp[i].addActionListener(minLyssnare); p.add(knapp[i]); } Container c = getContentPane(); c.add(poäng, "North"); c.add(bana, "Center"); c.add(p, "South"); addWindowListener(new WindowAdapter(){ public void windowsClosing(WindowEvent e){ System.exit(0); } }); pack(); bana.start(poäng); } class Lyssnare implements ActionListener{ public void actionPerformed(ActionEvent ae){ bana.requestFocus(); if (ae.getSource() == knapp[0]){ bana.nyttSpel(); } else if (ae.getSource() == knapp[2]){ bana.startaSpel(); } else{ System.exit(0); } } } } //Tennisbana 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 racket1; private int längdR; private int stegR; public Tennisbana(){ setPreferredSize(new Dimension(300, 400)); setBackground(Color.white); } public void start (JLabel p){ visapoäng = p; xMax = getSize().width; yMax = getSize().height; radie = 15; längdR = 40; stegR= 15; nollställ(); //Första Racket 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); } } }); // Andra racket addKeyListener (new KeyAdapter(){ public void keyPressed(KeyEvent e){ if (e.getKeyCode() == KeyEvent.VK_A){ racket1 = Math.max(0, racket1-stegR); } else if (e.getKeyCode() == KeyEvent.VK_S){ racket1 = Math.min(xMax-längdR, racket1+stegR); } } }); //Storleksändring 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 = 3; ySteg = vy = 3; x = xMax/2; y = radie+2; racket = xMax/2-längdR/2; racket1 = 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 >= 10){ 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); g.setColor(Color.red); g.fillRect(racket1, yMax-4,längdR, yMax); } }