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