ใหม่สำหรับการสร้าง AI - จะเริ่มที่ไหนดี [ปิด]


58

ฉันยังใหม่กับการเขียนโปรแกรมเกมและกำลังพยายามสร้างเกมบนพื้นที่บนลงล่างแบบ 2d พร้อมกับยานอวกาศ 2 ลำที่ต่อสู้กัน ฉันทำได้ดีกับยานอวกาศควบคุมของผู้ใช้ แต่ไม่รู้ว่าจะเริ่มเขียนโปรแกรม AI ได้อย่างไร มีวิธีการ / รูปแบบบางอย่างที่ดีกว่าสำหรับสถานการณ์นี้หรือไม่? ฉันจะเริ่มต้นที่ไหนดี


1
นี่คือสไลด์ของฉันเกี่ยวกับ AI จากหลักสูตรที่ทำ: sol.gfxile.net/gpc/05ai.pdf
Jari Komppa

4
ถ้างบ มากมาย
ชะลอตัวลงกา

คำตอบ:


34

รูปแบบกลยุทธ์เป็นที่ดีสำหรับการกำหนดสิ่งที่จะทำ แต่ไม่ได้เมื่อจะทำ คุณจะต้องใช้เครื่องไฟไนต์สเตทเพื่อที่จะทราบว่า AI ของคุณอยู่ในสถานะใดและมีการตัดสินใจที่เหมาะสมอะไรบ้าง

คู่มือปฏิบัติเพื่อสร้างเกมที่สมบูรณ์ AI: เล่มที่ 1


27

หากนี่เป็นครั้งแรกที่คุณพัฒนา AI คุณไม่ต้องกังวลกับสิ่งต่าง ๆ เช่นรูปแบบของรัฐคณิตศาสตร์เชิงพฤติกรรมหรือแม้แต่รับหนังสือเกี่ยวกับเรื่องนี้

คุณสามารถออกไปกับสิ่งนี้:

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

สิ่งสำคัญในการทำให้ AI ถูกต้องคือการคิดว่าพฤติกรรมใดที่คุณต้องการให้ตัวละครมีและสิ่งนี้สามารถทำได้จริง ดังนั้นสำหรับศัตรูยานอวกาศขั้นพื้นฐานฉันนึกภาพการกระทำที่เป็นไปได้ที่มันสามารถทำได้คือ:

  • เลื่อนไปรอบ ๆ
  • ไฟ
  • วิ่งหนีไป

และการกระทำเหล่านี้จะเกิดขึ้นเมื่อไหร่?

  • ย้ายไปรอบ ๆ - ไม่มีอะไรให้ทำ
  • ไฟ - เมื่อฉันเห็นศัตรู
  • วิ่งหนี - เมื่อฉันเหลือน้อยต่อสุขภาพ / เมื่อฉันโดนไฟ / ฯลฯ

หลังจากที่คุณทำเช่นนี้เนื่องจาก "สถานะ" ต่ำที่ตัวละครของคุณสามารถอยู่คุณสามารถใช้คำสั่งง่ายๆถ้าคำสั่งเช่นเดียวกับข้างต้น ฉันขอแนะนำให้คุณดูพฤติกรรมของพวงมาลัยเพราะสิ่งเหล่านี้เป็นพฤติกรรมที่ง่ายมากที่จะนำไปใช้และอาจส่งผลให้เกิดการเคลื่อนไหวที่ดูดีจริงๆ

สามารถพบได้มากขึ้นที่นี่: http://www.red3d.com/cwr/steer/
และฉันขอแนะนำเกมเขียนโปรแกรมหนังสือAIของ Mat Buckland โดยตัวอย่างโดยเฉพาะอย่างยิ่งเมื่อคุณเริ่มออก

เมื่อคุณรู้สึกสะดวกสบายกับสิ่งเหล่านี้ฉันขอแนะนำให้ดูที่รูปแบบของรัฐและกลยุทธ์

ประเด็นคือการเริ่มต้นเล็กและเรียบง่าย ไม่ต้องกังวลเกี่ยวกับคำศัพท์เหล่านี้ที่ทุกคนคอยเกี่ยวกับ FSM และรูปแบบการออกแบบและอะไรก็ตาม ออกแบบและสร้างสิ่งสำคัญอันดับแรกจากนั้นกังวลว่าคุณจะสามารถปรับปรุงได้อย่างไรโดยใช้วิธีการหรือมาตรฐานที่มีอยู่

หวังว่าจะช่วย!


@Fuu ไชโยสำหรับคู่แก้ไข :)
เรย์ Dey

9

คุณอาจต้องการดูOpenSteerและเอกสารประกอบการกำกับพฤติกรรมที่ไปพร้อมกับมัน ซอร์สโค้ดไม่ได้เป็นระดับเริ่มต้น แต่แนวคิดที่อยู่เบื้องหลังควรเป็นแนวคิดที่ดี


ผู้คนใช้ opensteer ในเกมหรือมากกว่าสำหรับสถานการณ์จำลอง?
jle

อย่างน้อยฉันก็พยายามที่จะใช้มันในเกมที่กำลังพัฒนา มันใช้งานได้ดีสำหรับฉันจนถึงตอนนี้ ฉันเชื่อว่าผู้แต่งได้พัฒนามันส่วนใหญ่ในขณะที่ทำงานให้กับกลุ่ม Playstation ที่ Sony - มันน่าจะทำให้มันเป็นเกมบางเกม MobyGames นำเสนอเขาด้วยเครดิตของ JohnMadden Football และหนึ่งในเกม Leisure Suit Larry
AShelly

FreeOrion ใช้ OpenSteer ในเครื่องมือต่อสู้ทางยุทธวิธี
Mike Strobel

1
+1 สำหรับการพูดถึง opensteer หากคุณต้องการดูตัวอย่างที่ดีของการรวมพฤติกรรมที่เรียบง่ายเข้าด้วยกันเพื่อสร้างสิ่งที่ดูซับซ้อนและซับซ้อนมาก ชำระเงินพฤติกรรมพวงมาลัย! Google "Boids" และดูการใช้ที่ยอดเยี่ยม มันไม่เงียบสิ่งที่คุณต้องการ แต่มันจะแสดงให้คุณเห็นว่าความเรียบง่ายมาพร้อมความซับซ้อน
onedayitwillmake ทำให้

9

คุณอาจต้องการที่จะดูที่รูปแบบการออกแบบกลยุทธ์ โดยพื้นฐานแล้วเขียนกลยุทธ์พื้นฐานที่เหมือนกันว่าเรือจะปฏิบัติอย่างไร:

  • ขยับเข้าใกล้เป้าหมายมากขึ้น
  • โจมตีเป้าหมาย
  • วิ่งหนีจากเป้าหมาย
  • ย้ายไปที่ ups พลังงาน
  • ใช้เครื่องสำรองไฟ

จากนั้นคุณจะใช้ตรรกะ (state machine) เพื่อเลือกระหว่างกลยุทธ์เหล่านี้ ตัวอย่างเช่น: หากเกราะป้องกันเรือลดลงต่ำกว่า 50% ให้วิ่งออกไปจากเป้าหมายแล้วเคลื่อนที่ไปยังไอเท็มเสริมพลัง / พลังชีวิตและอื่น ๆ


1
ดังนั้นในแต่ละครั้งที่มีการวนซ้ำเกมมันจะตัดสินใจว่า 'กลยุทธ์' ใดที่มีความสำคัญและดำเนินการนั้น
jle

@ jle สวยมาก ดังนั้นแต่ละกลยุทธ์ของคุณจะแบ่งย่อยเป็นคลาสของตัวเองทำให้รหัสของคุณเป็นระเบียบ
ไบรอันเดนนี่

7

ฉันขอแนะนำให้คุณซื้อหนังสือ Artificial Intelligence สำหรับเกมโดย Ian Millington - ยอดเยี่ยม! :) http://www.ai4g.com/

ซอร์สโค้ดอยู่ที่ Github - MIT license

แน่นอนถ้าคุณไม่ได้ใช้ C / C ++ นี่อาจมีความเกี่ยวข้องน้อยกว่า

แต่เป็นการแนะนำที่ยอดเยี่ยมเกี่ยวกับโลกแห่งความโง่เขลา / ปัญญาประดิษฐ์

สิ่งที่คุณต้องการคือพวงมาลัยและเครื่องกลไก สำหรับการเริ่ม


2

คำแนะนำการปฏิบัติถ้าคุณไปหาเครื่องจักรรัฐ: ระวัง megastate

มันเป็นการล่อลวงให้มีสถานะ "หลบหนี" ซึ่งจัดการการตั้งตำแหน่งที่จะหลบหนีการตั้งค่าความเร็วเป้าหมายสูงการล้างเป้าหมายทั้งหมด ฯลฯ จะดีกว่ามากที่จะมีเครื่องจักรของรัฐจำนวนมาก เครื่องจักรสถานะที่จัดการเลือกตำแหน่งเป้าหมายหนึ่งที่จัดการปืน ฯลฯ

สิ่งนี้อาจดูโง่เง่าเนื่องจากคุณต้องเพิ่มสถานะการหลบหนีลงในเครื่องแต่ละเครื่อง แต่เนื่องจากคุณถูก จำกัด ให้เพียงหนึ่งหรือสองเอาต์พุตสถานะของคุณจึงเล็กมากดังนั้นจึงไม่ควรเป็นปัญหา

นอกจากนี้เนื่องจากแต่ละการควบคุมอยู่ภายใต้การควบคุมส่วนบุคคลคุณสามารถเลือกตำแหน่งเป้าหมายที่หลบหนีได้ในขณะที่ยังคงมีสถานะการโจมตีควบคุมปืนของคุณ คุณสามารถยิงกราดศัตรูได้ในขณะที่ยังคงรักษากำลังของเครื่องยนต์ไว้เพราะน้ำหล่อเย็นรั่วไหล คุณสามารถคัดท้ายเพื่อหลีกเลี่ยงการชนในขณะที่ยังคงทิ้งมาตรการตอบโต้ ทั้งหมดนี้จะเป็นไปไม่ได้ด้วยกลไกรัฐที่ครอบคลุมทุกอย่าง


2

คณิตศาสตร์เชิงพฤติกรรมสำหรับเกม AI

การเพิ่มหนังสือเล่มนี้ไปยังรายการจุดเริ่มต้นสำหรับการเรียนรู้การเขียนโปรแกรม AI ด้วยการมุ่งเน้นไปที่การสังเกตและการใช้งานพฤติกรรมแทนที่จะเป็นอัลกอริธึมของแอปพลิเคชั่นที่ จำกัด ฉันเชื่อว่ามันเหมาะกับงาน


1

วิธีสร้าง AI เป็นคำถามที่ยุ่งยากเพราะประกอบด้วยหลายส่วน:

  • คุณเลือกสถาปัตยกรรม / กระบวนทัศน์ทั่วไปสำหรับ AI ของคุณ มันขึ้นอยู่กับสคริปต์? มันจะใช้การวางแผนหรือไม่? มันเป็น FSM ง่าย ๆ หรือคุณชอบ BTs ไหม?
  • จากนั้นคุณใช้กระบวนทัศน์เหล่านี้กับการใช้งาน / ชุดเครื่องมือเฉพาะ
  • ตอนนี้คุณเหลือทางเลือกในการออกแบบเกมเนื่องจากคุณต้องคิดถึงพฤติกรรมที่สถาปัตยกรรมของคุณจะใช้

โปสเตอร์อื่น ๆ แนะนำหนังสือที่ดีและฉันชอบ AI4Games ที่แนะนำโดย jacmoe ถึงแม้ว่ามันจะเป็นเรื่องทั่วไปในบางส่วน (เช่นหนังสือจำนวนมากซึ่งแน่นอนว่าเข้าใจได้)

แน่นอนว่าเกมแต่ละประเภทมีความต้องการเฉพาะและเกมอาร์เคด / เกมยิงปืนไม่ต้องการสถาปัตยกรรมที่ซับซ้อนเพื่อรองรับการเล่นเกมที่น่าสนใจ การบังคับทิศทางอย่างง่ายจะทำหน้าที่เป็นพื้นฐานของพฤติกรรมนั้นและจากนั้นคุณเพิ่มรายละเอียดสำหรับศัตรูประเภทต่าง ๆ (บางชนิดถ่ายเป็นระยะถ่ายบางภาพโดยทำนายการเคลื่อนไหวของผู้เล่นบางคนหันไปเผชิญหน้ากับศัตรูคนอื่น ๆ อาจประสานงานกัน การโจมตีของพวกเขา ฯลฯ )

  • ฉันคิดว่าวิธีที่ดีที่สุดในการเรียนรู้เกี่ยวกับการเข้ารหัสเกม (AI) นั้นดูดีเกินไปใช้รหัส ดังนั้นสำรวจ ohloh.net และ GitHub แล้วมองหาโครงการ FOSS ที่มีอยู่!
  • แน่นอนคุณสามารถเลือกส่วนที่ยากและเล่นที่มีอยู่ ( แต่ง่าย) เกม ลองทำวิศวกรรมย้อนกลับพฤติกรรมและคิดว่า "ฉันจะออกแบบสิ่งนี้ได้อย่างไร" แน่นอนคำแนะนำช่วยเหลือเสมอและนั่นอาจเป็นเหตุผลที่คุณถามที่ gamedev.SE!
  • บางสิ่งในระหว่างดูเกมยิงที่มีอยู่ในฟอรัม GameMaker ด้วย! คุณสามารถค้นหาสคริปต์ง่าย ๆ มากมายที่จะทำเคล็ดลับ ;)

1

คิดเกี่ยวกับสิ่งที่คุณทำเมื่อคุณเล่นเกม ถามคำถามตัวเอง

  • ฉันต้องมีข้อมูลอะไรบ้างในการตัดสินใจ
  • ฉันจะตอบสนองต่อการเปลี่ยนแปลงเมื่อใด
  • เป้าหมาย "ระยะยาว" ของฉันในเซสชันการเล่นนี้คืออะไร

จากนั้นสิ่งที่ฉันทำคือให้ AI ดูที่สนามเด็กเล่นและทำรายการของการกระทำหรือการเคลื่อนไหวที่เป็นไปได้ที่ AI ทำตามคำถามเหล่านั้น ฉันจัดอันดับและจัดเรียงการเคลื่อนไหวเหล่านี้ด้วย "ปัจจัยความฉลาด" จากนั้นมันง่ายพอ ๆ กับการเลือกและดำเนินการเคลื่อนไหว / การกระทำโดยอาศัยการผสมผสานของการสุ่มและอะไรก็ตามที่ผู้เล่นเลือกระดับความยากลำบากในช่วงเริ่มต้นของเกม

จากนั้นหลังจาก 500 มิลลิวินาทีฉันทำอีกครั้ง

มันไม่มีความสามารถในการเรียนรู้หรืออะไรเลย แต่มีการปรับเปลี่ยนมากพอที่จะเชื่อได้ค่อนข้างดีซึ่งทุกสิ่งที่สำคัญจริงๆ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.