당신은 통제하에 토지를 늘리고 자 하는 진취적인 점 입니다. 이것은 매우 간단합니다. 현재 땅 밖으로 여행하고 다시 땅으로 돌아 가면 해당 루프의 모든 것이 소유됩니다. 그러나 캐치가 있습니다. 다른 점이 어떻게 든 루프를 찾아서 건너면 죽습니다.
아직 시도하지 않은 경우 Splix.io 로 이동하여 게임을 시도하십시오. 화살표 키를 사용하여 움직임을 제어하십시오.
GIF
크레딧 : http://splix.io/
사양
모든 플레이어는 200x200 보드에서 임의의 위치에서 시작합니다. (나는 이것을 변경할 권리가있다 :). 가능한 많은 포인트를 모으기 위해 일정량의 움직임이있을 것입니다. 포인트는 다음과 같이 계산됩니다.
- 죽인 플레이어 수 300 회
- 라운드가 끝날 때 소유 한 토지의 양
이것은 다른 사람들이 당신의 땅을 훔칠 수있는 지점을 제시합니다. 그들이 당신의 땅의 일부와 교차하는 고리를 시작하면, 그것을 주장 할 수 있습니다. 라운드 중에 죽으면 해당 라운드의 모든 포인트가 사라집니다.
각 라운드에는 무작위로 선택된 플레이어 그룹 (최대 5 명의 고유 플레이어)이 있습니다 (변경 될 수 있음). 모든 플레이어는 같은 라운드 수에 참여합니다. 봇의 최종 점수는 게임당 평균 점수에 의해 결정됩니다. 각 게임은 2000 턴으로 구성됩니다 (변경 될 수도 있음). 모든 봇은 동시에 움직입니다.
사망 사례
머리 엉덩이
두 선수가 서로 맞대면 죽습니다. 두 플레이어가 모두 공간의 가장자리에있을 때에도 마찬가지입니다.
그러나 한 명의 플레이어 만 자신의 땅에 있으면 다른 플레이어는 죽습니다.
라인 크로스
이 경우 보라색 플레이어 만 죽습니다.
당신은 자신의 선을 넘을 수 없습니다.
보드 나가기
플레이어가 보드에서 나 가려고하면 죽고 모든 포인트를 잃게됩니다.
캡처 영역
플레이어는 트레일이있을 때 지역을 점령하고 다시 자신의 땅에 들어갑니다.
빨간색은 두 개의 빨간색 선 사이를 채 웁니다. 플레이어가 채우지 않는 유일한 경우는 다른 플레이어가 루프 안에있을 때입니다. 분명히, 이것은 다른 플레이어 자신이 자신이 소유 한 토지가 아니라 루프에있을 때만 적용됩니다. 플레이어는 다른 사람으로부터 토지를 점령 할 수 있습니다. 플레이어가 자신의 트레일로 둘러싸인 영역을 채울 수없는 경우 트레일은 일반 토지로 직접 변환됩니다. 다른 플레이어 랜드 루프 내의 플레이어가 죽으면 해당 루프의 영역이 채워집니다. 플레이어가 죽을 때마다 채워질 수있는 영역에 대해 보드가 재검토됩니다.
컨트롤러 세부 사항
컨트롤러가 여기 있습니다 . 원래 게임과 매우 유사하지만 기술적 인 이유로 KotH에 더 적합하도록 약간 변경되었습니다. @NathanMerrill 의 KotHComm 라이브러리 와 @NathanMerrill 의 실질적인 도움으로 구축되었습니다. 대화방 의 컨트롤러에서 발견 된 모든 버그를 알려주십시오 . KotHComm과 일관성을 유지하기 위해 컨트롤러 전체에서 Eclipse 컬렉션을 사용했지만 Java 컬렉션 라이브러리 만 사용하여 봇을 작성할 수 있습니다.
모든 것은 github releases 페이지 의 uberjar에 패키지되어 있습니다. 사용하려면 자동 완성에 사용할 수 있도록 다운로드하여 프로젝트에 첨부하십시오 ( IntelliJ , Eclipse 지침 ). 제출물을 테스트하려면을 사용하여 jar을 실행하십시오 java -jar SplixKoTH-all.jar -d path\to\submissions\folder
. path\to\submissions\folder
이라는 이름의 하위 폴더가 있는지 확인하고 java
모든 파일을 거기에 배치하십시오. 봇에서 패키지 이름을 사용하지 마십시오 (KotHComm에서는 가능하지만 조금 더 문제가 될 수 있습니다). 모든 옵션을 보려면를 사용하십시오 --help
. 모든 봇을로드하려면을 사용하십시오 --question-id 126815
.
봇 작성
봇 작성을 시작하려면을 확장해야합니다 SplixPlayer
.
Direction makeMove(ReadOnlyGame game, ReadOnlyBoard board)
- 여기에서 봇이 원하는 움직임을 결정합니다. null을 반환해서는 안됩니다.
HiddenPlayer getThisHidden()
- 의
HiddenPlayer
버전을 구하십시오this
. 봇과 보드를 비교하는 데 유용합니다.
- 의
enum Direction
- 가치
East
(x = 1; y = 0)West
(x = -1; y = 0)North
(x = 0; y = 1)South
(x = 0; y = -1)
Direction leftTurn()
Direction
좌회전하면 얻을 수 있는 것을 얻으십시오 .
Direction RightTurn()
Direction
올바른 방향으로 돌면 얻을 수 있는 것을 얻으십시오 .
ReadOnlyBoard
이것은 보드에 액세스하는 클래스입니다. 플레이어 위치가 표시된 보드의 로컬 뷰 (20x20) 또는 보드의 위치를 소유하고 주장하는 사람의 정보 만있는 전체 뷰 (전체 보드)를 얻을 수 있습니다. 이것은 또한 당신이 당신의 입장을 얻는 곳이기도합니다.
SquareRegion getBounds()
- 보드의 크기를 검색하십시오.
MutableMap<com.nmerrill.kothcomm.game.maps.Point2D,ReadOnlySplixPoint> getGlobal()
- 보드의 세계지도를 얻으십시오.
MutableMap<com.nmerrill.kothcomm.game.maps.Point2D,ReadOnlySplixPoint> getView()
getGlobal()
플레이어 주변의 20x20 영역으로 제한되고 플레이어 위치를 표시한다는 점을 제외하고 와 동일 합니다.
Point2D getPosition(SplixPlayer me)
- 플레이어의 위치를 확인하십시오. 로 사용하십시오
board.getPosition(this)
.
- 플레이어의 위치를 확인하십시오. 로 사용하십시오
Point2D getSelfPosition(ReadOnlyBoard)
- 칠판에 당신의 입장을 알려주세요. 용법:
Point2D mypos = getSelfPosition(board)
- 칠판에 당신의 입장을 알려주세요. 용법:
ReadOnlyGame
ReadOnlyGame
를 통해 게임에서 남은 턴 수에만 액세스 할 수 int getRemainingIterations()
있습니다.
ReadOnlySplixPoint
HiddenPlayer getClaimer()
HiddenPlayer
요점을 주장하는 사람 의 버전 (클레임 = 트레일)을 가져 옵니다 .
HiddenPlayer getOwner()
- 포인트를 소유 한 사람을 확보하십시오.
HiddenPlayer getWhosOnSpot()
- 플레이어가이 지점에 있으면 숨겨진 버전을 반환하십시오. 에서 작동합니다
getLocal()
.
- 플레이어가이 지점에 있으면 숨겨진 버전을 반환하십시오. 에서 작동합니다
Point2D
여기의 다른 클래스와 달리 Point2D
KotHComm 라이브러리에 포함되어 있습니다.com.nmerrill.kothcomm.game.maps.Point2D
Point2D(int x, int y)
int getX()
int getY()
Point2D moveX(int x)
Point2D moveY(int y)
Point2D wrapX(int maxX)
- 랩
x
의 범위 내로 값을maxX
.
- 랩
Point2D wrapY(int maxY)
- 랩
y
의 범위 내로 값을maxY
.
- 랩
int cartesianDistance(Point2D other)
- 이것은 플레이어가 지점 a에서 지점 b로 이동하는 데 걸리는 턴 수를 의미합니다.
클로저 지원
Clojure 컴파일러는와 번들로 제공 SplixKoTH-all.jar
되므로 봇에 Clojure를 사용할 수 있습니다! random_bot
사용 방법을 보려면 my 를 참조하십시오.
봇 디버깅
컨트롤러에는 테스트 전략을 돕기위한 디버거가 제공됩니다. 시작하려면 --gui
옵션으로 jar을 실행하십시오 .
디버거를 jar에 첨부하려면 IntelliJ에 대한 다음 지시 사항 또는 Eclipse에 대한 지시 사항 을 따르십시오 (Eclipse 버전은 테스트되지 않음).
코드와 함께 디버거를 사용하는 경우이 코드를 사용하여 봇이보고있는 것을 시각화 할 수 있습니다. makeMove
봇 의 시작 부분에 중단 점을 설정 하고 현재 스레드 만 일시 중지하는지 확인하십시오. 그런 다음 UI에서 시작 버튼을 클릭하고 코드를 단계별로 실행하십시오.
이제 모든 것을 하나로 합치십시오.
봇 실행
다른 사람과 함께 봇을 실행하려면 릴리스 페이지에서 jar을 실행해야합니다. 다음은 플래그 목록입니다.
--iterations
(-i
) <=int
(기본500
)- 실행할 게임 수를 지정하십시오.
--test-bot
(-t
) <=String
- 봇이 포함 된 게임 만 실행하십시오.
--directory
(-d
) <= 경로- 제출을 실행할 디렉토리입니다. 이것을 사용하여 봇을 실행하십시오. 봇이라는 경로의 하위 폴더에 있는지 확인하십시오
java
.
- 제출을 실행할 디렉토리입니다. 이것을 사용하여 봇을 실행하십시오. 봇이라는 경로의 하위 폴더에 있는지 확인하십시오
--question-id
(-q
) <=int
(만 사용126815
)- 사이트에서 다른 제출물을 다운로드하여 컴파일하십시오.
--random-seed
(-r
) <=int
(기본값은 임의의 숫자)- 무작위를 사용하는 봇이 결과를 재현 할 수 있도록 러너에게 시드를 제공하십시오.
--gui
(-g
)- 토너먼트를 실행하는 대신 디버거 UI를 실행하십시오. 와 함께 사용하는 것이 가장
--test-bot
좋습니다.
- 토너먼트를 실행하는 대신 디버거 UI를 실행하십시오. 와 함께 사용하는 것이 가장
--multi-thread
(-m
) <=boolean
(기본true
)- 멀티 스레드 모드에서 토너먼트를 실행하십시오. 컴퓨터에 여러 코어가있는 경우 더 빠른 결과를 얻을 수 있습니다.
--thread-count
(-c
) <=int
(기본4
)- 다중 스레드가 허용되는 경우 실행할 스레드 수
--help
(-h
)- 이와 유사한 도움말 메시지를 인쇄하십시오.
이 페이지에서 모든 제출물을 실행하려면을 사용하십시오 java -jar SplixKoTH-all.jar -q 126815
.
게시물 서식
컨트롤러가 모든 봇을 다운로드 할 수 있도록하려면이 형식을 따라야합니다.
[BotName], Java // this is a header
// any explanation you want
[BotName].java // filename, in the codeblock
[code]
또한 패키지 선언을 사용하지 마십시오.
스코어 보드
+------+--------------+-----------+
| Rank | Name | Score |
+------+--------------+-----------+
| 1 | ImNotACoward | 8940444.0 |
| 2 | TrapBot | 257328.0 |
| 3 | HunterBot | 218382.0 |
+------+--------------+-----------+
규칙의 일부가 불분명하거나 대화방 의 컨트롤러에서 오류를 발견하면 알려주십시오 .