Chuẩn các lệnh cờ tướng
Tổng quan
Cờ tướng là một trò chơi dân gian của Việt Nam, trong đó luật và cú pháp đã được chuẩn hoá bới Liên đoàn cờ tướng Việt Nam (luật Liên đoàn). Tuy nhiên, luật Liên đoàn vẫn còn khá phức tạp, đặc biệt là đối với những người mới chơi cờ tướng. Vì vậy, để giúp cho việc chơi cờ tướng trở nên dễ dàng hơn, chúng tôi đã đề xuất một chuẩn mới cho cú pháp cờ tướng, với mục tiêu làm cho cú pháp càng đơn giản càng tốt. Dưới đây là một bộ chuẩn các lệnh, được viết theo cú pháp Parsing Expression Grammar, kế thừa từ bộ luật cờ tướng của Liên đoàn.
Trong chuẩn này, ngoài việc cú pháp tương thích với các lệnh đã nêu ở luật Liên đoàn, chuẩn còn xây dựng thêm các lệnh rút gọn, các lệnh mở rộng, giúp dễ dàng hơn trong việc biến đổi giọng nói sang lệnh cờ tướng, và các lệnh mở rộng được xây dựng để gần với logic tự nhiên hơn.
Các lệnh cờ tướng
Lệnh chuẩn
Trong chuẩn này, lệnh chuẩn được cố gắng làm cho giống nhất với các lệnh trong luật Liên đoàn. Tuy nhiên, vẫn có một thay đổi so với luật gốc để đơn giản hóa việc biến đổi giọng nói sang lệnh cờ tướng.
Thay đổi đó là: thứ tự của các cột là từ 1 đến 9, xét từ bên trái sang bên phải. Khác với chuẩn Liên đoàn là từ 9 đến 1, xét từ bên trái sang bên phải.
standard_movement_command = "std:" piece vertical_relative_position? column_number movement_direction (column_number / num_of_steps)
vertical_relative_position = front_pos / back_pos / mid_pos / frontmid_pos / backmid_pos
front_pos = "t"
back_pos = "s"
mid_pos = "g"
frontmid_pos = "tg"
backmid_pos = "sg"
piece = general_piece / soldier_piece / cannon_piece / horse_piece / elephant_piece / rook_piece / advisor_piece
general_piece = "G" / "Tg"
cannon_piece = "P"
horse_piece = "M"
elephant_piece = "T"
soldier_piece = "B"
rook_piece = "X"
advisor_piece = "S"
movement_direction = forward_move / backward_move / sideways_move
forward_move = "."
backward_move = "/"
sideways_move = "-"
column_number = [1-9]
num_of_steps = [1-9]
Lệnh mở rộng: di chuyển
Đối với các lệnh mở rộng, có 3 nguyên tắc được tuân theo để xác định nước đi nào sẽ được thực hiện:
- Nếu lệnh xác định được nhiều hơn 1 khả năng di chuyển → Không thực hiện lệnh đó
- Nếu chỉ định của lệnh có thể xác định được nhiều hơn 1 quân, tuy nhiên kết quả cuối cùng chỉ là 1 khả năng di chuyển → Thực hiện lệnh đó
- Các lệnh nếu bỏ qua một vài tham số cụ thể, sẽ chọn tất cả các quân thoả mãn điều kiện. Ví dụ:
- Tốt tiến, bên màu đỏ đọc → Chọn tất cả các con tốt bên đỏ → Thực hiện lệnh theo nguyên tắc 1. và 2.
extended_movement_command = "ext:" piece extended_piece_position extended_movement_direction (column_number / num_of_steps)?
extended_piece_position = (extended_relative_position / column_number / extended_relative_position column_number / piece_tag)?
extended_relative_position = vertical_relative_position / left_pos / right_pos / leftmid_pos / rightmid_pos
left_pos = "-t"
right_pos = "-p"
leftmid_pos = "-tg"
rightmid_pos = "-pg"
piece_tag = circle_tag / square_tag / x_tag / y_tag / z_tag
circle_tag = "#circle"
square_tag = "#square"
x_tag = "#x"
y_tag = "#y"
z_tag = "#z"
extended_movement_direction = movement_direction / forwardleft_move / forwardright_move / backwardleft_move / backwardright_move
left_move = "-t"
right_move = "-p"
forwardleft_move = ".-t"
forwardright_move = ".-p"
backwardleft_move = "/-t"
backwardright_move = "/-p"
Lệnh mở rộng: ăn quân
extended_capture_command = "ext:" (piece extended_piece_position?)? capture_symbol (piece extended_piece_position?)?
capture_symbol = "x"
Lệnh mở rộng: chiếu tướng
extended_check_command = "ext:" (piece extended_piece_position?)? check_symbol check_specifier? column_number?
check_symbol = "+"
check_specifier = indirect_check_specifier / direct_check_specifier
indirect_check_specifier = "?"
direct_check_specifier = "!"
Lệnh mở rộng: sang sông
extended_crossriver_command = "ext:" soldier_piece extended_piece_position? cross_river_symbol
cross_river_symbol = ".s"
Lệnh meta (siêu lệnh)
meta_command = "meta:" (confirm_symbol / cancel_symbol / ask_for_draw_symbol / ask_for_change_side_symbol / ask_for_takeback_symbol / resign_symbol / new_game_symbol)
confirm_symbol = "ok"
cancel_symbol = "ko"
ask_for_draw_symbol = "="
ask_for_change_side_symbol = "><"
ask_for_takeback_symbol = "<"
resign_symbol = "$"
new_game_symbol = "^"
Cú pháp
start
xiangqi_command
Được sử dụng bởi: start
standard_movement_command
Được sử dụng bởi: xiangqi_command
extended_movement_command
Được sử dụng bởi: xiangqi_command
extended_capture_command
Được sử dụng bởi: xiangqi_command
extended_check_command
Được sử dụng bởi: xiangqi_command
extended_crossriver_command
Được sử dụng bởi: xiangqi_command
meta_command
Được sử dụng bởi: xiangqi_command
extended_piece_position
Được sử dụng bởi: extended_movement_command, extended_capture_command, extended_check_command, extended_crossriver_command
piece
Được sử dụng bởi: standard_movement_command, extended_movement_command, extended_capture_command, extended_check_command
general_piece
Được sử dụng bởi: piece
cannon_piece
Được sử dụng bởi: piece
horse_piece
Được sử dụng bởi: piece
elephant_piece
Được sử dụng bởi: piece
soldier_piece
Được sử dụng bởi: extended_crossriver_command, piece
rook_piece
Được sử dụng bởi: piece
advisor_piece
Được sử dụng bởi: piece
vertical_relative_position
Được sử dụng bởi: standard_movement_command, extended_relative_position
front_pos
Được sử dụng bởi: vertical_relative_position
back_pos
Được sử dụng bởi: vertical_relative_position
mid_pos
Được sử dụng bởi: vertical_relative_position
frontmid_pos
Được sử dụng bởi: vertical_relative_position
backmid_pos
Được sử dụng bởi: vertical_relative_position
column_number
Được sử dụng bởi: standard_movement_command, extended_movement_command, extended_check_command, extended_piece_position
num_of_steps
Được sử dụng bởi: standard_movement_command, extended_movement_command
movement_direction
Được sử dụng bởi: standard_movement_command, extended_movement_direction
forward_move
Được sử dụng bởi: movement_direction
backward_move
Được sử dụng bởi: movement_direction
sideways_move
Được sử dụng bởi: movement_direction
extended_relative_position
Được sử dụng bởi: extended_piece_position
left_pos
Được sử dụng bởi: extended_relative_position
right_pos
Được sử dụng bởi: extended_relative_position
leftmid_pos
Được sử dụng bởi: extended_relative_position
rightmid_pos
Được sử dụng bởi: extended_relative_position
extended_movement_direction
Được sử dụng bởi: extended_movement_command
left_move
right_move
forwardleft_move
Được sử dụng bởi: extended_movement_direction
forwardright_move
Được sử dụng bởi: extended_movement_direction
backwardleft_move
Được sử dụng bởi: extended_movement_direction
backwardright_move
Được sử dụng bởi: extended_movement_direction
piece_tag
Được sử dụng bởi: extended_piece_position
circle_tag
Được sử dụng bởi: piece_tag
square_tag
Được sử dụng bởi: piece_tag
x_tag
Được sử dụng bởi: piece_tag
y_tag
Được sử dụng bởi: piece_tag
z_tag
Được sử dụng bởi: piece_tag
capture_symbol
Được sử dụng bởi: extended_capture_command
check_symbol
Được sử dụng bởi: extended_check_command
cross_river_symbol
Được sử dụng bởi: extended_crossriver_command
indirect_check_specifier
Được sử dụng bởi: check_specifier
direct_check_specifier
Được sử dụng bởi: check_specifier
check_specifier
Được sử dụng bởi: extended_check_command
confirm_symbol
Được sử dụng bởi: meta_command
cancel_symbol
Được sử dụng bởi: meta_command
ask_for_draw_symbol
Được sử dụng bởi: meta_command
ask_for_change_side_symbol
Được sử dụng bởi: meta_command
ask_for_takeback_symbol
Được sử dụng bởi: meta_command
resign_symbol
Được sử dụng bởi: meta_command
new_game_symbol
Được sử dụng bởi: meta_command