Tôi muốn xây dựng một trình phân tích cú pháp chung cho các hệ thống RPG kiểu bút và giấy. Một quy tắc có thể thường liên quan đến 1 đến N thực thể 1 đến N vai trò của súc sắc và tính toán các giá trị dựa trên nhiều thuộc tính của một thực thể.
Ví dụ:
Người chơi có STR 18, vũ khí hiện đang được trang bị của anh ta mang lại cho anh ta phần thưởng +1 STR nhưng là một con số DEX -1. Anh ta tấn công một thực thể quái vật và logic trò chơi bây giờ được yêu cầu để chạy một bộ quy tắc hoặc hành động:
Người chơi tung xúc xắc, nếu anh ta lấy ví dụ 8 trở lên (giá trị tấn công cơ bản anh ta cần vượt qua là một trong những thuộc tính cơ bản của anh ta!) Thì cuộc tấn công của anh ta rất thành công. Con quái vật sau đó tung xúc xắc để tính toán nếu cuộc tấn công xuyên qua lớp giáp của nó. Nếu có, thiệt hại được thực hiện nếu không cuộc tấn công đã bị chặn.
Bên cạnh các quy tắc toán học đơn giản cũng có thể có các ràng buộc như chỉ áp dụng cho một lớp người dùng nhất định (ví dụ: chiến binh vs thuật sĩ) hoặc bất kỳ thuộc tính nào khác. Vì vậy, điều này không chỉ giới hạn trong các hoạt động toán học.
Nếu bạn quen thuộc với các hệ thống RPG như Dungeon và Dragons, bạn sẽ biết tôi đang làm gì.
Vấn đề của tôi bây giờ là tôi không biết làm thế nào để xây dựng chính xác cách này tốt nhất có thể. Tôi muốn mọi người có thể thiết lập bất kỳ loại quy tắc nào và sau đó chỉ cần thực hiện một hành động như chọn người chơi và quái vật và chạy một hành động (thiết lập các quy tắc như một cuộc tấn công).
Tôi đang yêu cầu ít sự giúp đỡ hơn về phía cơ sở dữ liệu nhưng nhiều hơn về cách đưa ra cấu trúc và trình phân tích cú pháp để giữ cho quy tắc của tôi linh hoạt. Bằng cách này, ngôn ngữ được lựa chọn là php.
Chỉnh sửa tôi:
Hãy để tôi tinh chỉnh mục tiêu của mình: Tôi muốn tạo một giao diện thân thiện với người dùng (không yêu cầu ai đó phải học ngôn ngữ lập trình) để xây dựng các quy tắc trò chơi phức tạp hơn hoặc ít phức tạp hơn. Lý do đơn giản: Sử dụng cá nhân để không cần phải nhớ tất cả các quy tắc mọi lúc, chúng tôi chỉ đơn giản là không chơi thường xuyên và đó là một nút chặn để tìm kiếm chúng mỗi lần. Ngoài ra: Trông giống như một nhiệm vụ thú vị để làm và học một cái gì đó. :)
Những gì tôi đã thử cho đến nay: Chỉ nghĩ về một khái niệm thay vì lãng phí thời gian xây dựng một kiến trúc sai. Cho đến nay tôi có ý tưởng cho phép người dùng tạo ra nhiều thuộc tính như họ muốn và sau đó gán bao nhiêu thuộc tính mà họ muốn cho bất kỳ loại thực thể nào. Một thực thể có thể là một người chơi, một con quái vật, một vật phẩm, bất cứ thứ gì. Bây giờ khi tính toán một cái gì đó, dữ liệu được cung cấp cho trình phân tích quy tắc để trình phân tích quy tắc có thể thực hiện những việc như nếu Player.base_attack + dice (1x6)> Monster.armor_check rồi Monster.health - 1; Câu hỏi ở đây là về cách tạo trình phân tích cú pháp đó.
Chỉnh sửa II:
Dưới đây là một ví dụ về giá trị khá cơ bản nhưng để tính toán chính xác, có rất nhiều điều và biến khác nhau cần tính đến:
Phần thưởng tấn công cơ bản (Thuật ngữ) Phần thưởng tấn công cơ sở của bạn (thường được gọi là BAB bởi cộng đồng d20) là phần thưởng cuộn tấn công xuất phát từ cấp độ và cấp độ nhân vật. Phần thưởng tấn công cơ bản tăng ở các tỷ lệ khác nhau cho các lớp nhân vật khác nhau. Một nhân vật nhận được đòn tấn công thứ hai mỗi vòng khi phần thưởng tấn công cơ bản của anh ta đạt +6, phần ba với phần thưởng tấn công cơ bản là +11 hoặc cao hơn và phần tư với phần thưởng tấn công cơ bản là +16 hoặc cao hơn. Phần thưởng tấn công cơ bản thu được từ các lớp khác nhau, chẳng hạn như cho một nhân vật đa giác, ngăn xếp. Phần thưởng tấn công cơ bản của một nhân vật không cấp thêm bất kỳ đòn tấn công nào sau khi đạt +16, không thể nhỏ hơn +0 và không tăng do cấp độ lớp sau khi cấp độ nhân vật đạt đến 20. Một phần thưởng tấn công cơ sở tối thiểu là cần thiết cho một số chiến công nhất định.
Bạn có thể đọc nó ở đây http://www.dandwiki.com/wiki/Base_Attack_Bonus_(Term) bao gồm các liên kết đến các lớp và chiến công có quy tắc riêng để tính các giá trị cần thiết cho cuộc tấn công cơ sở.
Tôi bắt đầu nghĩ rằng việc giữ nó càng chung chung càng tốt cũng sẽ khiến cho việc phân tích quy tắc tốt được thực hiện khá khó khăn.
Func
s để khởi tạo trạng thái chương trình dựa trên các đối số làm khóa cho từ điển. Ngạc nhiên là tôi chưa bao giờ thấy bài đăng đó từ Yegge trước đây, rất tuyệt, cảm ơn vì đã chỉ ra nó.