본문 바로가기

카테고리 없음

JButton으로 슈팅게임 2-4 몬스터 2,3 만들기

이번에는 좀 쉬어가는 타임으로, 이전에 만들었던 몬스터 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()안에 붙이기

 

* 약간 연한 색이 몬스터 3입니다.

 

- 몬스터 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();
			}
		}
		
	}

끝!