OTT Code ArenaTHI ĐẤU LẬP TRÌNH
Lập trình, kiểm thử, thi đấu.

Quản lý / Tổng quan

U Người dùngNgười chơi

Kết quả ván đấu

Ván đấu đã kết thúc

Kết quả ván đã được ghi nhận

Đội AĐội A0
VS
Đội BĐội B0

Tỷ số 0-0

Đang chuẩn bị ván tiếp theo

BẮT ĐẦU LẬP TRÌNH

Hướng dẫn viết Bot

Tạo chiến thuật, kiểm tra trong sandbox và lưu phiên bản để tham gia giải đấu.

Cách hệ thống gọi mã nguồn

OTT Code Arena dùng Strategy SDK 1.0.0. Mỗi lượt, hệ thống truyền trạng thái hiện tại và danh sách nước đi hợp lệ vào hàm chiến thuật. Bot chỉ cần chọn và trả về một phần tử trong danh sách đó.

Bạn không cần viết main, đọc JSON, xử lý stdin/stdout, Docker hoặc vòng lặp trận đấu. Hệ thống quản lý toàn bộ phần giao tiếp và kiểm tra nước đi.

Hàm bắt buộc

C++17
using namespace std;

Move chooseMove(const GameState& state,
                const vector<Move>& legalMoves) {
    return legalMoves.front();
}
Python 3
from ott_strategy_sdk import Move, GameState

def choose_move(state: GameState, legal_moves: list[Move]) -> Move:
    return legal_moves[0]

Dữ liệu được hỗ trợ

Dữ liệuC++17Python 3
Trạng tháiGameStateGameState
Nước điMoveMove
Quân cờPiecePiece
Danh sách nước hợp lệvector<Move>list[Move]

GameState: protocol_version, match_id, turn (bắt đầu từ 1), player (A/B), board_size (9), pieces.

Piece: id, type (dam/la/keo), player, pos dạng a1–i9. Move C++: piece_id, from, to, captures, has_capture. Move Python: piece_id, from_position, to, captures.

Nước không ăn quân có has_capture == false ở C++ và captures is None ở Python. Khi có ăn quân, captures là ID quân bị ăn.

Luật bàn cờ cần biết

  • Bàn cờ 9×9, cột a đến i, hàng 1 đến 9.
  • Mỗi quân đi một ô theo 8 hướng.
  • Loại quân: dam (Búa), la (Bao), keo (Kéo).
  • Quan hệ bắt quân: dam bắt keo, keo bắt la, la bắt dam. Không bắt được quân cùng loại, quân của mình hoặc quân không khắc chế.
  • Người chơi A hướng tới i9; người chơi B hướng tới a1. Đưa quân tới ô đích sẽ thắng.
  • Bộ máy kiểm tra loại quân còn lại, giới hạn mặc định 200 lượt, lặp vị trí và trạng thái không đủ vật liệu để xác định kết quả.
  • Mỗi lượt Bot có thời gian mặc định 2 giây; lỗi quá thời gian, dừng đột ngột hoặc đầu ra không hợp lệ làm lượt đấu thất bại.
  • legalMoves/legal_moves đã được hệ thống tạo theo đúng luật và không nên tự sửa thứ tự.

Một số cách viết chiến thuật

// C++17: chọn nước đầu tiên
return legalMoves.front();

// C++17: ưu tiên nước ăn quân
for (const Move& move : legalMoves) {
    if (move.has_capture) return move;
}
return legalMoves.front();

# Python 3: ưu tiên nước ăn quân
for move in legal_moves:
    if move.captures is not None:
        return move
return legal_moves[0]

Bạn có thể duyệt state.pieces để biết vị trí, loại và người sở hữu từng quân; sau đó chọn nước phù hợp trong danh sách hợp lệ.

Điều kiện mã nguồn hợp lệ

  • Phải có đúng hàm chooseMove (C++) hoặc choose_move (Python).
  • Phải trả về một nước đi có trong danh sách hợp lệ.
  • Không trả về null, None hoặc tự tạo nước đi không hợp lệ.
  • Lỗi biên dịch, môi trường chạy hoặc quá thời gian sẽ làm lượt đấu thất bại.

Quy trình nên dùng: viết mã nguồn → Chạy thử → sửa lỗi → lưu phiên bản → chọn phiên bản đó khi đăng ký giải đấu. Phiên bản đã ghim sẽ không thay đổi khi bạn chỉnh sửa mã nguồn sau này.

Lỗi thường gặp

  • Sai tên hoặc chữ ký hàm: C++ phải là chooseMove, Python phải là choose_move.
  • Thiếu include/import cần thiết hoặc dùng sai tên trường của SDK sẽ gây lỗi biên dịch/môi trường chạy.
  • Trả về nước đi không có trong danh sách hợp lệ sẽ bị hệ thống từ chối và lượt đấu kết thúc với lỗi Bot.
  • Lỗi biên dịch, chương trình dừng đột ngột, đầu ra không hợp lệ, đầu ra rỗng hoặc quá thời gian đều làm lượt đấu của Bot thất bại.
  • Không tự xử lý JSON hay in kết quả ra stdout; Strategy SDK đã làm phần này.

Cách kiểm tra Bot

Trong Không gian mã nguồn, nhập hoặc sửa mã rồi chọn Chạy thử. Hệ thống chạy Bot hiện tại đấu với Bot hệ thống cố định trong môi trường sandbox. Khi chạy xong, bạn được chuyển sang trang Xem lại trận đấu để xem bàn cờ, nước đi và kết quả.

Trận thử không lưu kết quả vào giải đấu và không tạo thay đổi cho phiên bản đã lưu.

Lưu phiên bản và tham gia giải đấu

Chọn Tạo Bot cho Bot mới hoặc Lưu phiên bản để tạo phiên bản bất biến mới. Mỗi phiên bản giữ nguyên mã nguồn, môi trường chạy và thông tin SDK tại thời điểm lưu.

Khi đăng ký giải đấu, hệ thống ghim đúng Bot ID và phiên bản bạn chọn. Nếu sau đó lưu R2, phiên bản R1 đã đăng ký vẫn giữ nguyên và không tự chuyển sang R2.

Chạy thử Bot

Kiểm tra chiến thuật trong Docker sandbox trước khi tham gia giải đấu.

Chưa chọn phiên bản

ĐỐI THỦBot hệ thống cố địnhTrận thử không lưu kết quả giải đấu.
Trận thử với Bot hệ thống cố định.

Sẵn sàng đấu với Bot hệ thống.

Chi tiết kỹ thuật

0 / 0
Nước đi hợp lệ

—

Diễn biến trận đấu
0 lượt
Bàn cờ và nước đi được chọn
Ô nguồn Ô đích Ăn quân Ô đích thắng

Xóa Bot

Bạn có chắc muốn xóa Bot «»?

Chỉ Bot chưa có phiên bản mã nguồn bất biến và chưa được giải đấu tham chiếu mới có thể bị xóa. Các Bot đã có phiên bản cần được giữ lại để bảo toàn lịch sử và kết quả thi đấu.

Xóa phiên bản

Bạn có chắc muốn xóa phiên bản «»?

Phiên bản đã xóa không thể khôi phục. Nếu đây là phiên bản đang chọn, hệ thống sẽ chuyển sang phiên bản khác trước khi xóa.

Tạo giải đấu mới

Thiết lập giải đấu để đăng ký Bot và tổ chức các trận đấu.

Đăng ký Bot tham gia

Chọn một Bot của bạn và đặt tên hiển thị cho người tham gia trong giải đấu.

Đang tải danh sách Bot…

Giải đấu đang chọn

Bạn chưa có Bot để đăng ký

Hãy tạo Bot trước khi đăng ký tham gia giải đấu.

Không thể tải danh sách Bot

Hãy thử lại trước khi đăng ký tham gia giải đấu.

Chưa chọn Bot và revision

Tên này được hiển thị trong danh sách và kết quả của giải đấu.
Yêu cầu sẽ ghim đúng phiên bản bạn chọn; các chỉnh sửa sau đó không thay đổi yêu cầu này.

Yêu cầu đã được tiếp nhận

Đang đưa revision vào hàng đợi kiểm tra.

XÁC NHẬN THAO TÁC