Ben bezig om een Space Invadersclone te maken voorlopig (later breid ik het wel uit tot een shootemup)
Spel bestaat uit 3 classes, en ik heb kan niet verzinnen welke class de test voor collision detection moet gaan regelen.
Ik heb het nu geprobeerd te gooien bij de run()-method in main, maar hele applet hangt dan.
Het lijkt erop dat wanneer ik de posities van de class shots opvraagt en deze direct in de GotHit-method pompt van de Class ship, deze het geheel laat hangen. Hoe dat komt weet ik niet. Taskmanager zegt dat de applet helemaal niks doet. Geen CPU-time OID.
Vraag is dus: weet iemand waar het aan ligt, of kan iemand me op betere ideeen brengen? (ben nog nieuw met OOP)
Collegamodjes, mijn host lycos.nl is een beetje down, dus kan ik de code niet daar gaan proppen. Ben nu aan het proberen te zoeken naar de tweakers-FTP-data, dan pas ik deze post wel aan zodat het niet zo'n lap aan code laat zien
Spel bestaat uit 3 classes, en ik heb kan niet verzinnen welke class de test voor collision detection moet gaan regelen.
Ik heb het nu geprobeerd te gooien bij de run()-method in main, maar hele applet hangt dan.
Het lijkt erop dat wanneer ik de posities van de class shots opvraagt en deze direct in de GotHit-method pompt van de Class ship, deze het geheel laat hangen. Hoe dat komt weet ik niet. Taskmanager zegt dat de applet helemaal niks doet. Geen CPU-time OID.
Vraag is dus: weet iemand waar het aan ligt, of kan iemand me op betere ideeen brengen? (ben nog nieuw met OOP)
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
| /* Main class * * * * * */ import java.applet.Applet; import java.awt.*; public class main extends Applet implements Runnable { Thread runner; Image background_img, PlayerShip_img, EnemyShip_img, Explosion_img; Ship playership; Ship Enemies[] =new Ship[20] ; private Shot[] shots; int background_scrolling_speed; //doublebuffering vars Image dbImage; Graphics dbg; //key events boolean key_left; boolean key_right; boolean key_up; boolean key_down; boolean space; //Game variables private final int PlayerSpeed = 5; private final int shotSpeed = -7; private final int MaxEnemies = 16; private final int maxShots = 3; int PlayerStartX = 350; int PlayerStartY = 450; int EnPosX = 10; int EnPosY = 30; public void init() { background_img= getImage(getCodeBase(), "images/GameBackground.jpg"); EnemyShip_img= getImage(getCodeBase(), "images/EnemyShip.gif"); PlayerShip_img= getImage(getCodeBase(), "images/PlayerShip.gif"); Explosion_img= getImage(getCodeBase(), "images/Explosion.gif"); playership = new Ship(PlayerStartX, PlayerStartY,this); playership.setImages(PlayerShip_img); for (int i = 0; i<MaxEnemies; i++) { Enemies[i] = new Ship (EnPosX, EnPosY, this); Enemies[i].setImages(EnemyShip_img); if (EnPosX<500) EnPosX +=80; else if (EnPosX>=500) { EnPosX =50; EnPosY =80; } } shots = new Shot[maxShots]; } public void run() { Thread.currentThread().setPriority(Thread.MAX_PRIORITY); while(true) { //Thread sleeps for 10 milliseconds here try {runner.sleep(10);} catch (Exception e) { } background_scrolling_speed+=1; repaint(); // do operations on shots in shots array for(int i=0; i<shots.length; i++) { if(shots[i] != null) { // move shot shots[i].moveShot(shotSpeed); // test if shot is out if(shots[i].getYPos() < 0) { // remove shot from array shots[i] = null; } } } //Player control if(playership.getPosX() >=0 && playership.getPosX()<=660) { if (key_left) playership.moveX(-PlayerSpeed); if (key_right) playership.moveX(PlayerSpeed); } if(playership.getPosY() >=0 && playership.getPosY()<=460) { if (key_up) playership.moveY(-PlayerSpeed); if (key_down) playership.moveY(PlayerSpeed); } /* //Enemies movement (for testing purposes only) for (int i = 0; i<MaxEnemies; i++) { Enemies[i].moveY(1); } */ /* //Collision Detection for (int i=0; i<MaxEnemies; i++) { for (int j=0; j<maxShots; j++) if ( Enemies[i].GotHit(shots[j].getXPos(),shots[j].getYPos()) ) Enemies[i].setImages(Explosion_img); } */ } } public void paint(Graphics g) { //Tiling and scrolling the backgroundImage if (background_scrolling_speed>640 ) background_scrolling_speed=0; for (int i=-640; i <10; i+=640) { g.drawImage(background_img,0, background_scrolling_speed+i,this); } //Paint the playership playership.paintShip (g); //paint the enemies for (int i = 0; i<MaxEnemies; i++) Enemies[i].paintShip (g); // draw shots for(int i=0; i<shots.length; i++) { if(shots[i] != null) { shots[i].drawShot(g); } } } public boolean keyDown (Event e, int key) { if (key==Event.LEFT) key_left = true; else if (key== Event.RIGHT) key_right =true; else if (key==Event.UP) key_up=true; else if (key==Event.DOWN) key_down=true; // generate new shot and add it to shots array else if (key==32) for(int i=0; i<shots.length; i++) { if(shots[i] == null) { shots[i] = playership.Shoot(); break; } } return true; } public boolean keyUp (Event e, int key) { if (key==Event.LEFT) key_left = false; if (key==Event.RIGHT) key_right = false; if (key==Event.UP) key_up = false; if (key==Event.DOWN) key_down = false; return true; } //Double Buffering public void update (Graphics g) { //initialize buffer if (dbImage==null) { dbImage = createImage(this.getSize().width, this.getSize().height); dbg = dbImage.getGraphics(); } //clear screen in background dbg.setColor(getBackground()); dbg.fillRect(0,0,this.getSize().width, this.getSize().height); //draw elements in background dbg.setColor(getForeground()); paint(dbg); //draw image on the screen g.drawImage(dbImage,0,0,this); } public void start() { if (runner == null) { runner = new Thread (this); runner.start(); } } public void stop() { if (runner != null) { runner.stop(); runner = null; } } } |
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
| /* * class Ship, will later become superclass for * different type of ships * */ import java.awt.*; public class Ship { int x_pos; int y_pos; //gameplay components int speed; int shield; Image Ship_Img; private Component parent; public Ship(int x, int y, Component parent) { x_pos = x; y_pos = y; speed = speed; shield = shield; this.parent = parent; } public void setImages (Image Ship_img) { this.Ship_Img = Ship_img; } public void moveX (int move) { x_pos += move; if (x_pos>660) x_pos=660; if (x_pos<0) x_pos=0; } public void moveY (int move) { y_pos +=move; if (y_pos>460) y_pos=460; if (y_pos<0) y_pos=0; } public Shot Shoot() { Shot shot = new Shot(x_pos+30, y_pos); return shot; } public boolean GotHit(int x, int y) { int distance_x = x - x_pos; int distance_y = y - y_pos; double distance = Math.sqrt ((distance_x*distance_x)+(distance_y*distance_y)); if (distance <40) return true; else return false; } public void paintShip(Graphics g) { g.drawImage(Ship_Img, x_pos, y_pos, parent); } public int getPosX() { return x_pos; } public int getPosY() { return y_pos; } public int getShieldStatus() { return shield; } public int getSpeedStatus() { return speed; } } |
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
| /* * Class shot * handles the bulletsobject. */ import java.awt.Graphics; import java.awt.Color; public class Shot { private int x_pos; private int y_pos; private final int radius = 5; public Shot(int x, int y) { x_pos = x; y_pos = y; } public int getYPos() { return y_pos; } public int getXPos() { return x_pos; } public void moveShot(int speed) { y_pos += speed; } public void drawShot(Graphics g) { g.setColor(Color.yellow); g.fillOval(x_pos -28, y_pos+5, radius, radius); } } |
Collegamodjes, mijn host lycos.nl is een beetje down, dus kan ik de code niet daar gaan proppen. Ben nu aan het proberen te zoeken naar de tweakers-FTP-data, dan pas ik deze post wel aan zodat het niet zo'n lap aan code laat zien
[ Voor 3% gewijzigd door kmf op 18-04-2003 11:48 ]
One thing's certain: the iPad seriously increases toilet time.. tibber uitnodigingscode: bqufpqmp