-
Notifications
You must be signed in to change notification settings - Fork 0
/
Bullet.java
112 lines (104 loc) · 3.16 KB
/
Bullet.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
package asteroidymodyfikacja;
//martapalka
/**
* KLASA: Bullet
* OPIS: Odpowiedzialna jest za tworzenie pocisku
* 1.Obiekt pocisku jest sprzężony ze statkiem (ich pozycje są jednakowe jeśli pocisk nie został wystrzelony)
* 2.Zmienna boolean shoot określa stan pocisku
* 3.Zmienna ounter pozwala sterować zasięgiem i opóźnieniem pocisku- ulega zmniejszeniu w zależności od poziomu, gdyż jest coraz więcej asteroid
*/
public class Bullet extends Circle {
static Point pos = Ship.pos;
boolean shoot = false;
int counter = 10;
int counterLimit=0;
static double rot;
Point[] sqr = { new Point(0, 0), new Point(0, 5), new Point(5, 5),
new Point(5, 0) };
Polygon square;
/**
* Konstruktor klasy Bullet
* Zostaje utworzony nowy wielokąt (kwadrat) o określonej pozycji i rotacji
*/
public Bullet() {
super(pos, 5);
square = new Polygon(sqr, position, rot);
}
/**
* Metoda pozwalająca na zmianę pola counter w zależności od poziomu
* @param level
*/
public void setCounterLimit(int level){
switch(level){
case 1:
counterLimit=50;
break;
case 2:
counterLimit=40;
break;
case 3:
counterLimit=30;
break;
case 4:
counterLimit=20;
break;
case 5:
counterLimit=10;
break;
default:
counterLimit =50;
}
}
/**
*
* @param level
* @return Zwraca ograniczenie countera dla danego poziomu
*/
public int getCounterLimit(int level){
return counterLimit;
}
/**
* Tworzona jest tablica pocisków
* @param n ile pocisków ma zostać utworzonych
* @return zwraca tablicę pocisków
*/
public static Bullet[] bullets(int n) {
Bullet[] bullets = new Bullet[n];
for (int i = 0; i < n; i++) {
bullets[i] = new Bullet();
}
return bullets;
}
/**
* Metoda umożliwiająca ruch pocisku (jeśli shoot=0 to wraz ze statkiem jeśli natomiast wynosi 1, to odzielnie)
* @param s-statek
* @param level
*/
public void move(Ship s , int level) {
setCounterLimit(level);
counter++;
if (counter > getCounterLimit(level)) {
if (s.shift) {
shoot = true;
counter = 0;
}
}
if (shoot == true) {
this.position = new Point(this.position.x
+ (10 * Math.cos(Math.toRadians(rot))), this.position.y
+ (10 * Math.sin(Math.toRadians(rot))));
if (counter > getCounterLimit(level)) {
shoot = false;
}
else if(this.position.x > Asteroids.w || this.position.x < 0 || this.position.y > Asteroids.h || this.position.y < 0){
shoot = false;
counter = getCounterLimit(level);
}
} else {
this.position = s.position;
this.rot = s.rotation;
}
square.position = this.position;
square.rotation = this.rot;
}
}