1 / 34

제 12 주 로보코드 (Robocode)

제 12 주 로보코드 (Robocode). 제 12 주 강의 목표 로보코드를 통해 그 동안 배운 것들을 복습하는 기회를 가짐 로보코드 설계 및 프로그래밍 방법을 배움 로보코드 토너먼트 경기 진행. 로보코드 (Robocode) 란 ?. IBM 의 인터넷 부문인 Advanced Technology 의 소프트웨어 엔지니어인 Mathew Nelson 의 창작품 스크린 상에서 전투하는 자바 객체인 자바 로봇을 만들어 개발자들이 자바를 배울 수 있도록 하는 프로그래밍 게임

vinaya
Télécharger la présentation

제 12 주 로보코드 (Robocode)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 제12주 로보코드(Robocode) • 제12주 강의 목표 • 로보코드를 통해 그 동안 배운 것들을 복습하는 기회를 가짐 • 로보코드 설계 및 프로그래밍 방법을 배움 • 로보코드 토너먼트 경기 진행 강원대학교

  2. 로보코드(Robocode)란? • IBM의 인터넷 부문인 Advanced Technology의 소프트웨어 엔지니어인 Mathew Nelson의 창작품 • 스크린 상에서 전투하는 자바 객체인 자바 로봇을 만들어 개발자들이 자바를 배울 수 있도록 하는 프로그래밍 게임 • 로봇 전쟁 시뮬레이터로 참가자들은 로봇을 만들어 전투에 내보내고 이를 다른 개발자가 만든 로봇들과 겨뤄 득점율이 높은 로봇이 승리 • Eclipse, WebSphere, DB2, WebSphere Application Developer를 사용하여 개발되었고, Java 2를 지원하는 모든 플랫폼에서 실행 강원대학교

  3. 로보코드(Robocode)란? 데모 동영상 보기 강원대학교

  4. 로보코드 설치하기 • 로보코드 실행 파일 robocode-setup.jar을 다운로드 받는다. • http://www-128.ibm.com/developerworks/kr/robocode/robocode-setup.jar • DOS창을 열어 다운로드 파일이 있는 디렉토리로 이동한 후, 로보코드를 인스톨한다.  바탕화면에 로보코드 실행을 위한 바로가기 생성 • java –jar robocode-setup.jar • 샘플 로보코드를 테스트 해보면서 로보코드의 동작 원리를 익힌다. 강원대학교

  5. 로보코드 시스템의 구성 요소 • 전투장 • 로봇간의 전투가 이루어지는 곳 • 주 시뮬레이션 엔진이 들어 있으며, 새로운 혹은 기존의 전투를 생성하고 저장할 수 있음 • 제어 장치를 사용해 전쟁을 일시 중지, 재개, 종료 시킬 수 있고 개별 로봇을 부수거나 있는 로봇의 통계를 얻을 수 있음 • 로봇 편집기를 활성화시킬 수 있음 • 로봇 편집기 • 로봇을 만드는 자바 소스 파일을 편집하기 위한 커스터마이즈된 텍스트 편집기 강원대학교

  6. 로보코드 시스템의 구성 요소 강원대학교

  7. 기본 로봇 만들기 - 시작 • 메인 로보코드 스크린에서 Robot 메뉴를 클릭하고 Editor를 선택 • 에디터 창이 나타나면 File메뉴를 클릭하여 New Robot을 선택 • 로봇의 이름을 입력 – 클래스명 • 본인의 학번이름 이니셜을 입력 – 패키지명 강원대학교

  8. 기본 로봇 만들기 - 코드변경 package man; import robocode.*; public class MyFirstRobot extends Robot { public void run() { while (true) { ahead(100); turnGunRight(360); back(100); turnGunRight(360); } } public void onScannedRobot(ScannedRobotEvent e) { fire(1); } } 이 부분을 변경하여 자신만의 로봇을 생성 다른 부분은 모두 자동 생성됨 강원대학교

  9. 로봇의 구성 • Gun (회전 총) + Radar (회전 레이더) + Vehicle (차량) • 3가지 구성 요소는 모두 독립적으로 회전할 수 있음 • 기본 구성은 차량의 이동 방향으로 정렬되어 있음 강원대학교

  10. 로보코드 –기본 정보 • 시간 단위 : tick (= frame = turn) • 30 FPS (초당 30 Frame) • 거리 단위 : pixel • 시작 위치 (0, 0) : 좌측 하단 • 로봇의 움직임 • 가속 a = 1 pixel/tick • 감속 a = 2 pixel/tick • 속도 v = a * t (Max 8) • 거리 d = v * t • 로봇의 최대 회전율 = 10 - 0.75 * abs(v) degrees/tick • 총의 최대 회전율 = 20 degrees/tick • 레이더의 최대 회전율 = 45 degrees/tick 강원대학교

  11. 로보코드 –기본 정보 • 총알 • firepower : 0.1~3 • 데미지 = 4 * firepower • firepower가 1 이상이면 2 * (firepower -1) 추가 • 총알 발사시 로봇의 에너지 소모 = firepower • 총알 속도 = 20 - 3 * firepower 로봇의 움직이는 방향이나 속도는 총알의 속도에 영향을 주지 않는다. • 총의 가열 (gunHeat) = 1 + firepower / 5 • 명중시 돌려받는 에너지 = 3 * firepower • 상대와 충돌시 = 둘 다 -0.6 • 내가 충돌시 = + 1.2 • 벽과 충돌시 = abs(v) * 0.5 - 1 • AdvancedRobot 이상 강원대학교

  12. 로봇 명령어 • 로봇에 대한 명령어 세트는 모두 Robocode API의 javadoc에 문서화되어 있음 강원대학교

  13. 로봇, 총, 레이더 움직이기 • turnRight(double degree),turnLeft(double degree) • 지정된 각도로 로봇을 돌린다. • ahead(double distance),back(double distance) • 지정된 픽셀 거리로 로봇을 이동시킨다. 이 두 메소드들은 로봇이 벽이나 다른 로봇에 부딪혔을 때 완료된다. • turnGunRight(double degree),turnGunLeft(double degree) • 차량의 방향과 상관 없이 총의 방향을 돌린다. • turnRadarRight(double degree),turnRadarLeft(double degree) • 총과 차량의 방향에 상관 없이 총 위의 레이더를 돌린다. 강원대학교

  14. 로봇, 총, 레이더 움직이기 • setAdjustGunForRobotTurn(boolean flag): • 플래그가 참으로 설정되면 차량이 움직이는 동안 총도 동일한 방향으로 움직인다. • setAdjustRadarForRobotTurn(boolean flag) • 플래그가 참으로 설정되면 차량과 총이 움직이는 동안 레이더도 동일한 방향으로 움직인다. • setAdjustRadarForGunTurn(boolean flag) • 플래그가 참으로 설정되면 총이 움직이는 동안 레이더도 동일한 방향으로 움직인다. 또한 setAdjustRadarForRobotTurn(true)가 호출된 것처럼 행동한다. 강원대학교

  15. 로봇에 대한 정보 얻기 • getX(),getY() • 로봇의 현재 좌표를 보여 준다. • getHeading(), getGunHeading(),getRadarHeading() • 차량, 총, 레이더의 현재 방향을 각도로 알려준다. • getBattleFieldWidth(),getBattleFieldHeight() • 현재 승부가 벌어지는 전투장의 크기를 알려준다. 강원대학교

  16. 발포 및 피해 제어 • 각 로봇은 기본적인 “에너지 레벨”을 가지고 출발하며, 에너지 레벨이 0으로 떨어지면 파괴된 것으로 간주된다. • 발포할 때 로봇은 3단계의 에너지 레벨이 부여된 총알을 사용할 수 있으며, 총알에 더 많은 에너지가 장착될수록 상대 로봇에게 더 많은 해를 끼칠 수 있다. • fire(double power) • 지정된 에너지 레벨의 총알을 발사한다. 강원대학교

  17. 이벤트 • 로봇이 움직이거나 방향을 돌릴 때마다 레이더도 항상 구동이 되고, 로봇이 사정 거리 안에 있는 로봇을 추적하면 이벤트가 유발된다. • 기본 이벤트 핸들러를 오버라이드하여 자신의 액션을 구현할 수 있다. • ScannedRobotEvent • onScannedRobot()메소드를 오버라이드하여 ScannedRobotEvent를 처리한다 • 레이더가 로봇을 추적했을 때 호출된다. 강원대학교

  18. 이벤트 • HitByBulletEvent • onHitByBullet()메소드를 오버라이드하여 HitByBulletEvent를 처리한다. • 로봇이 총알을 맞았을 때 호출된다. • HitWallEvent • onHitWall() 메소드를 오버라이드하여 HitWallEvent를 처리한다. • 자신의 로봇이 벽을 쏘았을 때 호출된다. 강원대학교

  19. 자신만의 이벤트 public class Target extends AdvancedRobot { int trigger; public void run() { // 남은 에너지 레벨이 80일 때 움직이게 하기 위한 초기값 설정 trigger = 80; // "trigger hit“라는 이름의 이벤트 추가 addCustomEvent( new Condition("triggerhit") { public boolean test() { return (getEnergy() <= trigger); }; } ); } 강원대학교

  20. 자신만의 이벤트 public void onCustomEvent(CustomEvent e) { // "triggerhit“라는 이벤트가 발생했는지 검사 if (e.getCondition().getName().equals("triggerhit")) { // 임계 에너지 레벨을 20 떨어뜨림 trigger -= 20; out.println("Ouch, down to " + (int)(getEnergy()+.5) + " energy."); // 왼쪽으로 65도 회전 turnLeft(65); // 앞으로 100 이동 ahead(100); } } } 강원대학교

  21. 기본 로봇 만들기 - 코드변경 package man; import robocode.*; public class MyFirstRobot extends Robot { // 클래스 멤버 변수를 선언하고 그 값을 설정하는 코드를 이곳에 둔다. ... public void run() { // 로봇 인스턴스 당 1번만 실행될 코드를 이곳에 둔다. // 반복적인 액션을 시작하기 전에 로봇을 사전 결정된 상태로 만드는 데 종종 사용된다. … while(true) { // 로봇이 참여할 반복 액션 나타내는 코드를 이곳에 둔다. … } } // 오버라이드하고 싶은 이벤트 핸들러를 이곳에 둔다. ... public void onScannedRobot(ScannedRobotEvent e) { fire(1); } } 강원대학교

  22. 기본 로봇 만들기 1 package man; import robocode.*; public class MyFirstRobot extends Robot { public void run() { while (true) { ahead(100); turnGunRight(360); back(100); turnGunRight(360); } } public void onScannedRobot(ScannedRobotEvent e) { fire(1); } } • 차량을 앞쪽으로 100만큼 이동 • 총을 오른쪽으로 360도 회전 • 차량을 뒤쪽으로 100만큼 이동 • 총을 오른쪽으로 360도 회전 레이더가 로봇을 추적했으면 에너지 레벨 1인 총알을 발사 강원대학교

  23. 기본 로봇 만들기 2 package man; import robocode.*; public class MyFirstRobot extends Robot { public void run() { turnLeft(getHeading()); while (true) { ahead(1000); turnRight (90); } } public void onScannedRobot(ScannedRobotEvent e) { fire(1); } public void onHitByBullet(HitByBulletEvent e) { turnLeft(180); } } • 차량이 0도를 향하도록 회전 • 차량을 앞쪽으로 1000만큼 이동 • 차량을 오른쪽으로 90도 회전 레이더가 로봇을 추적했으면 에너지 레벨 1인 총알을 발사 총에 맞았을 경우에 차량을 왼쪽으로 180도 회전 시계 방향과 반시계 방향을 교대로 하면서 벽을 따라가면서 공격 강원대학교

  24. Sample Code - Wall.java public class Walls extends Robot { boolean peek; // Don't turn if there's a robot there double moveAmount; // How much to move public void run() { // 전투장의 가로, 세로 크기 중 큰 값을 저장 moveAmount = Math.max(getBattleFieldWidth(),getBattleFieldHeight()); peek = false; // 차량의 현재 방향을 90도로 나눈 나머지를 이용하여 // 벽을 향하도록 왼쪽으로 회전 turnLeft(getHeading() % 90); ahead(moveAmount); // 총을 90도 회전한 후, 다시 차량을 90도 회전하여 총이 전투장을 향하도록 함 peek = true; turnGunRight(90); turnRight(90); 강원대학교

  25. Sample Code - Wall.java while (true) { peek = true; // 벽쪽으로 이동 ahead(moveAmount); peek = false; // 오른쪽 벽으로 회전 turnRight(90); } } public void onHitRobot(HitRobotEvent e) { // 적이 앞쪽에 있으면 뒤쪽으로 물러남 if (e.getBearing() > -90 && e.getBearing() < 90) back(100); // 그렇지 않으면 뒤쪽에 있는 것이므로 앞쪽으로 이동 else ahead(100); } 강원대학교

  26. Sample Code – Wall.java public void onScannedRobot(ScannedRobotEvent e) { fire(2); // 벽 쪽으로 이동하기 전에 적이 있는지 감시 // 벽에 적이 있으면 벽 쪽으로 이동하지 않음 if (peek) scan(); } } 강원대학교

  27. 로봇 컴파일 및 테스트하기 • 로봇 컴파일 • 로봇 편집기의 Compiler 메뉴의 Compile을 이용하여 로봇 클래스 생성 • 전투 시작 • 전투장의 Battle 메뉴의 New를 이용하여 전투를 생성 • 전투에 참가할 로봇, 라운드 수, 전투장의 크기 등을 선택한 후, StartBattle을 클릭하여 전투 시작 강원대학교

  28. 로봇 컴파일 및 테스트하기 강원대학교

  29. 로봇코드 엔진 아키텍처 • 로보코드 뒤에는 고성능(사실적인 스피드로 전투를 렌터링하기 위해), 유연성(어려움 없이 복잡한 로봇 로직 작성을 가능케 하는)을 가진 정교한 시뮬레이션 엔진이 있다. 강원대학교

  30. 무적 로봇 만들기 Tip! • 아래 URL 에서 제공되는 로보코드 기본 알고리즘을 적용 • developerWorks : Secrets from the Robocode masters http://www.ibm.com/developerworks/java/library/j-robotips/ • Wikipedia Robocode http://en.wikipedia.org/wiki/Robocode - http://blog.naver.com/luna0805/40037817009 강원대학교

  31. 로보코드 - 점수항목 점 수 항 목 점 수 내 역 Total Score 점수의 총합. 순위의 기준 Survival Score 다른 로봇이 죽을 때 마다 살아남은 로봇은 50점 획득 Last Survival Bonus 최후까지 살아남은 로봇은 이전 로봇이 죽을 때 마다 보너스로 10점씩 추가 획득(ex : 전투에 참여한 로봇이 5개 일 경우 - 4 X 10 점) Bullet Damage 적에게 총알로 입힌 타격 Point 만큼 점수 획득 Bullet Damage Bonus 총알로 적을 죽였을 때 그 동안 적 로봇에 입힌 타격 Point 의 20% 를 추가 획득 Ram Damage 적 로봇을 육탄으로 공격했을 때 2 점 획득 Ram Damage Bonus 육탄공격으로 적을 죽였을 때 그 동안 적 로봇에 입힌 타격 Point의 30% 를 추가로 획득 강원대학교

  32. 이번 주 실습 • 3인 1조로 조를 편성하고 영어 소문자 형태의 팀명을 정합니다. • 예: bestbot (영문 소문자로 정하세요.) • 조교는 사다리 타기를 통해 각 팀에게 번호를 부여하고, 오름차순으로 토너먼트 대진표를 작성합니다. • ‘OOP학번’을 로봇 클래스명으로 하고 팀명을 패키지명으로 하여 각자 자신의 로봇을 작성합니다. • 예: OOP12345 강원대학교

  33. 이번 주 실습 • 팀의 리더는 팀원들이 작성한 로봇 소스와 클래스를 팀명 폴더에 모아서 조교에게 제출합니다. • 예: ‘C:\robocode\robots\bestbot\’에 팀원들이 작성한 로봇 소스와 클래스를 모아서 조교에게 제출 • 실습 시간에 완성을 못한 팀은 다음 강의시간 전까지 과제로 제출합니다. 강원대학교

  34. 다음 주 실습 • 조교는 대진표에 따라 3회씩 전투를 진행하고, 매 전투가 끝나면 팀별로 점수를 합산한 후, 3회 평균을 계산합니다. • 매 경기마다 최대 2분이 주어지며, 2분이 지나면 조교가 경기를 중단시키고 그 때까지의 점수를 계산합니다. • 평균 점수가 높은 팀이 우승팀으로 결정되며, 최종 우승팀에게는 소정의 상품이 수여될 예정입니다. 최선을 다해 주세요~ • 다음 주 강의에 대한 실습은 과제로 대체합니다. 강원대학교

More Related