KOTH bất đối xứng: Bắt mèo
CẬP NHẬT : Các tệp chính được cập nhật (bao gồm cả các tệp con mới) vì Trình điều khiển.java không bắt Ngoại lệ (chỉ có lỗi). Bây giờ nó bắt lỗi và ngoại lệ và cũng in chúng.
Thử thách này bao gồm hai luồng, đây là luồng bắt, sợi mèo có thể tìm thấy ở đây .
Bộ điều khiển có thể được tải xuống ở đây .
Đây là một KOTH bất đối xứng: Mỗi lần gửi là một con mèo hoặc một người bắt . Có những trò chơi giữa mỗi cặp của một con mèo và một người bắt. Những con mèo và những người bắt có bảng xếp hạng riêng biệt.
Bắt bóng
Có một con mèo trên lưới lục giác. Nhiệm vụ của bạn là bắt nó càng nhanh càng tốt. Mỗi lượt, bạn có thể đặt một xô nước trên một ô lưới để ngăn mèo không thể đến đó. Nhưng con mèo không (có lẽ) bị câm, và bất cứ khi nào bạn đặt một cái xô, con mèo sẽ di chuyển đến một ô lưới khác. Vì lưới là hình lục giác, con mèo có thể đi theo 6 hướng khác nhau. Mục tiêu của bạn là bao quanh con mèo bằng xô nước, càng nhanh càng tốt.
Con mèo
Bạn biết người bắt bóng muốn bắt bạn bằng cách đặt xô nước xung quanh bạn. Tất nhiên bạn cố gắng trốn tránh, nhưng vì bạn là một con mèo lười biếng (như mèo), bạn chính xác thực hiện một bước tại thời điểm đó. Điều này có nghĩa là bạn không thể ở cùng một nơi với bạn, nhưng bạn phải di chuyển đến một trong sáu điểm xung quanh. Bất cứ khi nào bạn thấy rằng người bắt được đặt một thùng nước mới, bạn đi đến một tế bào khác. Tất nhiên bạn cố gắng trốn tránh càng lâu càng tốt.
Lưới
Lưới là hình lục giác, nhưng vì chúng tôi không có cấu trúc dữ liệu hình lục giác, chúng tôi lấy một 11 x 11
mảng 2d vuông và bắt chước 'hành vi' hình lục giác mà con mèo chỉ có thể di chuyển theo 6 hướng:
Cấu trúc liên kết là hình xuyến, có nghĩa là nếu bạn bước vào một ô 'bên ngoài' của mảng, bạn sẽ chỉ được chuyển đến ô tương ứng ở phía bên kia của mảng.
Trò chơi
Con mèo bắt đầu ở vị trí nhất định trong lưới. Người bắt có thể thực hiện động tác đầu tiên, sau đó con mèo và người bắt nó thay phiên nhau di chuyển cho đến khi con mèo bị bắt. Số bước là số điểm cho trò chơi đó. Con mèo cố gắng để có được điểm số lớn nhất có thể, người bắt bóng cố gắng để có được điểm càng thấp càng tốt. Tổng số trung bình trên tất cả các trò chơi bạn tham gia sẽ là số điểm bạn gửi. Có hai bảng xếp hạng riêng biệt, một cho mèo, một cho người bắt.
Bộ điều khiển
Bộ điều khiển đã cho được viết bằng Java. Là một người bắt hoặc một con mèo, mỗi người phải hoàn thành một lớp Java (đã có một số ví dụ nguyên thủy) và đặt nó trong players
gói (và cập nhật danh sách các con mèo / người bắt trong lớp Trình điều khiển), nhưng bạn cũng có thể viết chức năng bổ sung trong lớp đó. Bộ điều khiển đi kèm với mỗi hai ví dụ hoạt động của các lớp bắt / mèo đơn giản.
Trường này là một mảng 11 x 11
2D- int
lưu trữ các giá trị của trạng thái hiện tại của các ô. Nếu một ô trống, nó có giá trị 0
, nếu có một con mèo thì nó có giá trị -1
và nếu có một cái xô thì có a 1
.
Có một số chức năng nhất định bạn có thể sử dụng: isValidMove()
/ isValidPosition()
là để kiểm tra xem di chuyển (con mèo) / vị trí (người bắt) của bạn có hợp lệ không.
Mỗi khi đến lượt của bạn, chức năng của bạn takeTurn()
được gọi. Đối số chứa bản sao của lưới hiện tại và có các phương thức như read(i,j)
để đọc ô tại (i,j)
, cũng như isValidMove()/ isValidPosition()
kiểm tra tính hợp lệ của câu trả lời của bạn. Điều này cũng quản lý việc bao bọc cấu trúc liên kết hình xuyến, có nghĩa là ngay cả khi lưới chỉ có 11 x 11, bạn vẫn có thể truy cập vào ô (-5,13).
Phương thức sẽ trả về một int
mảng gồm hai phần tử, đại diện cho các di chuyển có thể. Đối với những con mèo này là {-1,1},{0,1},{-1,0},{1,0},{0,-1},{1,-1}
những vị trí đại diện cho vị trí tương đối của nơi con mèo muốn đi và người bắt trả lại tọa độ tuyệt đối của nơi chúng muốn đặt một cái xô {i,j}
.
Nếu phương pháp của bạn tạo ra một động thái không hợp lệ, việc gửi của bạn sẽ bị loại. Di chuyển được coi là không hợp lệ, nếu tại điểm đến của bạn đã là một cái xô hoặc di chuyển không được phép / đích đã bị chiếm đóng (như một con mèo) hoặc nếu đã có một cái xô / con mèo (như một người bắt). Bạn có thể kiểm tra trước khi thực hiện với các chức năng nhất định.
Trình của bạn nên làm việc hợp lý nhanh chóng. Nếu phương pháp của bạn mất hơn 200ms cho mỗi bước thì nó cũng sẽ bị loại. (Tốt hơn là ít hơn nhiều ...)
Các chương trình được phép lưu trữ thông tin giữa các bước.
Đệ trình
- Bạn có thể thực hiện nhiều bài nộp như bạn muốn.
- Vui lòng không thay đổi đáng kể các bài nộp bạn đã gửi.
- Xin vui lòng mỗi bài nộp trong một câu trả lời mới.
- Mỗi bài nộp tốt nhất nên có tên duy nhất của nó.
- Việc gửi phải bao gồm mã của lớp của bạn cũng như một mô tả cho chúng tôi biết cách gửi của bạn hoạt động.
- Bạn có thể viết dòng trước
<!-- language: lang-java -->
mã nguồn của bạn để có được tô sáng cú pháp tự động.
Chấm điểm
Tất cả các con mèo sẽ cạnh tranh với tất cả những người bắt cùng một số lần. Tôi sẽ cố gắng cập nhật điểm số hiện tại thường xuyên, người chiến thắng sẽ được xác định khi hoạt động đã giảm.
Thử thách này được lấy cảm hứng từ trò chơi flash cũ này
Cảm ơn @PhiNotPi đã thử nghiệm và đưa ra một số phản hồi mang tính xây dựng.
Điểm hiện tại (100 trò chơi cho mỗi cặp)
Name Score Rank Author
RandCatcher 191674 8 flawr
StupidFill 214246 9 flawr
Achilles 76820 6 The E
Agamemnon 74844 5 The E
CloseCatcher 54920 4 randomra
ForwordCatcher 94246 7 MegaTom
Dijkstra 46500 2 TheNumberOne
HexCatcher 48832 3 randomra
ChoiceCatcher 43828 1 randomra
RandCat 77928 7 flawr
StupidRightCat 81794 6 flawr
SpiralCat 93868 5 CoolGuy
StraightCat 82452 9 CoolGuy
FreeCat 106304 3 randomra
RabidCat 77770 8 cain
Dijkstra's Cat 114670 1 TheNumberOne
MaxCat 97768 4 Manu
ChoiceCat 113356 2 randomra