{@: ok, hum nay mình bàn về AI trong GM. làm AI cho 1 game với GM không cần gì quá cao siêu. trước tiên mình cần vạch rõ AI này cho thể loại game gì. Ví du: 1 game hành động 2D platform OK, tiếp theo cần xác định AI có bao nhiêu trạng thái (TT) (đừng yên, đi bộ, chạy, nhảy lên, rớt xuống..) ta sẽ đặt hằng số cho các trạng thái đó với 1 giá trị nhất định ví dụ: TT đứng yên là ai_stand = 1, chạy là ai_run = 2 và các trạng thái này có cần phải thực hiện đồng thời hay không. thí dụ vừa thở vừa chạy. vậy ta cần 1 mảng đơn giản để chỉ ra 2 trạng thái đồng thời của AI: status[0] = ai_run; status[1] = ai_breath sau đó dùng câu lệnh điều kiện switch để chọn tra trong những trạng thái nhất định thì phải làm gì, sẽ là 2 command switch nếu sẽ có 2 trạng thái xảy ra đồng thời. ví dụ: Mã: switch(status[0]){ case ai_run: sprite_index = spr_char_run break; } Song song với các trạng thái ta sẽ có các hành động(action) của AI (truy tìm mục tiêu, chờ, tấn công, phòng thủ .....) cũng như status, ta đưa hết các hành động sẽ có qua hằng số. và sẽ có 1 mảng action nếu như AI có thể có nhiều hành động cùng lúc ( vừa nhảy vừa bắn, vừa chạy vừa bắn); ở đây với game hành động thì có thể chia ra 2 mảng như sau: action[0] cho biết các hành động bình thường như tìm diệt, né tránh, và action[1] cho hành động tấn công, vì thường các nhân vật có thể vừa né vừa tấn công hay các hành động bò trườn + tấn công, như thế sẽ thật hơn. cũng như phần trạng thái, cần 2 command switch. tiếp tục: nếu 1 game bắn súng, AI sẽ có thể được diễn tả như sau. - nó có mắt quan sát với chỉ 1 tia nhìn (đơn giản) hay 1 khoảng nhìn như commandos, và tiếp theo vũ khí của nó cũng có 1 tia nhìn. - nó luôn luôn được đặt trong trạng thái tìm kẻ thù ( nếu có các biểu hiện lạ như tiếng súng, vết đạn, máu nó sẽ truy tìm theo hướng phát ra) ta đặt các obj vết đạn, máu có chứa 1 giá trị là hướng xuất phát của nó, ví dụ vết đạn có dir_start = 360, xStart = 200) AI khi bắt gặp vết đạn đầu tiên sẽ kiểm tra 2 giá trị kia để có thể cho ra hướng chính xác cần phải đi, sau đó có thể set 1 biến của vết đạn để cho biết AI đã kiểm tra vết đạn này rồi, lần sau ko kiểm tra nữa - 1 khi AI phát hiện kẻ thù( ta dùng collision_line để kiểm tra AI có nhìn thấy mục tiêu hay không) tiếp đó sẽ kiểm tra xem hướng bắn có bị cản không, thường thì con mắt nằm cao hơn 1 khoảng với tầm tấn công của vũ khí, nếu tầm bắn không cản và mục tiêu nằm trong tầm bắn thì action[1] = ai_attack, tức ngụ chỉ AI phải tấn công, nếu tìm thấy mục tiêu nhưng hướng bắn bị cản thì action[0] = ai_huntTarget ngụ ý AI phải truy tìm mục tiêu. nếu sau 1 khoảng thời gian mà AI vẫn không tìm thấy hướng bắn hay mục tiêu đã ẩn nấp thì AI sẽ quay trờ lại vị trí ban đầu với action[0] = ai_search tất cả đều rất đơn giản để làm chỉ với các câu lệnh if else đơn giản nhất. để làm AI phong phú hơn thì bạn phải tìm ra các hành động mới hơn, và cách thức xử lý tình huống, mức độ ưu tiên cho các hành động của AI ví dụ AI nhát thì ưu tiên né tránh (khôn đó ^^) còn AI ham oánh thì ưu tiên tấn công (ngu!!) khi gặp trường hợp là bị bắn xối xả ( ta có thể dùng 1 biến hit của AI để đếm số lần tấn công này để biết bị tấn công ít hay nhiều, tuy nhiên biến hit này sau 1 thời gian sẽ reset = 0, có thể dùng alarm ) ok, nói thì dễ nhưng làm chỉ ..... mắc công thôi, chứ chẳng khó lắm đâu. Tất nhiên những AI như nói trên sẽ có rất nhiều phép toán cần thực hiện, nếu quá nhiều con AI thế này thì game chắc chắn sẽ giảm tốc 1 cách thê thảm, vì vậy với những enemy thường thì ta làm nó ngu ngu thôi ^^. còn tên boss thì ráng nghĩ ra nhiều chiêu hay hay. tôi có gửi kèm 1 con BOT, tuy chưa hoàn thiện nhưng có lẽ sẽ đủ minh họa cho bài viết trên http://forums.gamevn.com/attachment.php?attachmentid=44848&d=1157720819 :@}
chính xác rồi đó , game em luôn có dòng lệnh if , else , AI đa số đều là if else ngay như game anh hùng ko gian demo mà bác vodich nói em ăn cắp từ example khác phần AI , thực sự giải thuật ra rất dễ chỉ với if else , ponit_dítance , íntance _number ....
{@: chỉ là bàn luận cơ bản thôi mà, chỉ mang tính hướng giải quyết chứ ko giúp gì nhiều, bản thân phải tự nỗ lực thôi bất kì cái gì mà liên quan đến lập trình thì các câu lệnh điều kiện luôn là câu lệnh phải xài nhiều nhất, không riêng gì vấn đề AI. tôi có gửi kèm 1 con BOT, tuy chưa hoàn thiện nhưng có lẽ sẽ đủ minh họa cho bài viết trên bấm F1 để thêm thông tin :@}
Hơ hơ , mỗi đoạn code thế thì làm được cái gì ? Ví dụ mà !! Bác Mozzilla nick là gì ? Mình nhờ bác thiết kế vài cái spite được ko (chỉ là hình ảnh thôi , ko phải là game đâu , coi như là thuê ko trả lương :wink: ) Bác vodich có thể ví dụ thêm về AI của Topdown ko ? Cái này nó góc nhìn hơi điêu nên chỉnh AI của nó hơi khó !! :whew:
to moliza tầm bậy , đoạn script đó chả làm được gì đâu . với rpgxp thì các cậu có thể copy trọn vào game . nhưng với GM thì đa số đều phải tự viết từ đầu tới cuối , những cái copy chỉ là nhwungx đoạn hiệu ứng nhỏ . muốn làm GM thì pahir luyện tập kinh lắm , luyện tập xong thì thấy dễ . khakha
Hic cái radar của tui làm đơn giản hơn của GM, mà còn copy được về xài nữa chứ .: Game Maker :. = Khoai vật. Đoạn mã đấy phải làm đc gì chứ. Có vẻ giống coltrol switch trong RMXP
Biết cách thì copy thì đc thôi,hiệu ứng nhỏ quái gì,real time lighting and shadow mà nhỏ. Uhm,gần gần như vậy,switch case khá phổ biến trong các ngôn ngữ mà.Chỉ có thằng Python hâm là if elif như đúng rồi. Với lại ai lại đem AI so sánh với radar bao giờ,radar trong GM script cũng có một mẩu thôi mà vì trò nào thì radar cũng gần như nhau,còn AI thì đương nhiên phải phức tạp rồi,mỗi lúc một kiểu. Cái script trên của vodich là ví dụ minh họa khi nó đang ở state run thì chuyển hình của nó thành run thôi,còn làm trò gì tiếp thì tùy game chớ.