JAVA 프로젝트 학습 의 탱크 대전 단기 판
3453 단어 자바대상 을 향 하 다
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());
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.