1     package version13;
2     /**
3      * Curso Básico de desarrollo de Juegos en Java - Invaders
4      * 
5      * (c) 2004 Planetalia S.L. - Todos los derechos reservados. Prohibida su reproducción
6      * 
7      * http://www.planetalia.com
8      * 
9      */
10    
11    import java.awt.Canvas;
12    import java.awt.Color;
13    import java.awt.Dimension;
14    import java.awt.Graphics2D;
15    import java.awt.event.WindowAdapter;
16    import java.awt.event.WindowEvent;
17    import java.awt.image.BufferStrategy;
18    import java.util.ArrayList;
19    
20    import javax.swing.JFrame;
21    import javax.swing.JPanel;
22    
23    public class Invaders extends Canvas implements Stage {
24      
25      private BufferStrategy strategy;
26      private long usedTime;
27      
28      private SpriteCache spriteCache;
29      private ArrayList actors; 
30      
31      public Invaders() {
32        spriteCache = new SpriteCache();
33    
34        JFrame ventana = new JFrame("Invaders");
35        JPanel panel = (JPanel)ventana.getContentPane();
36        setBounds(0,0,Stage.WIDTH,Stage.HEIGHT);
37        panel.setPreferredSize(new Dimension(Stage.WIDTH,Stage.HEIGHT));
38        panel.setLayout(null);
39        panel.add(this);
40        ventana.setBounds(0,0,Stage.WIDTH,Stage.HEIGHT);
41        ventana.setVisible(true);
42        ventana.addWindowListener( new WindowAdapter() {
43          public void windowClosing(WindowEvent e) {
44            System.exit(0);
45          }
46        });
47        ventana.setResizable(false);
48        createBufferStrategy(2);
49        strategy = getBufferStrategy();
50        requestFocus();
51      }
52      
53      public void initWorld() {
54        actors = new ArrayList();
55        for (int i = 0; i < 10; i++){
56          Monster m = new Monster(this);
57          m.setX( (int)(Math.random()*Stage.WIDTH) );
58          m.setY( i*20 );
59          m.setVx( (int)(Math.random()*20-10) );
60          actors.add(m);
61        }
62      }
63      
64      public void updateWorld() {
65        for (int i = 0; i < actors.size(); i++) {
66          Actor m = (Actor)actors.get(i);
67          m.act();
68        }
69      }
70      
71      public void paintWorld() {
72        Graphics2D g = (Graphics2D)strategy.getDrawGraphics();
73        g.setColor(Color.black);
74        g.fillRect(0,0,getWidth(),getHeight());
75        for (int i = 0; i < actors.size(); i++) {
76          Actor m = (Actor)actors.get(i);
77          m.paint(g);
78        }
79    
80        g.setColor(Color.white);
81        if (usedTime > 0)
82          g.drawString(String.valueOf(1000/usedTime)+" fps",0,Stage.HEIGHT-50);
83        else
84          g.drawString("--- fps",0,Stage.HEIGHT-50);
85        strategy.show();
86      }
87      
88      public SpriteCache getSpriteCache() {
89        return spriteCache;
90      }
91      
92      public void game() {
93        usedTime=1000;
94        initWorld();
95        while (isVisible()) {
96          long startTime = System.currentTimeMillis();
97          updateWorld();
98          paintWorld();
99          usedTime = System.currentTimeMillis()-startTime;
100         try { 
101            Thread.sleep(SPEED);
102         } catch (InterruptedException e) {}
103       }
104     }
105     
106     public static void main(String[] args) {
107       Invaders inv = new Invaders();
108       inv.game();
109     }
110   }
111