1 package version13;
2
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