1     package version17;
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    
12    import java.awt.Canvas;
13    import java.awt.Color;
14    import java.awt.Dimension;
15    import java.awt.Graphics2D;
16    import java.awt.event.KeyEvent;
17    import java.awt.event.KeyListener;
18    import java.awt.event.WindowAdapter;
19    import java.awt.event.WindowEvent;
20    import java.awt.image.BufferStrategy;
21    import java.util.ArrayList;
22    
23    import javax.swing.JFrame;
24    import javax.swing.JPanel;
25    
26    public class Invaders extends Canvas implements Stage, KeyListener {
27      
28      private BufferStrategy strategy;
29      private long usedTime;
30      
31      private SpriteCache spriteCache;
32      private ArrayList actors; 
33      private Player player;
34      
35      public Invaders() {
36        spriteCache = new SpriteCache();
37        
38      
39        JFrame ventana = new JFrame("Invaders");
40        JPanel panel = (JPanel)ventana.getContentPane();
41        setBounds(0,0,Stage.WIDTH,Stage.HEIGHT);
42        panel.setPreferredSize(new Dimension(Stage.WIDTH,Stage.HEIGHT));
43        panel.setLayout(null);
44        panel.add(this);
45        ventana.setBounds(0,0,Stage.WIDTH,Stage.HEIGHT);
46        ventana.setVisible(true);
47        ventana.addWindowListener( new WindowAdapter() {
48          public void windowClosing(WindowEvent e) {
49            System.exit(0);
50          }
51        });
52        ventana.setResizable(false);
53        createBufferStrategy(2);
54        strategy = getBufferStrategy();
55        requestFocus();
56        addKeyListener(this);
57      }
58      
59      public void initWorld() {
60        actors = new ArrayList();
61        for (int i = 0; i < 10; i++){
62          Monster m = new Monster(this);
63          m.setX( (int)(Math.random()*Stage.WIDTH) );
64          m.setY( i*20 );
65          m.setVx( (int)(Math.random()*20-10) );
66          
67          actors.add(m);
68        }
69        
70        player = new Player(this);
71        player.setX(Stage.WIDTH/2);
72        player.setY(Stage.HEIGHT - 2*player.getHeight());
73      }
74      
75    
76      
77      public void updateWorld() {
78        for (int i = 0; i < actors.size(); i++) {
79          Actor m = (Actor)actors.get(i);
80          m.act();
81        }
82        player.act();
83      }
84      
85      public void paintWorld() {
86        Graphics2D g = (Graphics2D)strategy.getDrawGraphics();
87        g.setColor(Color.black);
88        g.fillRect(0,0,getWidth(),getHeight());
89        for (int i = 0; i < actors.size(); i++) {
90          Actor m = (Actor)actors.get(i);
91          m.paint(g);
92        }
93        player.paint(g);
94    
95        g.setColor(Color.white);
96        if (usedTime > 0)
97          g.drawString(String.valueOf(1000/usedTime)+" fps",0,Stage.HEIGHT-50);
98        else
99          g.drawString("--- fps",0,Stage.HEIGHT-50);
100       strategy.show();
101     }
102     
103     public SpriteCache getSpriteCache() {
104       return spriteCache;
105     }
106     
107     public void keyPressed(KeyEvent e) {
108       player.keyPressed(e);
109     }
110     
111     public void keyReleased(KeyEvent e) {
112       player.keyReleased(e);
113     }
114     public void keyTyped(KeyEvent e) {}
115     
116     public void game() {
117       usedTime=1000;
118       initWorld();
119       while (isVisible()) {
120         long startTime = System.currentTimeMillis();
121         updateWorld();
122         paintWorld();
123         usedTime = System.currentTimeMillis()-startTime;
124         try { 
125            Thread.sleep(SPEED);
126         } catch (InterruptedException e) {}
127       }
128     }
129     
130     public static void main(String[] args) {
131       Invaders inv = new Invaders();
132       inv.game();
133     }
134   }
135