출처 : http://www.ibm.com/developerworks/kr/library/j-fwa/index.html 코너에 갇히거나 원하는 이동 방향에서 너무 많이 벗어나지 않으면서, 로봇과 벽 사이의 간격을 유지하는 알고리즘은 간단히 만들 수 없는 것 같습니다. 한 가지 간단한 솔루션으로, Factored wall avoidance가 있습니다. 이 글에서, David McCoy가 이를 구현하는 방법을 설명합니다. With a few additions to the bot we built in "상대편의 움직임 추적하기"에서 구현했던 로봇에 몇 가지를 더 추가하여, 기존의 움직임 알고리즘 또는 문제가 많은 움직임 알고리즘에 Factored Wall Avoidance를 추가할 수 있다. Factored ..
출처 : http://www.ibm.com/developerworks/kr/library/j-antigrav/ 반중력 운동(Anti-gravity movement)은 대부분의 Robocoder 전문가들이 선택하는 움직임 유형이다. 이를 사용하여 지도상에서 피할 수 있는 지점을 설정하고 움직임 패턴을 만들며 적의 총알을 피할 수 있다. Alisdair Owens는 이 유용한 기술의 구현 방법을 설명하고 테스트 구동을 위해 로봇 예제도 제공한다. 반중력 운동(Anti-gravity movement)은 유연성이 뛰어난 기술로서 전투장 내에서 피신할 수 있는 특별한 지점 (중력 지점-gravity points)을 정의하여 패턴 분석 로봇을 혼란에 빠트린다. 각각의 중력 지점(gravity point)은 세기(s..
출처 : http://www.ibm.com/developerworks/kr/library/j-robocode/index.html 총알을 피하고 정확한 공격 작전을 수행하면서 상속, 다형성, 이벤트 처리 및 내부 클래스를 배우는 것이 가능할까? 중독적인 게임광 대상 교육 툴인 Robocode가 전 세계 자바 개발자들에게 이를 가능하도록 한다. Robocode는 사용하기 쉬운 로봇 전쟁 시뮬레이터로, Java 2를 지원하는 모든 플랫폼에서 실행된다. 여러분은 로봇을 만들어 전쟁터에 내보내고 다른 개발자가 만든 상대 로봇과 끝까지 싸우도록 해야한다. 여러분이 일단 이들을 무찌르고 나면 전세계적으로 형성되고 있는 리그 중 하나에 세계 최고 로봇에 대항하여 자신의 로봇을 출전시킬 수 있다. 각 Robocode 참..
출처 : http://www.ibm.com/developerworks/kr/library/j-robowrap.html Robocode 대회는 끝났고 우승자가 가려졌다. 누가 우승컵을 가져갔는지 성공의 비밀은 무엇인지를 알아보자. 전 세계의 프로그래머들이 자신들의 코딩 기술을 발휘하여 가장 공포스러운 자바 "로봇"을 만들어 가상 전투장에서 전투를 벌였다. ArtofWar, BienatorII, SandboxLump, BulletMagnet, Cake 등의 이름을 가진 로봇들은 기존의 자바 객체들 보다 오락적 요소를 갖추었다. 네덜란드 프로그래머인 Enno Peters에게 전체 우승의 영예가 돌아갔다. 전략 결정과 코딩 등 챔피언 등극을 가능하게 했던 요소를 들어보기 위해 Peters를 비롯하여 4명의 우승..
출처 : http://www.ibm.com/developerworks/kr/library/j-robocode2/index.html 단순한 로봇을 넘어..: 자바 클래스 상속 첫 번째 글에서 만들었던 로봇은 Robot 클래스에서 모두 상속받았다: public class DWStraight extends Robot { DWStraight extends Robot 클래스는 turnRight()과 turnLeft() 등의 이 클래스에서 제공되는 모든 메소드를 사용할 수 있다는 것을 의미한다. 이 메소드에 대한 유일한 제한은 작동을 끝낼 때 까지 코드에 제어를 리턴하지 않는다는 것이다. 사실 이러한 작동은 완료하기 까지 많은 회전을 할 수 있다. 이 메소드를 호출함으로서 매 회전에 대해 결정할 수 있는 기능을 잃..
Real-time Java, Part 2: 컴파일 기술 비교 Real-time Java ™ 시리즈, 두 번째 글에서는 자바 언어의 네이티브 컴파일과 관련한 문제점들을 설명합니다. 동적 (Just-in-time) 또는 정적 (Ahead-of-time) 컴파일 단독으로는 모든 자바 애플리케이션들의 요구 사항들을 맞출 수 없습니다. 필자는 다양한 실행 환경에서 이 두 개의 컴파일 기술들을 비교하고 서로 어떻게 보완되는지를 설명합니다. 자바 애플리케이션 성능 문제는 개발 커뮤니티에서 가끔씩 뜨거운 논쟁을 불러 일으킨다. 이 언어는 애플리케이션 이식성(portability)이라는 중요한 목표를 지원하도록 인터프리팅 되었기 때문에 초기 자바 런타임은 C와 C++ 같은 컴파일 된 언어 보다 훨씬 낮은 성능 레벨을 제..
Real-time Java, Part 1: 실시간 시스템에 자바 사용하기 Real-time Java™ 시리즈 첫 번째 기술자료에서는, 자바를 사용하여 실시간 성능 요구 사항들에 부합하는 시스템을 개발하는 주요 문제점들을 다룹니다. 실시간 애플리케이션 개발이 의미하는 바가 무엇인지, 실시간 애플리케이션의 요구 사항을 맞추기 위해 런타임 시스템들이 어떻게 다루어져야 하는지를 설명합니다. 필자는 표준 기반 기술들을 결합하여 실시간 자바의 문제점들을 해결하는 방법을 여러분에게 소개합니다. 실시간 시스템에서 자바는 여러 가지 이유로 인해 보급되지 못했다. 여기에는 동적 클래스 로딩 같은 본질적인 자바 언어의 디자인에 내재한 성능 문제, 가비지 컬렉터와 네이티브 코드 컴파일 같은 Java Runtime Enviro..
출처 DefineJava 정적 변수를 선언하는 방법 static을 이용하여 정적 변수를 선언할 떄 대부분 어떻게 사용하는가? public class StaticTest { private static int SIZE= 10; private static int[] myStatic = new int[SIZE]; } 대부분 이렇게 사용할 것이다. myStatic이라는 배열을 만들었다. 그렇다면 이 myStatic에 값을 할 당할때 어떻게들 사용하는가? myStatic은 배열이다. 배열에 값을 할당 할때 과연 어떻게 할 수 있을까?(반복문을 이용하는 방법중) 생성자를 만드는 방법도 있을것이고 메인메소드나 기타메소드에서 값을 할당 받는경우도 있다. 가장 쉽게 생각한 방법이 다음과 같은 두가지 방법일 것이다. ex1..