-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathPlayer.java
189 lines (169 loc) · 5.71 KB
/
Player.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
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Point;
import java.awt.Rectangle;
import javax.swing.ImageIcon;
/**
* プレイヤークラス
*
* @author mori
*
*/
public class Player {
// 方向定数
private static final int LEFT = 0;
private static final int RIGHT = 1;
private static final int UP = 2;
private static final int DOWN = 3;
// 移動スピード
private static final int SPEED = 5;
// プレイヤーの位置(x, y座標)
private int x;
private int y;
// プレイヤーの幅
private int width;
// プレイヤーの高さ
private int height;
// プレイヤーの画像
private Image image;
// メインパネルへの参照
private MainPanel panel;
public Player(int x, int y, MainPanel panel) {
this.x = x;
this.y = y;
this.panel = panel;
// イメージをロード
loadImage();
}
/**
* プレイヤーを移動する
*
* @param dir 移動方向
*/
public void move(int dir) {
if (dir == LEFT) {
x -= SPEED;
} else if (dir == RIGHT) {
x += SPEED;
} else if (dir == UP) {
y -= SPEED;
} else if (dir == DOWN) {
y += SPEED;
}
// 画面の外に出ていたら中に戻す
if (x < 0) {
x = 0;
}
if (x > MainPanel.WIDTH - this.width) {
x = MainPanel.WIDTH - this.width;
}
if (y < 0) {
y = 0;
}
if (y > MainPanel.HEIGHT - this.height) {
y = MainPanel.HEIGHT - this.height;
}
}
/**
* プレイヤーとビームの衝突を判定する
*
* @param beam 衝突しているか調べるビームオブジェクト
* @return 衝突していたらtrueを返す
*/
public boolean collideWith(Beam beam) {
// プレイヤーの矩形を求める
Rectangle rectPlayer = new Rectangle(x, y, width, height);
// ビームの矩形を求める
Point pos = beam.getPos();
Rectangle rectBeam = new Rectangle(pos.x, pos.y, beam.getWidth(), beam.getHeight());
// 矩形同士が重なっているか調べる
// 重なっていたら衝突している
return rectPlayer.intersects(rectBeam);
}
public boolean collideWith(Meteorite meteorite) {
// プレイヤーの矩形を求める
Rectangle rectPlayer = new Rectangle(this.x, this.y, this.width, this.height);
// ビームの矩形を求める
Point pos = meteorite.getPos();
Rectangle rectMeteorite = new Rectangle(pos.x, pos.y, meteorite.getWidth(), meteorite.getHeight());
// 矩形同士が重なっているか調べる
// 重なっていたら衝突している
return rectPlayer.intersects(rectMeteorite);
}
public boolean collideWith(Alien alien) {
// プレイヤーの矩形を求める
Rectangle rectPlayer = new Rectangle(this.x, this.y, this.width, this.height);
// ビームの矩形を求める
Point pos = alien.getPos();
Rectangle rectAlien = new Rectangle(pos.x, pos.y, alien.getWidth(), alien.getHeight());
// 矩形同士が重なっているか調べる
// 重なっていたら衝突している
return rectPlayer.intersects(rectAlien);
}
public boolean collideWith(Boss boss) {
// プレイヤーの矩形を求める
Rectangle rectPlayer = new Rectangle(this.x, this.y, this.width, this.height);
// ビームの矩形を求める
Point pos = boss.getPos();
Rectangle rectBoss = new Rectangle(pos.x, pos.y, boss.getWidth(), boss.getHeight());
// 矩形同士が重なっているか調べる
// 重なっていたら衝突している
return rectPlayer.intersects(rectBoss);
}
public boolean collideWith(BossBeam bossBeam) {
// プレイヤーの矩形を求める
Rectangle rectPlayer = new Rectangle(this.x, this.y, this.width, this.height);
// ビームの矩形を求める
Point pos = bossBeam.getPos();
Rectangle rectBossBeam = new Rectangle(pos.x, pos.y, bossBeam.getWidth(), bossBeam.getHeight());
// 矩形同士が重なっているか調べる
// 重なっていたら衝突している
return rectPlayer.intersects(rectBossBeam);
}
/**
* プレイヤーを描画する
*
* @param g 描画オブジェクト
*/
public void draw(Graphics g) {
g.drawImage(image, x, y, null);
}
/**
* プレイヤーの位置を返す
*
* @return プレイヤーの位置座標
*/
public Point getPos() {
return new Point(x, y);
}
/**
* プレイヤーの幅を返す
*
* @param width プレイヤーの幅
*/
public int getWidth() {
return width;
}
/**
* プレイヤーの高さを返す
*
* @return height プレイヤーの高さ
*/
public int getHeight() {
return height;
}
/**
* イメージをロードする
*
*/
private void loadImage() {
// プレイヤーのイメージを読み込む
// ImageIconを使うとMediaTrackerを使わなくてすむ
ImageIcon icon = new ImageIcon(getClass().getResource(
"image/newplayer.gif"));
image = icon.getImage();
// 幅と高さをセット
width = image.getWidth(panel);
height = image.getHeight(panel);
}
}