어서와 Java는 처음이지! 제20장 실전프로젝트 #2
LAB: 갤러그 게임 작성 우리는 자바 그래픽을 이용하여 다음과 같은 “갤러그” 유사 게임을 제작할 것이다.
어떤 객체들이 필요한가?
클래스 StarShipSprite 클래스 - 주인공 우주선을 모델링한다. AlienSprite 클래스 - 외계인 우주선을 모델링한다. ShotSprite 클래스 – 포탄을 모델링한다. GalagaGame 클래스 – 게임 보드를 모델링한다.
상속을 이용한 설계
상속을 이용한 설계
Sprite.java // 소스를 입력하고 Ctrl+Shift+O를 눌러서 필요한 파일을 포함한다. public class Sprite { protected int x; // 현재 위치의 x좌표 protected int y; // 현재 위치의 y좌표 protected int dx; // 단위시간에 움직이는 x방향 거리 protected int dy; // 단위시간에 움직이는 y방향 거리 private Image image; // 스프라이트가 가지고 있는 이미지 // 생성자 public Sprite(Image image, int x, int y) { this.image = image; this.x = x; this.y = y; } // 스프라이트의 가로 길이를 반환한다. public int getWidth() { return image.getWidth(null); // 스프라이트의 세로 길이를 반환한다. public int getHeight() { return image.getHeight(null);
// 스프라이트를 화면에 그린다. public void draw(Graphics g) { g // 스프라이트를 화면에 그린다. public void draw(Graphics g) { g.drawImage(image, x, y, null); } // 스프라이트를 움직인다. public void move() { x += dx; y += dy; // dx를 설정한다. public void setDx(int dx) { this.dx = dx; } // dy를 설정한다. public void setDy(int dy) { this.dy = dy; } // dx를 반환한다. public int getDx() { return dx; } // dy를 반환한다. public int getDy() { return dy; } // x를 반환한다. public int getX() { return x; } // y를 반환한다. public int getY() { return y; }
// 다른 스프라이트와의 충돌 여부를 계산한다. 충돌이면 true를 반환한다 // 다른 스프라이트와의 충돌 여부를 계산한다. 충돌이면 true를 반환한다. public boolean checkCollision(Sprite other) { Rectangle myRect = new Rectangle(); Rectangle otherRect = new Rectangle(); myRect.setBounds(x, y, getWidth(), getHeight()); otherRect.setBounds(other.getX(), other.getY(), other.getWidth(), other.getHeight()); return myRect.intersects(otherRect); } // 충돌을 처리한다. public void handleCollision(Sprite other) {
StarShipSprite.java public class StarShipSprite extends Sprite { private GalagaGame game; public StarShipSprite(GalagaGame game, Image image, int x, int y) { super(image, x, y); this.game = game; dx = 0; dy = 0; } @Override public void move() { if ((dx < 0) && (x < 10)) { return; if ((dx > 0) && (x > 800)) { super.move(); public void handleCollision(Sprite other) { if (other instanceof AlienSprite) { game.endGame();
Q & A