JAVA 프로젝트 학습 의 탱크 대전 단기 판

학부 단계 에 서 는 JAVA 과정 을 배 웠 음 에 도 불구 하고 늘 오리무중 이 었 다.그 동안 마 병 선생님 JAVA 기초 강 좌 를 열심히 배 웠 고 TankWar 의 작은 프로젝트 를 따라 썼 습 니 다.JAVA 의 유형 사용 에 대해 새로운 인식 을 가지 게 된 것 같 습 니 다.생각 이 원래 보다 훨씬 뚜렷 해 졌 습 니 다.여기 서 TankWar 프로젝트 를 정리 하 겠 습 니 다.
Tankwar 프로젝트 는 모두 6 가지 종류 가 있 습 니 다.
TankClient 클래스:전체 게임 의 큰 관리자 에 해당 합 니 다.각 종 류 는 TankClient 의 인용 이 있 고 게임 창의 재 그림 을 책임 집 니 다.난점:더 블 버퍼 로 반 짝 임 제거;스 레 드 재 구축 은 이동 이 고 르 도록 보장 합 니 다.paint()방법 은 다른 종류의 draw()방법,즉 자신 을 그 리 는 것 입 니 다.마찬가지 로 버튼 의 해당 도 다른 유형 자체 가 이 루어 진다.
Tank 류:속성 에 따라 자신 이나 적 을 생 성 할 수 있 습 니 다.대상 을 대상 으로 하 는 사상 에 따라 Tank 발 Missile,즉 fire()방법 은 Tank 류 에 포함 되 어야 합 니 다.난점:8 개 방향의 이동 실현;충돌 검출(Rectangle 사용);지능 탱크 의 실현(Random 사용),불규칙 운동 으로 스스로 포탄 을 발사 할 수 있 습 니 다.이전 위 치 를 기록 하 는 oldX,oldY 변 수 를 설정 하고 충돌 하면 이전 위치 로 돌아 갈 수 있 습 니 다(stay 방법).
Missile 류:속성 에 따라 자신의 Missile 또는 적 Missile 을 생 성 할 수 있 습 니 다.대상 을 대상 으로 하 는 사상 에 따라 Missile 타 Tank,즉 hitTank()방법 은 Missile 류 에 포함 되 어야 합 니 다.난점:Tank 가 정의 하 는 매 거 진 방향 변 수 를 이용 할 수 있 습 니 다.
Explode 클래스:Explode 효과 가 발생 합 니 다.즉,작은 것 부터 작은 것 까지 원 을 그립 니 다.
Wall 류:Wall 장애물 을 설치 합 니 다.
Blood 류:Tank 에 Blood 를 증가 시 킬 수 있 습 니 다.
난점 코드 예시:
(1)더 블 버퍼 로 반 짝 임 제거
public void update(Graphics g) {
		if (offScreenImage == null) {
			offScreenImage = this.createImage(GAME_WIDTH, GAME_HEIGHT);
		}
		Graphics gOffScreen = offScreenImage.getGraphics();
		Color c = gOffScreen.getColor();
		gOffScreen.setColor(Color.BLACK);
		gOffScreen.fillRect(0, 0, GAME_WIDTH, GAME_HEIGHT);
		gOffScreen.setColor(c);
		paint(gOffScreen);
		g.drawImage(offScreenImage, 0, 0, null);

	}
(2)8 개 방향의 이동 실현
enum direction {L, LU, U, RU, R, RD, D, LD, STOP};
private boolean bL = false, bU = false, bR = false, bD = false;
public void locateDirection() {
		if (bL && !bU && !bR && !bD)
			dir = direction.L;
		else if (bL && bU && !bR && !bD)
			dir = direction.LU;
		else if (!bL && bU && !bR && !bD)
			dir = direction.U;
		else if (!bL && bU && bR && !bD)
			dir = direction.RU;
		else if (!bL && !bU && bR && !bD)
			dir = direction.R;
		else if (!bL && !bU && bR && bD)
			dir = direction.RD;
		else if (!bL && !bU && !bR && bD)
			dir = direction.D;
		else if (bL && !bU && !bR && bD)
			dir = direction.LD;
		else if (!bL && !bU && !bR && !bD)
			dir = direction.STOP;
	}

	public void move() {
		switch (dir) {
		case L:
			x -= XSPEED;
			break;
		case LU:
			x -= XSPEED;
			y -= YSPEED;
			break;
		case U:
			y -= YSPEED;
			break;
		case RU:
			x += XSPEED;
			y -= YSPEED;
			break;
		case R:
			x += XSPEED;
			break;
		case RD:
			x += XSPEED;
			y += YSPEED;
			break;
		case D:
			y += YSPEED;
			break;
		case LD:
			x -= XSPEED;
			y += YSPEED;
			break;
		}
	}

(3)스마트 탱크 의 실현(Random 사용),불규칙 운동,스스로 포탄 발사 가능
 			private Random r = new Random();
			direction dirs[] = direction.values();
			if (step == 0) {
				step = r.nextInt(12) + 3;
				int rn = r.nextInt(dirs.length);
				dir = dirs[rn];
			}
			step--;
			if (r.nextInt(50) > 47)
				fire();

(4)충돌 감지(Rectangle 사용)
public Rectangle getRect() {
		return new Rectangle(x, y, WIDTH, HEIGHT);
	}
this.getRect().intersects(b.getRect());

좋은 웹페이지 즐겨찾기