Mẫu thiết kế quy tắc / xác nhận


8

Những mẫu thiết kế nào có thể được sử dụng để tạo ra một hệ thống quy tắc / xác nhận cho một trò chơi như cờ vua (đây chỉ là một ví dụ đơn giản, trò chơi thực tế cần nhiều bộ quy tắc khó hơn)

Tôi đã đọc một số câu hỏi trên trang web này và không tìm thấy câu trả lời kết luận cũng như câu trả lời chỉ cho tôi đi đúng hướng.

Hệ thống này sẽ yêu cầu như sau:

  • Mọi đối tượng có các quy tắc được áp dụng cho nó nên thực hiện một giao diện cụ thể với một phương thức là điểm khởi đầu để xác thực
  • Quy tắc nên được áp dụng theo 2 bước: đầu tiên, nó cần được xác nhận (có thể cầm đồ A di chuyển sang bình phương D4), nếu đúng thì thực hiện phương thức A nếu sai thì thực hiện phương thức B
  • Mỗi đối tượng có thể có nhiều quy tắc cần được áp dụng theo một trình tự cụ thể. Khi quy tắc 1 kết thúc, quy tắc 2 sẽ bắt đầu xác thực, v.v.
  • Mỗi quy tắc riêng biệt (ví dụ: chỉ có thể di chuyển 1 hình vuông, chỉ có thể di chuyển theo đường chéo, v.v.) phải ở trong lớp riêng của nó và phải được sử dụng lại và áp dụng trên các đối tượng cần quy tắc.
  • Lưu ý rằng điều này sẽ được sử dụng trong một trò chơi nhiều người chơi vào phần phụ trợ
  • Lưu ý rằng mọi quy tắc đều cần nhiều đối tượng để kiểm tra tính hợp lệ của nó, ví dụ, thông thường, một con tốt có thể di chuyển 1 ô vuông, bây giờ hình vuông tiếp theo trên bảng trò chơi được lấp đầy bởi một con tốt của đối thủ của bạn. Kết quả: cầm đồ của bạn không thể di chuyển. Con tốt nên bao gồm các vị trí cầm đồ khác, hoặc bảng trò chơi trong xác nhận của nó.

Một từ khác cho các quy tắc này sẽ là giới hạn hành vi.


Câu trả lời:


3

Hãy nghĩ về một trò chơi như một chuỗi các trạng thái , được phân tách bằng các bước di chuyển . Mỗi khi người chơi thực hiện di chuyển, một trạng thái mới được tạo ra.

nhập mô tả hình ảnh ở đây
(Nó giống như truyện tranh XKCD này !)

Làm sao

Tạo một lớp Move, đại diện cho một di chuyển được thực hiện bởi một người chơi . (Trong Reversi, một mô tả đầy đủ là một bộ tọa độ bảng trong đó sẽ đặt một quân cờ. Trong Cờ vua, tọa độ gốc và đích là đủ.)

Tạo một lớp GameState, đại diện cho trạng thái của trò chơi bất cứ lúc nào . (Trong Reversi, một mô tả đầy đủ sẽ là nội dung của bảng và lần lượt là của người chơi. Trong Cờ vua, bạn cũng cần lưu trữ xem liệu mỗi người chơi có thể vào lâu đài hay hoàng hậu hay không.)

Bây giờ, bạn có thể có thể tưởng tượng việc GameStatecó một isMoveLegal(Move)phương pháp. Rốt cuộc, nó chứa tất cả thông tin cần thiết để đưa ra quyết định.

Tại sao

Thiết kế này tách biệt rõ ràng logic quy tắc, giảm phụ thuộc giữa các thành phần.

Nó cũng làm cho AI dễ dàng! Bạn có thể tạo ra tất cả các chuyển động có thể từ a GameState, kiểm tra xem chúng có hợp pháp không, tạo thêm nhiều GameStatetừ những thứ đó và về cơ bản xây dựng một cây mà bạn có thể sử dụng cho minimax , có lẽ với việc cắt tỉa alpha-beta .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.