Mới tạo AI - bắt đầu từ đâu? [đóng cửa]


58

Tôi chưa quen với lập trình trò chơi và đang cố gắng tạo ra một trò chơi không gian 2d từ trên xuống cơ bản với 2 tàu không gian chiến đấu với nhau. Tôi đang làm tốt với con tàu không gian do người dùng điều khiển, nhưng không biết làm thế nào để bắt đầu lập trình AI. Là phương pháp / mẫu nhất định tốt hơn cho tình huống này? Tôi thậm chí sẽ bắt đầu từ đâu?


1
Đây là slide của tôi về AI từ khóa học tôi đã thực hiện: sol.gfxile.net/gpc/05ai.pdf
Jari Komppa

4
nếu báo cáo. rất nhiều trong số họ.
giảm tốc

Câu trả lời:



27

Nếu đây là lần đầu tiên bạn phát triển AI, bạn không phải lo lắng về những thứ như mô hình trạng thái, toán học hành vi hoặc thậm chí có được một cuốn sách về chủ đề này.

Bạn thực sự có thể thoát khỏi một cái gì đó như thế này:

if( targetInRange == true )  
{
    FireAtTarget();
}
else if( bulletComingTowardsMe == true )
{
    MoveAwayFromBullet();
}
else
{
    WanderAroundAimlessly();
}

Khía cạnh chính của việc làm cho AI chính xác là bằng cách suy nghĩ về những hành vi mà bạn muốn nhân vật có và cách thực hiện điều này một cách thực tế. Vì vậy, đối với một kẻ thù tàu vũ trụ cơ bản, tôi tưởng tượng những hành động khả thi mà nó có thể thực hiện sẽ là:

  • Di chuyển xung quanh
  • Ngọn lửa, cháy
  • Chạy trốn

Và khi nào những hành động này có thể xảy ra?

  • Di chuyển xung quanh - Không có gì khác để làm
  • Lửa - Khi tôi phát hiện kẻ thù
  • Chạy đi - Khi tôi không đủ sức khỏe / Khi tôi đang cháy / v.v.

Sau khi bạn đã thực hiện điều này do số lượng "trạng thái" thấp mà nhân vật của bạn có thể ở trong đó, bạn có thể sử dụng một câu lệnh if đơn giản như câu trên. Sau đó tôi sẽ khuyên bạn nên xem Hành vi chỉ đạo vì đây là những hành vi rất đơn giản để thực hiện và có thể dẫn đến chuyển động thực sự tốt.

Có thể tìm thấy nhiều hơn ở đây: http://www.red3d.com/cwr/steer/
Và tôi chắc chắn sẽ giới thiệu cuốn sách Lập trình trò chơi AI của Mat Buckland Ví dụ , đặc biệt là khi bạn bắt đầu.

Khi bạn thực sự thoải mái với những điều này, tôi sẽ đề nghị xem xét các Mô hình Chiến lược và Bang.

Vấn đề là bắt đầu nhỏ và đơn giản. Đừng lo lắng về tất cả các điều khoản mà mọi người cứ loay hoay về các FSM và các mẫu thiết kế và bất cứ điều gì. Thiết kế và xây dựng trước hết, sau đó lo lắng về cách bạn có thể cải thiện nó bằng cách sử dụng các phương pháp hoặc tiêu chuẩn hiện có.

Mong rằng sẽ giúp!


@Fuu Chúc mừng cho người bạn chỉnh sửa :)
Ray Dey

9

Bạn có thể muốn xem OpenSteer và tài liệu Hành vi chỉ đạo đi kèm với nó. Mã nguồn không phải là cấp độ mới bắt đầu, nhưng các khái niệm đằng sau nó sẽ cung cấp cho bạn một số ý tưởng hay.


Có phải mọi người sử dụng opensteer trong các trò chơi hoặc nhiều hơn cho mô phỏng?
jle

Tôi ít nhất đang cố gắng sử dụng nó trong một trò chơi đang được phát triển. Nó hoạt động tốt cho tôi cho đến nay. Tôi tin rằng tác giả đã phát triển phần lớn trong khi làm việc cho nhóm Playstation tại Sony - Có khả năng nó đã biến nó thành một số trò chơi. MobyGames liệt kê anh ta trên các khoản tín dụng của JohnMadden Football và một trong những trò chơi Giải trí phù hợp với Larry.
AShelly

FreeOrion đang sử dụng OpenSteer trong công cụ chiến đấu chiến thuật của mình.
Mike Strobel

1
+1 Để đề cập đến opensteer. Nếu bạn muốn xem một số ví dụ tuyệt vời về việc ghép các hành vi rất đơn giản lại với nhau để tạo thành một thứ gì đó trông rất phức tạp và phức tạp. Kiểm tra hành vi chỉ đạo! Google, "Boids" và xem xét một số cách sử dụng tuyệt vời. Nó không im lặng những gì bạn muốn, nhưng nó sẽ cho bạn thấy rằng sự đơn giản đến phức tạp
onedayitwillmake

9

Bạn có thể muốn xem mẫu thiết kế Chiến lược . Về cơ bản hãy viết ra những chiến lược cơ bản giống nhau về cách các con tàu sẽ hành xử:

  • Tiến lại gần mục tiêu
  • Mục tiêu tấn công
  • Chạy trốn khỏi mục tiêu
  • Hướng tới tăng sức mạnh
  • Sử dụng tăng sức mạnh

Sau đó, bạn sẽ sử dụng logic (máy trạng thái) để lựa chọn giữa các chiến lược này. Ví dụ: Nếu khiên tàu giảm xuống dưới 50%, sau đó chạy trốn khỏi mục tiêu và tiến về phía tăng sức mạnh / vật phẩm hồi máu, v.v.


1
Vì vậy, mỗi lần qua vòng lặp trò chơi, nó quyết định 'chiến lược' nào được ưu tiên và sau đó thực hiện điều đó?
jle

@jle Khá nhiều. Vì vậy, mỗi chiến lược của bạn sẽ được chia thành các lớp riêng, giữ cho mã của bạn được tổ chức.
Bryan Denny

7

Tôi có thể đề nghị bạn mua cuốn sách Trí tuệ nhân tạo cho các trò chơi của Ian Millington - thật tuyệt vời! :) http://www.ai4g.com/

Mã nguồn là tại Github - giấy phép MIT.

Tất nhiên, nếu bạn không sử dụng C / C ++, thì điều này có thể ít liên quan hơn.

Nhưng thực sự là một giới thiệu tuyệt vời về thế giới của sự ngu ngốc / trí thông minh nhân tạo.

Những thứ bạn sẽ cần từ nó là máy lái và trạng thái. Cho người mới bắt đầu.


2

Một số lời khuyên thiết thực nếu bạn dùng máy trạng thái: hãy cẩn thận với megastate.

Thật hấp dẫn khi có trạng thái "chạy trốn" xử lý việc đặt vị trí chạy trốn, đặt tốc độ mục tiêu cao, xóa tất cả các mục tiêu, v.v. Thay vào đó, có nhiều máy trạng thái, mỗi bộ điều khiển một hoặc một vài điều khiển tàu - ví dụ như máy trạng thái xử lý chọn vị trí mục tiêu, máy xử lý súng, v.v.

Điều này có vẻ ngu ngốc, vì bạn phải thêm các trạng thái chạy trốn vào từng máy riêng lẻ, nhưng vì bạn bị hạn chế chỉ một hoặc hai đầu ra, trạng thái của bạn kết thúc rất nhỏ nên điều này không thành vấn đề.

Ngoài ra, vì mỗi điều khiển hiện nằm dưới sự kiểm soát của từng cá nhân, cuối cùng bạn có thể chọn vị trí mục tiêu chạy trốn trong khi vẫn có trạng thái tấn công kiểm soát súng của bạn. Bạn có thể oanh tạc kẻ thù trong khi vẫn bảo toàn sức mạnh động cơ vì rò rỉ chất làm mát. Bạn có thể bẻ lái để tránh va chạm trong khi vẫn vứt bỏ các biện pháp đối phó. Tất cả những điều này là không thể với một máy trạng thái bao gồm tất cả.


2

Toán học hành vi cho trò chơi AI

Thêm cuốn sách này vào danh sách các điểm khởi đầu để học lập trình AI. Với sự tập trung vào quan sát và thực hiện hành vi thay vì các thuật toán của ứng dụng hạn chế, tôi tin rằng nó rất phù hợp với nhiệm vụ.


1

Làm thế nào để tạo ra AI là một câu hỏi khó, bởi vì nó bao gồm nhiều phần:

  • Bạn chọn một kiến ​​trúc / mô hình chung cho AI của bạn. Có dựa trên kịch bản không? Nó sẽ sử dụng quy hoạch? Đây có phải là một FSM đơn giản hay bạn thích BT hơn?
  • Sau đó, bạn áp dụng các mô hình này với một bộ công cụ / triển khai cụ thể.
  • Bây giờ, bạn còn lại với các lựa chọn thiết kế trò chơi, vì bạn phải nghĩ về các hành vi mà kiến ​​trúc của bạn sẽ sử dụng.

Các áp phích khác đề xuất những cuốn sách tuyệt vời và tôi thích AI4Games được đề xuất bởi jacmoe, mặc dù nó khá chung chung về các phần (như rất nhiều sách, tất nhiên là dễ hiểu).

Tất nhiên, mỗi loại trò chơi có nhu cầu cụ thể của nó và trò chơi arcade / game bắn súng không cần kiến ​​trúc phức tạp để hỗ trợ lối chơi thú vị. Các lib chỉ đạo đơn giản sẽ thực hiện công việc như là nền tảng của hành vi đó, và sau đó bạn thêm chi tiết cho nhiều loại kẻ thù khác nhau (một số, bắn định kỳ, một số bắn bằng cách dự đoán chuyển động của người chơi, một số lần lượt để đối mặt với kẻ thù, những người khác có thể phối hợp các cuộc tấn công của họ, vv).

  • Tôi nghĩ rằng cách tốt nhất để tìm hiểu về mã hóa trò chơi (AI) là nhìn vào mã chạy tốt. Vì vậy, hãy khám phá ohloh.net và github và tìm kiếm các dự án FOSS hiện có!
  • Tất nhiên, bạn có thể chọn phần khó và chơi một trò chơi hiện có (nhưng đơn giản). Hãy thử đảo ngược hành vi và nghĩ "Tôi sẽ thiết kế cái này như thế nào?". Tất nhiên, các gợi ý luôn có ích, và đó có lẽ là lý do tại sao bạn hỏi ở đây tại gamedev.SE!
  • Một cái gì đó ở giữa quá nhìn vào các game bắn súng hiện có trong các diễn đàn GameMaker! Bạn có thể tìm thấy rất nhiều kịch bản đơn giản sẽ thực hiện các mẹo! ;)

1

Hãy suy nghĩ về những gì bạn làm khi bạn chơi trò chơi. Hãy tự hỏi mình một số câu hỏi.

  • Tôi cần thông tin gì để có thể đưa ra quyết định?
  • Khi nào tôi phản ứng với những thay đổi?
  • Mục tiêu "dài hạn" của tôi trong phiên chơi cụ thể này là gì?

Sau đó, những gì tôi làm là để AI nhìn vào sân chơi và lập danh sách các hành động hoặc chuyển động có thể có mà AI có thể thực hiện dựa trên những câu hỏi đó. Tôi xếp hạng và sắp xếp các động tác này với một "yếu tố thông minh". Sau đó, nó đơn giản như chọn và thực hiện một chuyển động / hành động dựa trên sự kết hợp ngẫu nhiên và bất kỳ mức độ khó nào mà người chơi đã chọn khi bắt đầu trò chơi.

Sau đó, sau 500 mili giây, tôi làm lại.

Nó không có bất kỳ khả năng học tập hay bất cứ điều gì nhưng với đủ điều chỉnh, nó có thể khá thuyết phục, đó là tất cả những gì thực sự quan trọng

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.