태그 : 로보코드
2004/06/23   [로보코드] 패키지에 대해 [2]
2004/06/16   [로보코드] 몇 가지 팁(Virtual Bullet ,BombSheltering )
2004/06/14   [로보코드] 라운드 별 전략 구상
[로보코드] 패키지에 대해
자바에서 패키지 (package , 정확한 외래어 표기법이 어떻게 되는 지 모르겠다. ) 를 만들기 위해서는 package sample; 처럼 package 라는 키워드를 이용해야 한다. 이 sample 파일이 sample 디렉토리(폴더)있다. 그래서 pakage 라는 키워드 뒤에는 이 거을 포함하는 디렉토리 명을 사용한다는 것을 알 수 있다.

며칠 전 로보코드를 실행하다기 내 로봇이 excetipn 오류를 냈다. 그러면서 pakage 명은 16자가 최고라는 설명이 떴다. 그 전까지 잘 돌아가는 로봇이 갑자기 이런 에러를 내니 너무 당황스럽다.

경기에 출전하다 보면 이런 일이 많지 않을까? 잘 돌아간다고 믿었던 게 안 돌아가고.
어째든 패키지명을 15자까지 이름을 주는게 안전해 보인다. 나게 알기로는 자바에서 패키지 명은 회사사이트 홈페이지 주소를 이용해 만들기도 한다고 알고 있다. 그래서 아무래도 로보코드 자체의 제한이라고 보여진다. 혹시 지금까지 문제가 없더라도 경기중에 그럴 지도 모르니 안전하게 해 두는게 좋겠다.

또, 그전에 말했나 모르겠는데, ms windows 용 jre 1.4.2_x (x 는 어떤 숫자든지 될 수 있다. ) 에서 파일 저장이 안된다. 혹시 그럴 일이 있을 지 모르겠지만, MS 윈도우즈용에서 경기 할 지 모르니 주의해야 한다. ( 아무래도 그럴 가능성이 낮아 보인다. 이런 경기는 sun 사에서 협찹해주는 솔라리스 시스템에서 해야 마땅 할 것 같은데. 어째든 주의하길. ) 그래서 static 변수를 이용하는게 안전해 보인다.

로보코드는 보통의 자바프로그래밍과 조금 다르다. 그래서 두 개의 같은 로봇을 띄운다고 해도 static 변수를 공유 하지 않는다. (뭐 경기에서 내 로봇 두개를 띄울 일은 없겠지만... 어째든 그렇다고 한다. ) class loader 라는게 있어서 그렇다고 하는데 나는 잘 모르겠다.

이제 일주일 남짓 남았다.
이 글을 읽고 로보코드를 준비하는 사람이 있다면 대회장에서 다 같이 볼 수 있으면 좋겠다.
by 한밀 | 2004/06/23 00:35 | 프로젝트 | 트랙백 | 덧글(2)
[로보코드] 몇 가지 팁(Virtual Bullet ,BombSheltering )
Virtual Bullet ,BombSheltering 둘 다 Melee 에서만 가능한 전략이다.

로봇이 3~4 있을 경우 생각해 보자. 내 로봇은 B 라는 로봇과 싸우고 있다. 그런데 갑자기 C,나 D 로봇에서 에너지의 변화가 관측 된다고 하자. 그러면 나는 그 것을 Bullet 으로 간주하고 피해야 한다. 다시 말하지만 로보코드에서는 상대방의 Gun 의 위치를 전혀 알 수 없다. 그래서 C와 D 가 서로 싸우고 있다고 해도 나는 상대방의 에너지 변화를 조심해야 한다. 이를 내가 이용한다면 내가 B 에게 공격을 가할 때 C나 D는 자기에게 오는지 알고 피할 것이다. 이를 계산해 상대방이 내가 실제로 Bullet 을 발사 할 때 어떻게 피하는지 대락적으로 알 수 있다. 이게 Virtual Bullet 이다.

BombSheltering 은 내가 공격당하고 있을 때 다른 약한 로봇에 숨는 방법이다. 보통 로봇은 자기와 가까운지를 계산하여 공격한다. 그래서 나 대신 다른 로봇이 공격당하게 만드는 전략이다.

by 한밀 | 2004/06/16 17:44 | 프로젝트 | 트랙백
[로보코드] 라운드 별 전략 구상
이제 IBM 대회가 2주 반 정도 밖에 남지 않았다. 이 대회에 참석이 가능할 지 모르겠다. 한 사람이 3개의 로봇을 올릴 수 있다고 한다. 1개를 만들면 나머지 두 개를 상수 값을 잘 변경해서 내 놓아도 될 것 같다. (여기서 상수값이란, 예를 들어 Bullet 의 power 를 결정할 때 적의 거리에 따라 값을 달리 주기도 한다. 그럴 때 그 값을 조금 바꾸어 출전해도 될 것 같다는 말이다. 조그마한 차이겠지만, 이렇게 쌓이면 엄청난 차이를 유발할 것이다. 때론 같은 로봇을 그대로 제출한다고 해도 운이 좋아 살아남는 로봇이 있을 지도 모른다. )
Melee 의 경우 10로봇 10 라운드. OneOnOne 의 경우 5 라운드이다. 이 라운드별 전력을 생각해 보자.

첫 라운드 : 상대방에 대한 인식이 필요한다. 상대방 로봇에 대한 정보를 최대한 확보한다. Melee 의 경우 10 개의 로봇 모드 인식해 두어야 한다.

경기 초반 (Melee 의 경우, 1~3 라운드) : 상대방에 대한 전략을 분석해 둔다. 그리고 로봇을 분리해 둔다. 내 경우, 내 점수를 올리기 좋은 로봇, 나에게 매우 적대적인 로봇(나를 너무 자주 공격하는 로봇 , 특히 거리가 먼 데도 나를 공격하는 로봇이 있다면 그 로봇에게 내 로봇이 찍힐 것 아닌가. ), 그리고 진출가능성이 있는 로봇(진출가능성이 있다는 말은 이 경기에서 1~2 등이 될 가능성이 있다는 말이다. 이를 위해, 상대방 로봇에 대해 부정확하게라도 점수를 계산해 두어야 한다. ) 경기 초반 너무 잘 싸워도 상대방에게 집중 공격을 당할 우려도 있다. (만약 나와 같은 전략을 사용한다. ) 적당히 해 두어야 할 지도 모른다.

경기 중반 (Melee 의 경우 4~6라운드) : 분석해둔 전략대로 싸운다. 우선 라운드가 시작할 때는 내 주의에 가장 가까이 있는 점수 따기 좋은 로봇위주로 공격한다. 현재까지 점수가 높은 로봇의 에너지가 낮아질 때 빨리 죽여야 한다. 특히 한 방을 남겨 놓고 기사회상 하는 일이 없도록해야 한다. Bullet 하나로 16점을 가진 로봇을 날려버릴 수 있다. 점수 높은 로봇은 빨리 제거해 주어야 Survival 점수를 높게 가져 가는 것을 막을 수 있다. 그리고 Bullet 을 맞기 전까지 내가 공격하는 거 모른다. 그래서 더 더욱 뒤에서 처야 한다. (다시 말해, 남하고 열심히 싸우고 있을 때 몰래 때려야 한다. )

경기 후반 (Melee 의 경우 7~9 라운드) : 미리 점수를 계산해 두었다면 어느 정도 진출 가능성을 점쳐볼 수 있다. 내가 많이 밀리고 있다면, 라운드 초반이라도 나 보다 점수 높은 로봇은 과감히 공격해야 한다. 그냥 똑같이 경기하다가는 그대로 탈락이 확정될 수 있다. 급격한 변화가 필요하다. 내가 꽤 유리하게 경기하고 있다면 큰 변화없이 이대로의 틀을 유지한다.

마지막 라운드 : 미리 계산해둔 점수로 내가 탈락 가능성이 높다면 계속 이상한 짓을 하여 변화를 모색한다. 내가 2위 로봇보다 꽤 높은 점수로 앞서고 있지만, 여기서 2위 로봇에게 크게 당하면 떨어질 가능성이 있다면, 경기를 잘 지켜보다가 자폭을 한다. (여기서 자폭이란, 상대방에게 더 이상의 Bullet 점수와 마지막 bonus 점수를 낮게 빼길려는 전략으로, Bullet 을 낭비하는 전략인다. ) 이왕 자폭할려고 Bullet 을 발사 할 때는 그냥 죽지 말고, 2위 로봇에게 발사 한다. 2위 로봇에게 발사해서 2위 로봇에너지를 많이 낮추어, Last Survival 점수도 못 올리게 만들어야 한다. (이 전략을 Melee 에서 사용하는 것은 꽤 위험하다. 2위 로봇과 많은 점수 차이로 앞서고 있어 진출이 확정적이라도 안심할 수 없다. Melee 에서는 점수 계산에는 어려움이 있기 때문이다. 또, Melee 에서는 Last Survival 점수가 많이 높기 때문이다. )

별 새로운 전략은 없을 것 같다. 그냥 있던 전략을 정리하던 수준 같다.
by 한밀 | 2004/06/14 02:13 | 프로젝트 | 트랙백
<< 이전 다음 >>