Skip to main content

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

info

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

info

Đố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:

  1. 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 đó
  2. 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 đó
  3. 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

start

xiangqi_command

xiangqi_command

Được sử dụng bởi: start

standard_movement_command

standard_movement_command

Được sử dụng bởi: xiangqi_command

extended_movement_command

extended_movement_command

Được sử dụng bởi: xiangqi_command

extended_capture_command

extended_capture_command

Được sử dụng bởi: xiangqi_command

extended_check_command

extended_check_command

Được sử dụng bởi: xiangqi_command

extended_crossriver_command

extended_crossriver_command

Được sử dụng bởi: xiangqi_command

meta_command

meta_command

Được sử dụng bởi: xiangqi_command

extended_piece_position

extended_piece_position

Được sử dụng bởi: extended_movement_command, extended_capture_command, extended_check_command, extended_crossriver_command

piece

piece

Được sử dụng bởi: standard_movement_command, extended_movement_command, extended_capture_command, extended_check_command

general_piece

general_piece

Được sử dụng bởi: piece

cannon_piece

cannon_piece

Được sử dụng bởi: piece

horse_piece

horse_piece

Được sử dụng bởi: piece

elephant_piece

elephant_piece

Được sử dụng bởi: piece

soldier_piece

soldier_piece

Được sử dụng bởi: extended_crossriver_command, piece

rook_piece

rook_piece

Được sử dụng bởi: piece

advisor_piece

advisor_piece

Được sử dụng bởi: piece

vertical_relative_position

vertical_relative_position

Được sử dụng bởi: standard_movement_command, extended_relative_position

front_pos

front_pos

Được sử dụng bởi: vertical_relative_position

back_pos

back_pos

Được sử dụng bởi: vertical_relative_position

mid_pos

mid_pos

Được sử dụng bởi: vertical_relative_position

frontmid_pos

frontmid_pos

Được sử dụng bởi: vertical_relative_position

backmid_pos

backmid_pos

Được sử dụng bởi: vertical_relative_position

column_number

column_number

Được sử dụng bởi: standard_movement_command, extended_movement_command, extended_check_command, extended_piece_position

num_of_steps

num_of_steps

Được sử dụng bởi: standard_movement_command, extended_movement_command

movement_direction

movement_direction

Được sử dụng bởi: standard_movement_command, extended_movement_direction

forward_move

forward_move

Được sử dụng bởi: movement_direction

backward_move

backward_move

Được sử dụng bởi: movement_direction

sideways_move

sideways_move

Được sử dụng bởi: movement_direction

extended_relative_position

extended_relative_position

Được sử dụng bởi: extended_piece_position

left_pos

left_pos

Được sử dụng bởi: extended_relative_position

right_pos

right_pos

Được sử dụng bởi: extended_relative_position

leftmid_pos

leftmid_pos

Được sử dụng bởi: extended_relative_position

rightmid_pos

rightmid_pos

Được sử dụng bởi: extended_relative_position

extended_movement_direction

extended_movement_direction

Được sử dụng bởi: extended_movement_command

left_move

left_move

right_move

right_move

forwardleft_move

forwardleft_move

Được sử dụng bởi: extended_movement_direction

forwardright_move

forwardright_move

Được sử dụng bởi: extended_movement_direction

backwardleft_move

backwardleft_move

Được sử dụng bởi: extended_movement_direction

backwardright_move

backwardright_move

Được sử dụng bởi: extended_movement_direction

piece_tag

piece_tag

Được sử dụng bởi: extended_piece_position

circle_tag

circle_tag

Được sử dụng bởi: piece_tag

square_tag

square_tag

Được sử dụng bởi: piece_tag

x_tag

x_tag

Được sử dụng bởi: piece_tag

y_tag

y_tag

Được sử dụng bởi: piece_tag

z_tag

z_tag

Được sử dụng bởi: piece_tag

capture_symbol

capture_symbol

Được sử dụng bởi: extended_capture_command

check_symbol

check_symbol

Được sử dụng bởi: extended_check_command

cross_river_symbol

cross_river_symbol

Được sử dụng bởi: extended_crossriver_command

indirect_check_specifier

indirect_check_specifier

Được sử dụng bởi: check_specifier

direct_check_specifier

direct_check_specifier

Được sử dụng bởi: check_specifier

check_specifier

check_specifier

Được sử dụng bởi: extended_check_command

confirm_symbol

confirm_symbol

Được sử dụng bởi: meta_command

cancel_symbol

cancel_symbol

Được sử dụng bởi: meta_command

ask_for_draw_symbol

ask_for_draw_symbol

Được sử dụng bởi: meta_command

ask_for_change_side_symbol

ask_for_change_side_symbol

Được sử dụng bởi: meta_command

ask_for_takeback_symbol

ask_for_takeback_symbol

Được sử dụng bởi: meta_command

resign_symbol

resign_symbol

Được sử dụng bởi: meta_command

new_game_symbol

new_game_symbol

Được sử dụng bởi: meta_command