로보코드 보고서
본 자료는 7페이지 의 미리보기를 제공합니다. 이미지를 클릭하여 주세요.
닫기
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
해당 자료는 7페이지 까지만 미리보기를 제공합니다.
7페이지 이후부터 다운로드 후 확인할 수 있습니다.

목차

1. 로보코드란 무엇인가

2. 로보코드의 특징

3. 로봇의 구조

4. 로봇만들기
(1) 로보코드 설치방법
(2) 로봇 작성 방법
(3) 로봇 대전 방법

5. 샘플소스코드 분석

6. 로보코드 중요 Method 분석

7. 적 로봇의 좌표 구하기
(1) bearing과 heading의 차이점
(2) 간단한 삼각함수 공식
(3) 적 로봇의 좌표 구하기

8. 레이더로부터 적의 위치를 알아내기
(1) 기본적인 방향각 설명
(2) ScannedRobotEvent
(3) bearing에 대한 설명
(4) 포선을 상대 로봇으로 향하기

9. My robot "JJ"

본문내용

.getBearing() ] 단순히 이 각도만큼 오른쪽 시계방향으로 틀어주면 Bearing 의 +,- 에 상관없이 상대 로보트를 정면으로 바라볼 수 있다.
4) 포신을 상대 로봇으로 향하기
위에서는 Bearing 을 이용해서 내 로봇이 상대 로봇을 정면으로 바라보도록 하는 방법을 설명했다. 그런데 포신을 상대 로봇에게 향하도록 하려면 위의 정보만으로는 부족하다. 위의 그림의 로봇은 포신과 로봇의 동체가 일직선상에 놓여있기 때문에bearing 을 더하는 것만으로포신을 상대 로봇으로 향하게 할 수 있지만 포신이 항상 로봇의 동체와 같은 곳을 바라보지는 않는다. 아래의 그림 3에서는 로봇의 정면과 포신이 서로 다른 방향을 하고 있다. 위에서 상대 로봇의 Bearing 각도는 구했지만 포신을 상대 로봇으로 돌려서 사격을 하려면 또다른 각도를 구해야 하는데 이 각도가 바로 포신의 각도인 GunBearing 이다.

GunBearing 은 위에서 살펴본 Bearing 과 같은 방식으로 설명될 수 있다. 내 로봇의 정면으로부터 포신이 좌측에 있으면 -Bg, 우측에 있으면 +Bg 로 표현한다. 아래 그림에 나와 있듯이 포신을 상대 로봇에게 향하게 하려면 Bearing 만큼 포신을오른쪽으로회전시키고 다시왼쪽으로 GunBearing 만큼돌려주어야 한다.

이를 간단하게 표현하면 다음과 같다.

turnGunRight( Bearing - GunBearing )

이렇게 하면 이제 포탄을 상대 로봇에게 발사할 준비가 된 것이다. 문제는 로보코드에서 제공되는 Robot 및 AdvancedRobot클래스에서 GunBearing 을 구할 수 있는 메소드를 제공해주고 있지 않다는 것이다. 결국 이를 구현하는 것은 사용자 몫으로 남겨진 셈이다.
9. My robot "JJ"
package jj;
import robocode.*;
import java.awt.Color;
/**
* JJ - a robot by (your name here)
*/
public class JJ extends AdvancedRobot
{
/**
* run: JJ's default behavior
*/
public void run() {
setColors(Color.red, Color.red, Color.red);
while (true) {
setTurnRight(10000);
setTurnGunRight(180);
ahead(10000);
}
}
/**
* onScannedRobot: What to do when you see another robot
*/
public void onScannedRobot(ScannedRobotEvent e) {
double enemyBearing = this.getHeading() + e.getBearing();
setTurnLeft(enemyBearing);
//double enemyX = getX() + e.getDistance() * Math.sin(enemyBearing);
//double enemyY = getY() + e.getDistance() * Math.cos(enemyBearing);
//scan();
if (e.getEnergy() > 70)
{
if (e.getDistance() < 100)
setFire(3);
else if (e.getDistance() >= 100 && e.getDistance() < 400)
setFire(2);
else
setFire(1);
}
else if (e.getEnergy() > 50 && e.getEnergy() <=70)
{
if (e.getDistance() < 100)
setFire(3);
else if (e.getDistance() >= 100 && e.getDistance() < 400)
setFire(2);
else
setFire(1);
}
else if (e.getEnergy() > 30 && e.getEnergy() <= 50)
{
if (e.getDistance() < 100)
setFire(2);
else if (e.getDistance() >= 100 && e.getDistance() < 400)
setFire(1.5);
else
setFire(1);
}
else if (e.getEnergy() > 20 && e.getEnergy() <= 30)
setFire(1);
else
setFire(2);
ahead(40);
scan();
}
/**
* onHitRobot: when your robot collides with another robot
*/
public void onHitRobot(HitRobotEvent e) {
setTurnGunRight(0);
setTurnRight(0);
if (e.getBearing() > -90 && e.getBearing() <= 90)
setBack(100);
else
setAhead(100);
}
/**
* onHitByBullet: What to do when you're hit by a bullet
*/
public void onHitByBullet(HitByBulletEvent e) {
if (e.getBearing() > 0 && e.getBearing() < 180)
{
turnRight(e.getBearing() + 10);
setAhead(50);
}
else if (e.getBearing() > -180 && e.getBearing() < 0)
{
turnLeft(360 - e.getBearing());
setAhead(50);
}
}
/*public void AvoidWall() {
if(getX() < 50 || getY() < 50 || getX() > getBattleFieldWidth() - 50 || getY() < getBattleFieldHeight() - 50)
{
direction *= -1;
//Direction();
if(direction == 1)
setTurnRight(1000);
else if(direction == -1)
setTurnLeft(1000);
ahead(1000);
scan();
}
}*/
}
  • 가격2,000
  • 페이지수21페이지
  • 등록일2006.07.06
  • 저작시기2006.6
  • 파일형식한글(hwp)
  • 자료번호#358137
본 자료는 최근 2주간 다운받은 회원이 없습니다.
청소해
다운로드 장바구니