Chủ đề RTS trò chơi AI


14

Tôi có một dự án để làm một game chiến thuật thời gian thực từ đầu. Tôi vẫn đang ở giai đoạn lập kế hoạch ban đầu, nhưng tôi đã lập trình một chút để xem cơ học.

Tôi biết cách lập trình. Tôi cũng có một ý tưởng tốt về cách tôi sẽ cấu trúc các lớp trò chơi và AI dựa trên quy tắc (máy trạng thái) cho người chơi máy tính.

Tôi muốn phát triển Học thuyết, sẽ đưa ra một hành vi cụ thể cho một đơn vị cụ thể (nhưng có thể được sử dụng trên nhiều đơn vị cùng một lúc), như Hướng đạo, Theo dõi Nhiệm vụ, giữ Vị trí (tấn công bất kỳ kẻ thù nào hoặc rút lui nếu bị áp đảo) , Vân vân...

Các học thuyết sẽ chỉ áp dụng cho các đơn vị, vì vậy nó sẽ có phối cảnh đơn vị và không được biết về toàn bộ sơ đồ trang web.

AI máy tính sẽ phân tích toàn bộ bản đồ có thể nhìn thấy và quyết định xã hội sẽ chỉ định mỗi đơn vị tùy thuộc vào một bộ quy tắc khác.

Tôi đang làm điều này trong C # với OpenGL.

Hiện tại, tôi không có nhiều, chỉ có một vài điều trong các thử nghiệm trước khi tôi bắt đầu thụ thai chính. Tôi có một vòng lặp trò chơi trong đó tất cả quá trình xử lý trò chơi (nơi tôi sẽ gọi là cập nhật, chiến đấu, kết xuất, v.v., lần này đến lần khác) sẽ xảy ra, nó được gọi rất thường xuyên nếu sự kiện Application.Idle.

Bây giờ, tôi đã tự hỏi. Vì sẽ có rất nhiều thứ cần xử lý trong gameloop, AI máy tính và các Đơn vị nên chọn hành động của chúng trong vòng lặp đó hay nó sẽ quá chậm?

Nếu tôi muốn tất cả mọi thứ đồng thời, tôi có nên tạo một Chủ đề riêng cho AI của máy tính không? Hoặc thậm chí một chủ đề riêng cho mỗi đơn vị?

Tôi không có nhiều kinh nghiệm với đa luồng. Điều gì sẽ là cách tiếp cận tốt nhất cho điều này?


Không liên quan - coi Ogre3D thay vì OpenGL?

Thật ra, không, tôi chưa bao giờ nghe về nó. Tôi đang sử dụng OpenGL vì đó là những gì tôi được dạy trong các lớp học. Ogre3D có thể làm 2D quá không? Tôi cho rằng nó có thể, nhưng chúng ta không bao giờ biết ...

Có, nó thậm chí có bộ công cụ GUI riêng (cegui). Ví dụ, TorchLight được xây dựng cùng với nó. Nó có thể giúp bạn tiết kiệm thời gian vì nó kết thúc tốt đẹp AROUND OpenGL. ogre3d.org/tikiwiki/MOGRE

"Hoặc thậm chí là một chủ đề riêng cho mỗi đơn vị" Địa ngục không. Chi phí của một chủ đề là quá lớn. Đối với một có bộ nhớ dành riêng cho ngăn xếp của luồng (1MB theo mặc định). Và chuyển đổi chủ đề là đắt tiền quá.

Câu trả lời:


3

"Từ đầu" có nghĩa là gì? Bạn có thể sử dụng một cái gì đó như XNA thay vì DirectX không?

Bạn nên hiển thị thứ gì đó trong khoảng từ 30 đến 60 khung hình mỗi giây để có chuyển động lỏng. Thực sự không cần phải có nhiều khung hình / giây.

Nếu kết xuất + logic mất ít hơn 16ms mà 60fps mang lại cho bạn, thì không cần phải có luồng AI.

Nếu bạn không có đủ thời gian giữa việc hiển thị các khung thì bạn sẽ phải suy nghĩ thực sự cẩn thận về những gì phải được cập nhật mỗi khung và những gì không.

Tôi dự đoán rằng phần "học thuyết" phải đơn giản và hiệu quả nhất có thể để có thể cập nhật mọi khung hình, ít nhất là cho các đơn vị có thể nhìn thấy và các đơn vị khác gần đó. Các đơn vị không ảnh hưởng trực tiếp đến các đơn vị hiển thị có thể được cập nhật ít thường xuyên hơn (và, tương ứng, với đồng bằng T lớn hơn).

AI chính có nhiều việc phải thực hiện hơn, vì nó phải xử lý tất cả các đơn vị trên bản đồ và tìm ra một chiến lược, do đó cần phải có hầu hết thời gian tính toán. Đây là ứng cử viên đầu tiên cho một chủ đề riêng biệt.

Lưu ý rằng bạn có thể muốn thêm một lớp khác giữa hai lớp, giống như AI ở cấp độ đội hình. Về cơ bản, AI của mỗi đơn vị cần đảm bảo rằng thiết bị phản ứng "thông minh" với tình huống trước mắt, vì vậy nó cần phải nhanh và nhạy. Đội hình AI chịu trách nhiệm cho các hành động "thông minh" của một số đơn vị, trải đều trong vài giây, giống như tìm một cây cầu nếu đội cần qua sông. Và AI chính sẽ chỉ đạo hành động của rất nhiều đội trong một khoảng thời gian dài.

Đặc biệt là nếu bạn không có nhiều kinh nghiệm, đừng làm xâu chuỗi nếu bạn không phải làm vậy. Điều này sẽ phức tạp vì nó không có thêm gánh nặng. Bạn có thể học đa luồng như một dự án riêng biệt hoặc như một phần mở rộng của dự án này một khi nó đang hoạt động trạng thái . Chúc may mắn!


0

Có một chủ đề riêng cho AI. Nhưng không phải cho mọi đơn vị vì nó sẽ tiêu tốn quá nhiều tài nguyên hệ điều hành và đồng bộ hóa sẽ là một cơn ác mộng.

Hãy chắc chắn rằng luồng AI sẽ tìm thấy cơ hội để thực thi. Đừng xem nhẹ, nếu chủ đề chính làm quá nhiều thứ, nó có thể không bao giờ tìm thấy cơ hội đó! Nếu bạn chỉ đơn giản ưu tiên cao hơn cho chủ đề AI, thì trò chơi sẽ trở nên không phản hồi, điều này không thể chấp nhận được.

Vì vậy, cẩn thận chọn các điểm và / hoặc sự kiện đồng bộ hóa trong vòng lặp chính và cho phép luồng AI hoàn thành các tính toán của nó trong khi luồng chính dừng lại. Ví dụ: nếu đơn vị người dùng nhìn thấy một đơn vị AI khác, hãy đồng bộ hóa nó, để đơn vị của bạn nhìn thấy một đơn vị được cập nhật ngược lại.


0

Tôi cũng đang làm việc trên một trò chơi RTS từ đầu. Tôi chưa thử nghiệm, nhưng ý tưởng của tôi là chạy AI đơn vị trong vòng lặp trò chơi chính cho tất cả các đơn vị hiện đang hiển thị cho người chơi (trong phần màn hình mà người chơi thực sự nhìn thấy hoặc gần viền của màn hình đó ), vì nhiều khả năng người chơi sẽ di chuyển màn hình một chút.

Các đơn vị khác được kiểm tra trong một luồng riêng biệt và tôi có hai ưu tiên: 1. Các đơn vị ở những nơi hiển thị cho người dùng nếu anh ta di chuyển màn hình ở đó. 2. Các đơn vị ở trong các khu vực ẩn (chưa được khám phá và "sương mù chiến tranh").

Đối với các đơn vị trong mức ưu tiên giây, tôi chạy vòng lặp ít thường xuyên hơn và bù lại bằng cách di chuyển chúng hồi cứu khi cần thiết.


1
Âm thanh rất phức tạp.

Ý tưởng của bạn nghe có vẻ ổn trừ phần đầu tiên về việc di chuyển các đơn vị vào và ra khỏi vòng lặp trò chơi chính. Tất cả AI phải được thực hiện trong vòng lặp riêng của nó, nơi bạn có thể chọn bỏ qua vòng lặp mỗi xlần lặp trên các đơn vị ưu tiên thấp.
Olhovsky

0

Cho dù bạn có cần đa luồng hay không, có lẽ nên chuẩn bị AI để được đa luồng.

Chủ đề chính của bạn sẽ cập nhật thế giới, đánh dấu vào vật lý, v.v., và sau đó sẽ đưa vào cấu trúc dữ liệu đại diện cho quan điểm của AI về thế giới: vị trí của các đơn vị, trạng thái tài nguyên, v.v. hơn là chỉ giữ con trỏ cho họ Điều này đôi khi được gọi là một điểm đồng bộ hóa.

Truyền cấu trúc dữ liệu này cho AI và chỉ cho phép nó suy luận về nội dung của cấu trúc này. Nếu bạn thấy AI cần thêm thông tin, hãy thêm nó vào cấu trúc. Theo cách nói của AI, điều này thường được gọi là bảng đen nhưng cũng có thể được gọi là bộ đệm. Không bao giờ để AI ghi vào bộ đệm, đầu ra phải thông qua cấu trúc dữ liệu riêng biệt.

Thiết lập này sẽ cho phép bạn song song trò chơi vì AI không còn phụ thuộc trực tiếp vào các hệ thống trò chơi khác. Những hệ thống đó không cần phải an toàn và bạn sẽ không bao giờ bị khóa. Bạn có thể chạy trình kết xuất một cách an toàn hoặc một cái gì đó trong khi AI quay đi.

Là một lợi ích thứ cấp, trong tương lai bạn có thể mở rộng bộ đệm bằng cách phân rã thông tin bạn nhận được từ các hệ thống khác theo thời gian, mô phỏng sự không chắc chắn thay vì kiến ​​thức chính xác.

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.