이번에는 좀 쉬어가는 타임으로, 이전에 만들었던 몬스터 1번을 복붙해서 2,3을 만들겠습니다.
왜냐하면 다음에 할 일이 '충돌'인데, 벌써 무섭거든요 ...
전제 : 몬스터 1은 1.5초당 x 는 랜덤, y는 -50 좌표에서 생성, 직선으로 내려온다.
몬스터 2는 2초당 x는 랜덤, y는 -50 좌표에서 생성, 좌우로 움직이며 내려온다.
몬스터 3은 3초당 x는 -50, y는 랜덤 좌표에서 생성, (이동 거리를 높여 더 빠름), 직선으로 지나간다.
(이후 만들 예정) 몬스터 3을 3회 잡아야 보스 페이즈로 넘어갈 수 있다.
오늘 할 일 : 몬스터 2,3 class를 만들고 run()안에 붙이기
- 몬스터 1과 비슷한 조건
- boolean타입의 direction을 생성, 오른쪽으로 가다가 벽을 만나면 왼쪽으로,
또 왼쪽으로 가다가 벽을 만나면 오른쪽으로 가는 것을 반복하게 함
package Game1;
import javax.swing.ImageIcon;
import javax.swing.JButton;
public class Monster2 extends JButton implements Runnable {
Play_Phase1 play1;
private int monX, monY;
private boolean direction;
Monster2(Play_Phase1 play1){
this.play1 = play1;
monX =(int)((Math.random()*420)+20); //위치 설정
monY = -50;
ImageIcon icmon = new ImageIcon("별_빨강.png"); //이미지 설정
this.setIcon(icmon);
this.setBorderPainted(false);
this.setFocusPainted(false);
this.setContentAreaFilled(false);
this.setBounds(monX, monY, 50, 50);
/**add Monster*/
play1.add(this);
}
@Override
public void run() {
while(monY<700){
try {
Thread.sleep(100);//적이 떨어지는 시간
} catch (InterruptedException e) {
e.printStackTrace();
}
/**set Location*/
if (direction == false) { //오른쪽으로
this.setLocation(monX+=10, monY+=15);
if (monX > 430) {
direction = true;
}
} else if (direction == true) { //왼쪽으로
this.setLocation(monX-=10, monY+=15);
if (monX < 20) {
direction = false;
}
}
}
play1.remove(this);
play1.repaint();
play1.revalidate();
}
}
- 몬스터 1과 비슷한 조건
- 좌표 x,y의 조건이 반대
- 위치 설정시 이동 숫자를 키워서 속도를 높임
package Game1;
import javax.swing.ImageIcon;
import javax.swing.JButton;
public class Monster3 extends JButton implements Runnable {
Play_Phase1 play1;
private int monX, monY;
Monster3(Play_Phase1 play1){
this.play1 = play1;
monX = -50;
monY = (int)((Math.random()*500)+20); //위치 설정
ImageIcon icmon = new ImageIcon("별_주황.png"); //이미지 설정
this.setIcon(icmon);
this.setBorderPainted(false);
this.setFocusPainted(false);
this.setContentAreaFilled(false);
this.setBounds(monX, monY, 50, 50);
/**add Monster*/
play1.add(this);
}
@Override
public void run() {
while(monX<500){
try {
Thread.sleep(100);//적이 떨어지는 시간
} catch (InterruptedException e) {
e.printStackTrace();
}
/**set Location*/
this.setLocation(monX+=30, monY);
}
play1.remove(this);
play1.repaint();
play1.revalidate();
}
}
- 메인 (Play_Phase1)의 run()안에 넣기
- 시간차를 위해 if문의 숫자를 조정
@Override
public void run() {
while(true) {
try {
Thread.sleep(500);//객체가 생성되는 시간
countTime += 500;
} catch (InterruptedException e) {
e.printStackTrace();
}
/**Monster 1 count*/
if(countTime%1500 == 0) {
monster1 = new Monster1(this);
(new Thread(monster1)).start();
}
/**Monster 2 count*/
if(countTime%2000 == 0) {
monster2 = new Monster2(this);
(new Thread(monster2)).start();
}
/**Monster 3 count*/
if(countTime%3000 == 0) {
monster3 = new Monster3(this);
(new Thread(monster3)).start();
}
/**Bullet count*/
if(countTime%500 == 0&& isFire == true) {
isFire = false;
bullet = new BtnBullet(this);
(new Thread(bullet)).start();
}
}
}
끝!