[로보코드] 로보코드(Robocode) 제안서
본 자료는 4페이지 의 미리보기를 제공합니다. 이미지를 클릭하여 주세요.
닫기
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
해당 자료는 4페이지 까지만 미리보기를 제공합니다.
4페이지 이후부터 다운로드 후 확인할 수 있습니다.

소개글

[로보코드] 로보코드(Robocode) 제안서에 대한 보고서 자료입니다.

목차

1. Robocode의 정의 및 특징
2. 로봇의 구조
3. 자주사용되는 메소드정리
4. 점수 계산 요령
5. Robocode의 여러가지 기본요소들
6. Robocode의 일반적인 전략유형
7. 우리의 알고리즘 및 전략내용

본문내용

에 GunCooling Rate이라는 항목이 있다. 여기서 지정된 수치만큼 한틱당 열을 식혀주게 된다.명중했을 때 돌려받는 에너지는 내가 쏜 총알에 적이 맞으면.3×firepower 만큼의 에너지를 얻을 수 있다. 예를 들어, 에너지가 100인 로봇이 적을 향해 화력이 2인 총알을 발사했다고 하면 일단 총알을 발사했으니 에너지는 98이 된다. 적을 맞추지 못했다면 에너지는 계속 98이겠지만, 이 총알에 적이 맞았다면 에너지를 6만큼 얻을수 있다. 따라서 적이 총알에 맞는 순간, 총알을 발사한 로봇의 에너지는 98에서 104가 되는 것이다.
◆ 다른 로봇과의 충돌
내 로봇이 다른 로봇에게 다가가 충돌을 했다면 둘 다 에너지는 0.6씩 깎이게 된다. 그러나 내.로봇은 1.2점의 충돌점수를 얻게 된다. 로보코드에서는 살아 남는 것도 중요하지만, 최종판단은 점수로.하게 되므로 점수에도 신경을 써야 한다. 벽에 충돌한 경우 AdvancedRobot이 아닌 경우에는 벽에 부딪힌 상태로 하나의 명령어를 종료하는 것으로 끝난다. 그러나
AdvancedRobot의 경우에는 abs(속도)×0.5-1 만큼의 데미지를 입게 된다.
6. Robocode의 일반적인 전략유형
◆ 움직임 전략
가만히 있기, 직선으로 움직이기
곡선으로 움직이기
두 지점간의 왕복운동
Random하게 움직이기
움직임을 예측하고 움직이기
◆ 총알 발사 전략
적 로봇이 위치한 곳으로 발사
적 로봇이 직선 움직임을 할 것으로 간주하고 예측 지점에 발사
적 로봇이 곡선 움직임을 할 것으로 간주하고 예측 지점에 발사
적 로봇이 두 지점 간에 왕복 운동을 할 것으로 간주하고 예측 지점에 발사
과거 기록을 바탕으로 예측 지점에 발사
총을 적에게 고정시키자
총이 적에게 고정시켜 언제든 적을 향해 총을 쏠 준비를 하자.
onScannedRobot(ScannedRobotEvent e)
{
setTurnRight(적의 각도 - 총의 각도 + 내 로봇의 각도);
}
※주의 : 모든 각도를 -180 ~ 180 사이로 바꿔주어야 한다.
레이더를 적에게 고정시키자
레이더를 적에게 고정시켜 24시간 적을 감시하자.
onScannedRobot(ScannedRobotEvent e)
{
if(레이다를 움직일 각도가 0보다 작을 때)
setTurnRadarRight(적의 각도 - 레이다 각도 + 내 로봇의 각도 + 5);
else
setTurnRadarRight(적의 각도 - 레이다 각도 + 내 로봇의 각도 - 5);
}
※주의 : 모든 각도를 -180 ~ 180 사이로 바꿔주어야 한다.
적의 총알을 피하자(1)
적의 총알을 잘 피해야 게임에서 이길 수 있다.
적의 에너지가 0.1~3만큼 줄었다면 적이 총을 쏜 것으로 생각할 수 있다.
보통 적은 나를 향해 총을 쏘므로 현재의 위치에서 벗어나자.
적의 총알을 피하자(2)
적이 내 로봇의 머리쪽에서 30º가 되도록 로봇을 회전시킨다.(90º는 총알을 피하기에 가장 좋은 각도
이지만 30º가 목표에 좀 더 공격적이 되도록 접근할 수 있도록 한다)
그리고 이동하여 총알을 피한다.
총알이 내 로봇에 도착하는 시간을 계산해서 피할 경우 더욱 좋다.
7. 우리의 알고리즘 및 전략내용
우리는 처음에 샘플코드로 제공되는 corners 로봇을 확장하는 개념으로 로보코드를 만들었고 16강 진출자 goldflog 로봇소스중에 벽에 부딪혔을시 반응하는 알고리즘을 사용하였다.
움직임을 시계방향으로 원을 그리는 식으로 움직이다가 벽에 닿았을시 움직이는 경로를 다르게 하고 상대로봇과의 거리에 따라서 움직임을 조금 다르게 변화시키는등 완벽한 랜덤은 아니지만 상대로봇의 포를 비교적 잘 피할수 있도록 구현하였다. 그리고 자신의 에너지를 최대한 효율적으로 관리하기 위해서 상대방 로봇과의 거리를 나누어서 상대로봇과의 접근전이 아니라면 멀리서 포를 빠른속도로 연사하면서도 포의 강도를 낮추었기 때문에 자신의 에너지는 최소화 하며 적중률은 예측사격이 아니기 때문에 뛰어나진 않지만 연사한 포중에 상대 로봇에게 적중된다면 그만큼의 에너지 이익을 볼수 있기 때문에 이길 확률 또한 높였다.
물론 상대로봇이 접근전을 펼친다면 포의 강도를 높여서 큰 데미지를 줄수 있게 구현하였다.
①움직임
if( robotDistance >= 300 )
{
setTurnRight(robotDistance + 90 - 30);
setTurnLeft(robotDistance + 50 - 30);
setAhead(100);
}
else if( robotDistance <= 70)
{
setTurnRight(robotDistance + 90 + 30);
setTurnLeft(robotDistance + 90);
setAhead(100);
}
오른쪽 시게방향으로 회전하는데 위에 소스와 같이 상대방 거리에 따라서 회전하는 폭이 틀려진다. 그리고 각각의 경기장 벽에 닿았을때 자리를 회피하기 위해서 경기장 가운데로 가려는 알고리즘(16강 진출 로봇중 Goldflog 로봇의 알고리즘)을 참고 하였다.
②포
public void smartfire(double robotDistance) {
if (robotDistance > 300 && getGunHeat() == 0)
{ fire(0.5); }
else if (robotDistance > 200 && getGunHeat() == 0)
{ fire(2); }
else
{if (getGunHeat() == 0) fire(3); }
}
상식적으로 생각하기에 멀리있는 대상은 적중시키기 어렵고 가까운 대상은 멀리있는 대상에 비해서 상대적으로 적중 시킬 확률이 높다 그래서 멀리있는 대상에게는 총의 스피드는 빠르게 하되 포의 파워를 약하게 설정하였고 대상이 가까이 있을수로 총의 파워는 강하게 스피드는 상대적으로 느리게 설정하였다. 또 가열정도에 따라서 포의 파워를 조절하였다. 조절하는 이유는 가열정도에 따라 총의 파워를 어떻게 하느냐에 따라서 로봇의 에너지를 효율적으로 관리할수 있기 때문이다.
③ 스캔
포의 움직임과 같이 스캔하는 방식을 사용하였으며 한 상대로봇에게만 레이다를 비춤으로써
스캔 될 때마다 포를 연사한다.

추천자료

  • 가격2,300
  • 페이지수13페이지
  • 등록일2013.11.13
  • 저작시기2013.7
  • 파일형식한글(hwp)
  • 자료번호#947683
본 자료는 최근 2주간 다운받은 회원이 없습니다.
청소해
다운로드 장바구니