본문 바로가기

Java/본격 Java 퀴즈 기초

[Java] 점과 원 위치 이동하는 절차 인터페이스로 만들기

좌표평면에서 점이 이동하기 위해서는 위, 아래, 왼쪽, 오른쪽 이동메소드가 필요하다.

상위인터페이스에 만들어주도록하자.

.

.

package InterfaceMoveable;

public interface Moveable {
	public abstract void moveUp();
	public abstract void moveDown();
	public abstract void moveLeft();
	public abstract void moveRight();
}

.

.

좌표평면은 컴퓨터 화면 기준으로 한다.

왼쪽 상단 부분을 (0,0)으로 시작하여 오른쪽과 아래로 가는 것이 +이다.

.

.

점 이동 클래스부터 구현해본다.

.

.

package InterfaceMoveable;

public class MoveablePoint implements Moveable{
	int x, y, xSpeed, ySpeed;
	
	public MoveablePoint(int x, int y, int xSpeed, int ySpeed) {
		this.x = x;
		this.y = y;
		this.xSpeed = xSpeed;
		this.ySpeed = ySpeed;
	}
	
	public void moveUp() {
		y -= ySpeed;
	}
	public void moveDown() {
		y += ySpeed;
	}
	public void moveLeft() {
		x -= xSpeed;
	}
	public void moveRight() {
		x += xSpeed;
	}
	
	@Override
	public String toString() {
		return "MoveablePoint [x=" + x + ", y=" + y + ", xSpeed=" + xSpeed + ", ySpeed=" + ySpeed + "]";
	}
}

.

.

xSpeed와 ySpeed는 단위이동당 얼만큼 움직이나를 나타내는 것이다.

.

.

원이 움직이는 클래스도 만들어본다.

원이 움직이는 것은 원의 중심이 움직이는 것으로 한다.

.

.

package InterfaceMoveable;

public class MoveableCircle implements Moveable{
	int radius;
	MoveablePoint center;
	MoveableCircle(int x, int y, int xSpeed, int ySpeed, int radius){
		center = new MoveablePoint(x, y, xSpeed, ySpeed);
		this.radius = radius;
	}
	
	public void moveUp() {
		center.y -= center.ySpeed;
	}
	public void moveDown() {
		center.y += center.ySpeed;
	}
	public void moveLeft() {
		center.x -= center.xSpeed;
	}
	public void moveRight() {
		center.x += center.xSpeed;
	}

	@Override
	public String toString() {
		return "MoveableCircle [radius=" + radius + ", center=" + center + "]";
	}
	
	
}

.

.

한 번 테스트 해본다.

.

.

package InterfaceMoveable;

public class TestMoveable {

	public static void main(String[] args) {
		Moveable m1 = new MoveablePoint(5, 6, 10, 10);
		System.out.println(m1);
		m1.moveLeft();
		System.out.println(m1);
		
		Moveable m2 = new MoveableCircle(2, 1, 2, 2, 20);
		System.out.println(m2);
		m2.moveRight();
		System.out.println(m2);
		
	}

}

.

.

입력한대로 잘 움직였다.

좌표평면이 우리가 중고등학교때 배웠던 것이랑 차이가 있어서 이해하는데 조금 어려움이 있었다.

728x90
반응형