Tôi chỉ xem xét triển khai đó và tôi thấy mình tự hỏi tại sao rất nhiều mã là cần thiết cho một cái gì đó tương đối đơn giản.
Từ những gì bạn nói, bạn muốn có một cách đơn giản để sáng tác hành vi. Một hành vi ở đây, tôi đoán, là một ánh xạ từ trạng thái đến 0 hoặc nhiều hành động hơn bởi một tác nhân. Bạn có thể mô hình hóa điều này rất dễ dàng bằng cách sử dụng C# lambdas. Ví dụ:
Action Selector(Func<bool> cond, Action ifTrue, Action ifFalse) {
return() => { if cond() then ifTrue() else ifFalse() };
}
Action Sequencer(Action a, Action b) {
return() => { a(); b(); }
}
Lá của cây là những hành động đơn giản làm điều gì đó phù hợp với tiểu bang. Bạn "chạy" một cái cây đơn giản bằng cách thực hiện nó.
Nếu bạn muốn trở nên lạ mắt, bạn có thể tham số hóa lược đồ này để làm cho trạng thái rõ ràng.
Hy vọng điều này sẽ hữu ích.
---- Phụ Lục ----
Jason hỏi cho một ví dụ về làm thế nào bạn có thể sử dụng phương pháp này, vì vậy đây là một cách đơn giản "AI" tuần tra bảo vệ dụ (tôi giả sử WorldState tương ứng với một mô tả về môi trường tại thời điểm cây hành vi được đánh giá):
Func<bool> ifPlayerIsInSight =() => ...true iff WorldState shows guard can see player...;
Action shootAtPlayer =() => { ...aim guard's weapon at player and fire... };
Func<bool> ifUnderFire =() => ...true iff WorldState shows guard hears player gunfire...;
Action takeCover =() => { ...guard runs for nearest shelter... };
Action walkBackAndForthGuardingDoorway =() => { ...default guard patrol behaviour... };
Action patrollingGuardBehaviour =
Selector(ifPlayerIsInSight, shootAtPlayer,
Selector(ifUnderFire, takeCover,
walkBackAndForthGuardingDoorway));
Để bảo vệ làm điều gì đó, chỉ cần gọi patrollingGuardBehaviour()
. Lưu ý rằng các phân số và thử nghiệm khác nhau có thể được thực hiện như các phương thức với các chữ ký bên phải chứ không phải là inline như lambdas. Bạn có thể thêm các bộ kết hợp khác vào Selector
và Sequencer
, ví dụ: để có hoạt động song song.
Thư viện bạn đã đề cập trên code.google.com đã được thêm gần một năm trước và được cập nhật lần cuối hai tuần sau đó. Nếu bạn có kế hoạch sử dụng nó, bạn có thể sẽ không tìm thấy bất kỳ ví dụ nào, có thể tốt hơn nếu bạn tìm kiếm một thư viện khác hoặc phát triển thư viện của riêng bạn. – tbridge