소개
이 게임에서 플레이어는 자신의 군대를 사용하여 다른 플레이어의 군대와 싸우고 영토를 점령하며 마지막으로 서있는 사람이됩니다. 매 턴마다 플레이어는 자신의 처분에 사용할 기본 군대를받습니다. 그러나 특정 지역에서 영토를 점령하면 플레이어가이 숫자를 늘려 나중에 게임에서 잠재적 이점을 얻을 수 있습니다. (이것은 기본적으로 Warlight 와 동일합니다 ).
모든 봇은 Java, C 또는 C ++로 작성해야합니다 (다른 언어는 포함하지만 소프트웨어 나 경험이없는 경우). 제출물이 클래스를 확장 할 필요는 없으며 함수, 클래스, 인터페이스 또는 기타 필요한 것을 작성하고 표준 API 에서 패키지 또는 클래스를 사용할 수 있습니다. 클래스 또는 인터페이스를 만들 계획이라면 내부 클래스 또는 내부 인터페이스 사용을 고려하십시오.
이 경쟁에서 컨트롤러 또는 다른 제출물을 프로그래밍 방식으로 변경하려고 시도하지 마십시오.
게임 플레이
개요
10x10 2 차원 배열은 보드를 시뮬레이션하며 각 요소 / 셀은 "영역"을 나타냅니다. 라운드 당 20 라운드와 최대 1000 턴이 있습니다. 매 턴마다 플레이어는 먼저 자신이 소유 한 영토를 자신이 소유 한 영토에 배치 한 다음 군대를 공격하여 상대방의 영토를 점령하려는 시도로 인근 영토로 군대를 옮길 수 있습니다. 플레이어 는 모든 군대 를 배치 해야 하지만 원하는 경우 이동할 필요는 없습니다.
공격 / 이동 군대
플레이어가 원하면 한 지역에서 8 개의 인접 지역으로 군대를 보낼 수 있습니다. 보드는 "랩핑"됩니다. 즉, 플레이어의 영토가 한쪽에 있다면, 그 군대를 다른 쪽의 인접한 영토로 옮길 수 있습니다. 영토에서 군대를 옮길 때에도 그 영토에 군대가 적어도 하나는 남아 있어야합니다. 예를 들어, 영토에 5 개의 군대가있는 경우 4 개 이하 만 다른 영토로 이동할 수 있습니다. 영토에 하나가 포함되어 있으면 해당 군대는 이동할 수 없습니다.
플레이어 n
가 한 영토에서 다른 영토 로 군대를 보내면 해당 영토가 n
군대 를받습니다 .
플레이어 n
가 자신의 영토에서 o
군대 가있는 상대 영토로 군대를 보냅니다 . 가장 가까운 정수 o
로 n * .6
반올림하여 감소 합니다. 그러나 동시에 가장 가까운 정수 n
로 o * .7
반올림하여 감소 합니다. 상대방 영토의 체포 여부를 다루는 다음 규칙이 적용됩니다.
- 경우
o
0에 도달과n
0보다 큰 경우, 플레이어는 것 영토, 이상 걸릴 것입니다n
거기에 군대를. - 두 경우
n
와o
이 될 제로,o
자동으로 1로 설정되고 영토 캡처되지 않습니다. - 경우
o
유골 0보다 큰, 플레이어의 영토에서 군대의 수는 증가 할n
과 반대 영토 캡처되지 않습니다.
보너스
보너스를 나타 내기 위해 지역 그룹이 선택됩니다. 한 플레이어가 그룹의 일부인 모든 영토를 소유 한 경우 해당 플레이어는 턴당 추가 량의 군대를받습니다.
보너스는 플레이어가받을 수있는 여분의 군대 수를 나타내는 다른 숫자와 값을 나타내는 id 번호를 가지고 있습니다. 각 라운드에서 보너스의 가치는 5에서 10 사이의 임의의 숫자이며, 보너스에는 10 개의 영토가 포함 된 10 개의 보너스가 현장에서 제공됩니다.
예를 들어, 턴당 5 개의 군대를받는 플레이어가 8의 가치를 가진 보너스를 구성하는 모든 영토를 소유 한 경우, 플레이어는 다음 차례에 13 개의 군대를받습니다. 그러나 플레이어가 보너스를 구성하는 하나 이상의 영토를 잃는 경우 한 턴에 5 개의 군대 만 받게됩니다.
입출력
프로그램은 다음 형식의 명령 줄 인수를 통해 입력을 받아야합니다.
[id] [armies] [territories (yours and all adjacent ones)] [bonuses] ["X" (if first turn)]
id
그리고armies
모두 정수이다.id
은 신분이며armies
영토에 배치해야하는 군대의 수입니다. 당신은 당신에게 주어진 모든 군대를 더 이상 배치하지 않아야합니다.territories
는 소유 한 영토와 소유하지 않은 영토를 나타내는 일련의 문자열입니다. 문자열은 다음 형식으로되어 있습니다 :[row],[col],[bonus id],[player id],[armies]
row
및col
행과 영토는 보드의 열이, 표시bonus id
이 영토의 일부임을 보너스의 ID입니다player id
영토를 소유 한 플레이어의 ID이며,armies
군대의 수는 영토에 포함되어 있습니다. 이들은 모두 숫자입니다.bonuses
보드에서 사용할 수있는 보너스를 나타내는 일련의 문자열입니다. 문자열은 다음 형식으로되어 있습니다 :[id],[armies],[territories left]
id
는 보너스의 id이고,이 보너스의armies
모든 영토를 소유함으로써받을 수있는 추가 군대territories left
의 수이며, 추가 군대를 받기 위해 캡처해야하는 보너스의 영역의 수입니다.
라운드의 첫 번째 턴이고 편의상 사용할 수있는 경우 다섯 번째 인수 인 "X"가 나타납니다.
첫 번째 턴에서의 입력 예 :
0 5 "7,6,7,-1,2 8,7,7,-1,2 7,7,7,0,5 6,6,7,-1,2 8,8,9,-1,2 6,7,7,-1,2 7,8,9,-1,2 6,8,9,-1,2 8,6,7,-1,2" "0,5,10 1,5,10 2,9,10 3,9,10 4,9,10 5,5,10 6,5,10 7,6,9 8,7,10 9,7,10" X
프로그램은 줄 바꿈으로 구분 된 두 개의 문자열을 출력해야합니다. 첫 번째 문자열은 군대를 추가하려는 영토의 행과 열을 나열하고 추가하려는 군대 수와 열을 나열합니다. 군대를 보내려는 지역의 열과 보내려는 군대의 수. 출력에는 후행 공백이 포함될 수 있습니다.
군대를 추가하려는 지역을 지정하려면 출력이 다음 형식을 따라야합니다.
[row],[col],[armies]
row
및 col
영토하면되는 군대를 추가 할 보드의 행과 열, 그리고 armies
당신이 영역에 추가 할 군대의 수입니다.
군대를 보낼 영토를 지정하려면 출력이 다음 형식을 따라야합니다.
[srow],[scol],[drow],[dcol],[armies]
srow
와 scol
이다에서 영토 당신이 전송 군대에 원하는 행과 보드의 열입니다, drow
그리고 dcol
영토 당신이에 군대를 보낼 보드의 행과 열이 있고, armies
당신이 보낼 군대의 수입니다 . 군대를 옮기고 싶지 않다면 프로그램은 공백을 인쇄해야합니다.
샘플 출력은 다음과 같습니다.
0,0,5
0,0,0,1,3 0,0,1,0,3 0,0,1,1,3
이 경우 플레이어는 5의 군대를 0,0의 영토에 배치하고 3 개의 군대를 0,0에서 0.1로 이동합니다. 0,0 내지 1,0의 3; 0,0에서 1,1 사이의 3 개.
라운드와 턴
각 라운드가 시작될 때, 모든 플레이어는 보드의 무작위 지점에 하나의 영토를 부여받습니다 (두 명 이상의 플레이어가 서로 옆에서 시작할 수 있습니다). 보너스를 구성하는 지역도 변경 될 수 있습니다.
첫 번째 턴에서 각 플레이어는 5 개의 군대를 포함하는 1 개의 영토를 갖게되며, 사용할 수있는 5 개의 군대를받습니다 (이것은 그들이받을 수있는 최소치입니다). 다른 모든 영토는 공격하지 않는 NPC가 소유합니다. 이들 각각은 두 군대를 포함하고 id는 -1
입니다.
매 턴마다 프로그램이 실행되고 두 출력이 모두 수집됩니다. 컨트롤러는 첫 번째 출력을 적용하여 군대를 지역에 즉시 추가합니다. 그러나 컨트롤러는 모든 플레이어가 두 번째 출력 인 공격 / 전송 명령을 내릴 때까지 기다립니다. 이 작업이 완료되면 명령이 무작위로 섞여 실행됩니다. 턴에 참여하려면 프로그램이 1 초 이내에 출력을 제공하고 종료해야합니다.
득점과 승리
주어진 라운드에서 한 선수가 남으면 그 플레이어는 100 점을 얻습니다. 그렇지 않으면, 1000 턴이 지나도 여전히 다수의 플레이어가 있다면, 100 점은 나머지 플레이어들 사이에 균등하게 분배됩니다 (즉, 3 명의 플레이어는 각각 33 포인트를 산출합니다). 20 라운드 끝에서 가장 많은 점수를 얻은 플레이어가 승리합니다.
제출물
게시물에는 봇 이름, 작성된 언어, 간단한 설명 및 실행에 사용 된 코드가 포함되어야합니다. 여기에 샘플 봇이 게시되어 컨테스트에 사용됩니다. 원하는만큼 제출할 수 있습니다.
다른
파일 이름이 제출에 사용한 이름과 동일한 한 프로그램에서 파일을 작성하고 파일에서 읽고 읽을 수 있습니다. 이 파일들은 토너먼트 시작 전에 삭제되지만 라운드 사이에는 삭제되지 않습니다.
다음과 같은 경우 차례를 건너 뜁니다.
- 당신은 제거됩니다 (영토가 없음);
- 프로그램이 아무것도 인쇄하지 않습니다.
- 귀하의 프로그램은 1 초 이내에 종료되지 않습니다.
- 귀하의 영토에 군대를 너무 적게 배치하거나 (귀하가 소유하지 않은 영토에 군대를 배치하면 이에 해당됩니다) 또는 너무 많은 군대; 또는
- 출력으로 인해 컨트롤러에서 예외가 발생합니다.
다음과 같은 경우 공격 / 전송 명령이 실행되지 않습니다.
- 프로그램이 올바른 결과를 제공하지 않습니다.
- 당신은 당신이 아닌 군대를 이동할 영토를 선택합니다.
- 당신은 영토에서 제로 또는 마이너스 수의 군대를 움직입니다.
- 당신은 당신의 영토에서 너무 많은 군대를 옮깁니다. 또는
- 군대를 이동 시키려고 선택한 지역과 인접하지 않은 지역으로 군대를 보낼 지역을 선택합니다.
여기 에서 컨트롤러와 샘플 봇을 찾을 수 있습니다 . 봇은 게임에 참여할 것이지만, 실제로는 운 이 좋지 않은 경우에는 이기지 못할 것입니다 .
결과
버그 수정을 실행 한 후 컨트롤러를 실행하면 WeSwarm은 계속해서 고려해야 할 힘이되고 있습니다. 대항 할 수있는 좋은 전략을 가진 봇이 필요합니다.
As of 25-08-15, 04:40 UTC
1: WeSwarm 1420
2: java Player 120
java LandGrab 120
java Hermit 120
java Castler 120
6: java RandomHalver 80
주의!
Zsw가 발견 한 버그로 인해 다른 지역에 군대를 배치 한 지역이 게임에서 잠재적 인 이점을 갖게되었습니다. 수정 사항이 컨트롤러로 푸시되었으므로 위의 링크를 사용하여 찾은 기존 버전을 사용하십시오.