1 package version17;
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.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