Bạn là một dấu chấm táo bạo muốn tăng đất dưới sự kiểm soát của nó. Điều này khá đơn giản - đi ra ngoài vùng đất hiện tại của bạn và quay trở lại vùng đất của bạn và mọi thứ trong vòng lặp đó đều thuộc sở hữu của bạn. Nhưng có một nhược điểm. Nếu một số dấu chấm khác bằng cách nào đó tìm thấy vòng lặp của bạn và vượt qua nó, bạn sẽ chết.
Nếu bạn chưa thử nó, hãy truy cập Splix.io và thử một trò chơi. Sử dụng các phím mũi tên để kiểm soát chuyển động của bạn.
QUÀ TẶNG
Tín dụng: http://splix.io/
Cụ thể
Tất cả người chơi bắt đầu ở các vị trí ngẫu nhiên trên một bảng 200x200. (Tôi bảo lưu quyền thay đổi điều này :). Bạn sẽ có một số lượng di chuyển nhất định để tích lũy số điểm lớn nhất có thể. Điểm được tính bằng:
- Số lượng người chơi bạn đã giết 300 lần
- Số lượng đất bạn sở hữu vào cuối vòng
Điều này đưa ra quan điểm rằng những người khác có thể đánh cắp đất của bạn. Nếu họ bắt đầu một vòng lặp giao với một số vùng đất của bạn, họ có thể yêu cầu nó. Nếu bạn chết trong vòng, bạn mất tất cả điểm cho vòng đó.
Mỗi vòng có một nhóm người chơi được chọn ngẫu nhiên (tối đa 5 người chơi duy nhất) (có thể thay đổi). Mỗi người chơi tham gia vào một số vòng bằng nhau. Điểm cuối cùng của bot của bạn được xác định bằng điểm trung bình trên mỗi trò chơi. Mỗi trò chơi bao gồm 2000 lượt (cũng có thể thay đổi). Tất cả các bot thực hiện di chuyển của họ cùng một lúc.
Trường hợp tử vong
Đầu mông
Cả hai người chơi đều chết khi họ chổng mông vào nhau. Điều này vẫn đúng ngay cả khi cả hai người chơi đang ở rìa không gian của họ.
Tuy nhiên, khi chỉ có một người chơi ở trong vùng đất của mình, người chơi kia sẽ chết.
Ngã tư đường
Trong trường hợp này, chỉ có người chơi màu tím chết.
Bạn không thể vượt qua dòng của riêng bạn.
Ra khỏi bảng
Nếu một người chơi cố gắng thoát khỏi bảng, anh ta sẽ chết và mất tất cả điểm.
Khu vực chụp
Một người chơi sẽ chiếm được khu vực khi anh ta có một dấu vết và anh ta lại vào vùng đất của mình.
Màu đỏ lấp đầy ở giữa hai vạch đỏ. Trường hợp duy nhất mà người chơi không điền vào là khi người chơi khác ở trong vòng lặp. Để rõ ràng, điều này chỉ áp dụng khi bản thân người chơi khác ở trong vòng lặp, không chỉ là đất thuộc sở hữu của anh ta. Một người chơi có thể chiếm đất từ người khác. Nếu người chơi không thể điền vào khu vực được bao quanh bởi đường mòn của mình, đường mòn được chuyển đổi trực tiếp sang đất bình thường. Nếu người chơi bên trong vòng lặp hạ cánh của người chơi khác chết, khu vực trong vòng lặp đó sẽ bị lấp. Mỗi khi người chơi chết, bảng sẽ được xem xét lại cho một khu vực có thể được điền vào.
Chi tiết điều khiển
Bộ điều khiển ở đây . Nó rất giống với trò chơi gốc, nhưng những thay đổi nhỏ đã được thực hiện để làm cho điều này phù hợp hơn với KotH và vì lý do kỹ thuật. Nó được xây dựng với @NathanMerrill 's thư viện KotHComm , và với sự giúp đỡ đáng kể từ @NathanMerrill là tốt. Xin vui lòng cho tôi biết bất kỳ lỗi nào bạn tìm thấy trong bộ điều khiển trong phòng trò chuyện . Để phù hợp với KotHComm, tôi đã sử dụng các bộ sưu tập Eclipse trong toàn bộ bộ điều khiển, nhưng các bot có thể được viết chỉ bằng thư viện Bộ sưu tập Java.
Tất cả mọi thứ được đóng gói trong một uberjar trên trang phát hành github . Để sử dụng nó, hãy tải xuống và đính kèm nó vào dự án của bạn để bạn có thể sử dụng nó để tự động phàn nàn (hướng dẫn cho IntelliJ , Eclipse ). Để kiểm tra bài nộp của bạn, bạn chạy jar với java -jar SplixKoTH-all.jar -d path\to\submissions\folder
. Đảm bảo rằng path\to\submissions\folder
có một bộ lọc con được đặt tên java
và để đặt tất cả các tệp của bạn ở đó. Không sử dụng tên gói trong bot của bạn (mặc dù điều này có thể xảy ra với KotHComm, nhưng nó chỉ gây rắc rối hơn một chút). Để xem tất cả các tùy chọn, sử dụng --help
. Để tải tất cả các bot, sử dụng --question-id 126815
.
Viết bot
Để bắt đầu viết bot, bạn phải mở rộng SplixPlayer
.
Direction makeMove(ReadOnlyGame game, ReadOnlyBoard board)
- Đây là nơi bạn quyết định di chuyển mà bạn muốn bot của bạn thực hiện. Không được trả về null.
HiddenPlayer getThisHidden()
- Lấy
HiddenPlayer
phiên bản củathis
. Hữu ích để so sánh bot của bạn với hội đồng quản trị.
- Lấy
enum Direction
- Giá trị
East
(x = 1; y = 0)West
(x = -1; y = 0)North
(x = 0; y = 1)South
(x = 0; y = -1)
Direction leftTurn()
- Nhận được những
Direction
gì bạn sẽ nhận được nếu bạn rẽ trái.
- Nhận được những
Direction RightTurn()
- Có được những
Direction
gì bạn sẽ nhận được nếu bạn rẽ phải.
- Có được những
ReadOnlyBoard
Đây là lớp nơi bạn truy cập bảng. Bạn có thể có được chế độ xem cục bộ (20x20) của bảng với các vị trí người chơi được hiển thị hoặc chế độ xem toàn cầu (toàn bộ bảng) chỉ với thông tin về người sở hữu và yêu cầu các vị trí trên bảng. Đây cũng là nơi bạn có được vị trí của bạn.
SquareRegion getBounds()
- Lấy kích thước của bảng.
MutableMap<com.nmerrill.kothcomm.game.maps.Point2D,ReadOnlySplixPoint> getGlobal()
- Nhận một bản đồ toàn cầu của hội đồng quản trị.
MutableMap<com.nmerrill.kothcomm.game.maps.Point2D,ReadOnlySplixPoint> getView()
- Tương tự như
getGlobal()
, ngoại trừ việc nó bị giới hạn trong khu vực 20x20 xung quanh trình phát của bạn và nó hiển thị các vị trí của người chơi.
- Tương tự như
Point2D getPosition(SplixPlayer me)
- Nhận vị trí của người chơi của bạn. Sử dụng như
board.getPosition(this)
.
- Nhận vị trí của người chơi của bạn. Sử dụng như
Point2D getSelfPosition(ReadOnlyBoard)
- Nhận vị trí của bạn trên bảng. Sử dụng:
Point2D mypos = getSelfPosition(board)
- Nhận vị trí của bạn trên bảng. Sử dụng:
ReadOnlyGame
ReadOnlyGame
chỉ cung cấp quyền truy cập vào số lượt còn lại trong trò chơi thông qua int getRemainingIterations()
.
ReadOnlySplixPoint
HiddenPlayer getClaimer()
- Lấy
HiddenPlayer
phiên bản của người đang yêu cầu một điểm - yêu cầu = một dấu vết.
- Lấy
HiddenPlayer getOwner()
- Nhận người sở hữu một điểm.
HiddenPlayer getWhosOnSpot()
- Nếu người chơi được định vị vào thời điểm này, hãy trả lại phiên bản ẩn của nó. Chỉ hoạt động trong
getLocal()
.
- Nếu người chơi được định vị vào thời điểm này, hãy trả lại phiên bản ẩn của nó. Chỉ hoạt động trong
Point2D
Không giống như các lớp khác ở đây, Point2D
được chứa trong thư viện 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)
- Bọc
x
giá trị trong phạm vimaxX
.
- Bọc
Point2D wrapY(int maxY)
- Bọc
y
giá trị trong phạm vimaxY
.
- Bọc
int cartesianDistance(Point2D other)
- Điều này có nghĩa là người chơi sẽ mất bao nhiêu lượt để chuyển từ điểm a sang điểm b.
Hỗ trợ Clojure
Trình biên dịch Clojure được gói cùng với SplixKoTH-all.jar
, vì vậy bạn có thể sử dụng Clojure cho bot của mình! Tham khảo của tôirandom_bot
để xem làm thế nào để sử dụng nó.
Gỡ lỗi một bot
Bộ điều khiển đi kèm với trình gỡ lỗi để giúp kiểm tra các chiến lược. Để bắt đầu, hãy chạy jar với--gui
tùy chọn.
Để đính kèm trình gỡ lỗi vào jar của bạn, hãy làm theo các hướng dẫn sau cho IntelliJ hoặc các hướng dẫn này cho Eclipse (phiên bản Eclipse chưa được kiểm tra).
Nếu bạn đang sử dụng trình gỡ lỗi với mã của mình, bạn có thể sử dụng công cụ này để giúp trực quan hóa những gì bot của bạn đang nhìn thấy. Đặt điểm dừng ở đầu makeMove
bot của bạn và đảm bảo rằng nó chỉ tạm dừng luồng hiện tại. Tiếp theo, nhấp vào nút bắt đầu trên giao diện người dùng và chuyển qua mã của bạn.
Bây giờ, để kết hợp tất cả lại với nhau:
Chạy bot
Để chạy bot của bạn với người khác, bạn cần chạy jar trên trang phát hành. Dưới đây là danh sách các cờ:
--iterations
(-i
) <=int
(mặc định500
)- Chỉ định số lượng trò chơi để chạy.
--test-bot
(-t
) <=String
- Chỉ chạy các trò chơi mà bot được bao gồm trong.
--directory
(-d
) <= Đường dẫn- Các thư mục để chạy đệ trình từ. Sử dụng điều này để chạy bot của bạn. Đảm bảo rằng các bot của bạn nằm trong thư mục con của đường dẫn có tên
java
.
- Các thư mục để chạy đệ trình từ. Sử dụng điều này để chạy bot của bạn. Đảm bảo rằng các bot của bạn nằm trong thư mục con của đường dẫn có tên
--question-id
(-q
) <=int
(chỉ sử dụng126815
)- Tải về và biên dịch các bài nộp khác từ trang web.
--random-seed
(-r
) <=int
(mặc định là số ngẫu nhiên)- Đưa hạt giống cho người chạy để các bot sử dụng ngẫu nhiên có thể có kết quả được sao chép.
--gui
(-g
)- Chạy trình gỡ lỗi ui thay vì chạy một giải đấu. Sử dụng tốt nhất với
--test-bot
.
- Chạy trình gỡ lỗi ui thay vì chạy một giải đấu. Sử dụng tốt nhất với
--multi-thread
(-m
) <=boolean
(mặc địnhtrue
)- Chạy một tournoment trong chế độ đa luồng. Điều này cho phép kết quả nhanh hơn nếu máy tính của bạn có nhiều lõi.
--thread-count
(-c
) <=int
(mặc định4
)- Số lượng luồng để chạy nếu đa luồng được cho phép.
--help
(-h
)- In một thông điệp trợ giúp tương tự như thế này.
Để chạy tất cả các bài nộp trên trang này, sử dụng java -jar SplixKoTH-all.jar -q 126815
.
Định dạng bài viết của bạn
Để đảm bảo rằng bộ điều khiển có thể tải xuống tất cả các bot, bạn nên làm theo định dạng này.
[BotName], Java // this is a header
// any explanation you want
[BotName].java // filename, in the codeblock
[code]
Ngoài ra, không sử dụng khai báo gói.
Bảng điểm
+------+--------------+-----------+
| Rank | Name | Score |
+------+--------------+-----------+
| 1 | ImNotACoward | 8940444.0 |
| 2 | TrapBot | 257328.0 |
| 3 | HunterBot | 218382.0 |
+------+--------------+-----------+
Vui lòng cho tôi biết nếu bất kỳ phần nào của quy tắc không rõ ràng hoặc nếu bạn tìm thấy bất kỳ lỗi nào trong bộ điều khiển trong phòng trò chuyện .