โดยหลักการแล้วจะสร้างเอ็นจินกฎ / ข้อ จำกัด (ไม่ใช่กราฟิก / ฟิสิกส์) สำหรับเกมได้อย่างไร


16

ฉันต้องการสร้างเกมง่ายๆคล้ายกับหนังสือที่คุณเลือกเอง ผู้เล่นจะได้รับข้อความบรรยายและเลือกการกระทำของเขาจากรายการความเป็นไปได้ ในทางกลับกันสิ่งนี้นำไปสู่ข้อความบรรยายเรื่องใหม่ infinitum โฆษณา สิ่งเดียวที่จับได้คือขึ้นอยู่กับการตัดสินใจก่อนหน้านี้รายการของความเป็นไปได้ที่อาจแตกต่างกัน

ในภาพรวมก่อนหน้านี้ดูเหมือนว่าจะมีคำสั่ง if-else โหลดดังนั้นการอ้างถึงเอ็นจินกฎจะถูกนำมาใช้ แต่มันก็ดูเหมือนเครื่องจักรสถานะ จำกัด สำหรับฉัน

ฉันกำลังจะเขียนสิ่งนี้ใน Java หรืออาจจะเป็น Groovy ปัจจุบันฉันสนใจประเด็นเกี่ยวกับแนวคิดมากขึ้นเช่นจะทำอย่างไรในระดับกว้างขึ้น (ผู้คนใช้เกมหมากรุกหรือไพ่อย่างไร?) แต่ก็มีคำแนะนำบางอย่างเกี่ยวกับห้องสมุดเฉพาะด้วยเช่นกัน

เห็นได้ชัดว่า "เกมเอ็นจิ้น" จากชื่อไม่ได้หมายถึงการตรวจจับการชนหรือกลไกฟิสิกส์ / กราฟิกอื่น ๆ แต่ตรรกะตัดสินใจว่าผู้เล่นตัวเลือกได้ให้สถานการณ์และสถานะปัจจุบันของเขา


1
คำถามนี้เหมาะกับgamedevหรือไม่
Uwe Plonus

2
@Uwe Plonus พิจารณาแล้ว แต่ฉันไม่เชื่อเช่นนั้น คำถามของฉันมีความคิดล้วนๆและไม่มีอะไรเกี่ยวข้องกับห้องสมุดกราฟิก 3D และหัวข้ออื่น ๆ ที่ครอง gamedev ลองคิดดูสิคำถามนี้มีส่วนเกี่ยวข้องกับเกมเพียงเล็กน้อย ... แต่ไม่แน่ใจว่าจะตั้งชื่ออย่างไรดีกว่า
kaqqao

หมากรุกและการ์ดเกมที่มากแตกต่างจากการผจญภัย
Deer Hunter

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

คำตอบ:


7

ตามที่คุณพูดไว้ในความคิดเห็นนี่คือวิธีที่ฉันจะจัดการกับมัน:

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

มีสองวิธีพื้นฐานที่คุณสามารถใช้เงื่อนไขได้ return player.inventory.contains(GUN)ครั้งแรกคือการตั้งค่าเครื่องมือสคริปต์เต็มเป่าภายในเกมแล้วสภาพดูเหมือนว่า นี่เป็นการเริ่มต้นที่ซับซ้อนกว่าในการตั้งค่า แต่อนุญาตให้ใช้สคริปต์ขั้นสูงขึ้นได้

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


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

ฉันชอบวิธีนี้ค่อนข้างน้อย ขอบคุณ! จะตรวจสอบมันต่อไป โอกาสใดที่คุณรู้จักห้องสมุดที่มีประโยชน์
kaqqao

@veggen: ไม่ขอโทษ ไม่ใช่นักพัฒนา Java
Mason Wheeler

@MasonWheeler: คุณคิดอย่างไรกับLazarus ?
Robert Harvey

1
ตั้งแต่คำถามนี้เข้ามาในรายการคำถามยอดนิยมในวันนี้ฉันจะรายงานว่าฉันใช้สิ่งนี้อย่างที่ฉันพูดในความคิดเห็นก่อนหน้า ฉันสร้าง DSL ที่ดีและใช้งาน FSM ด้วยตัวเองเพราะมันง่ายจริงๆ ไม่สามารถพอใจกับวิธีแก้ปัญหาได้มากขึ้น @MasonWheeler ขอบคุณอีกครั้งสำหรับคำแนะนำที่ดี!
kaqqao

5

ฉันคิดว่าคำตอบนั้นอยู่ในชื่อเรื่อง: คุณต้องการเครื่องมือสร้างกฎ หากคุณวางแผนที่จะเขียนแอปพลิเคชันของคุณด้วย Java แน่นอนคุณสามารถเขียนของคุณเองตามที่แนะนำโดย Gilbert Le Blanc หรือคุณอาจต้องการดูDroolsเครื่องมือสร้างกฎ

ตัวเลือกใดที่ผู้เล่นได้ให้กับสถานการณ์และสถานะปัจจุบันของเขา

ด้วย Drools หรือเอ็นจิ้นกฎอื่น ๆ ที่จริงแล้วคุณสามารถกำหนดสถานการณ์ที่กำหนดพารามิเตอร์ซึ่งแสดงรายการของการกระทำที่เป็นไปได้ คุณสามารถเข้ารหัสกฎง่ายๆ SUC มี:

  • ผู้เล่นอยู่ที่ pageX:

    • ตัวเลือก 1: ชื่อเรื่อง: "go left", action: "page45"
    • ตัวเลือก 2: ชื่อเรื่อง: "go right", action: "page56"
    • หากผู้เล่นมี Staff of Fireballs ตัวเลือกที่ 3: ชื่อ "launch fireball", action: "page32"
    • หากผู้เล่นมีทักษะการรับรู้ 10 ตัวเลือกจากนั้น 4: ชื่อเรื่อง "การเขียนเช็คบนกำแพง" การกระทำ: "หน้า 67"

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

นี่คือแหล่งข้อมูลบางส่วนที่จะช่วยคุณเริ่มต้นใช้งาน Drools:


โดยทั่วไปแล้วให้มองหาอัลกอริทึม Rete ที่นำมาใช้ในกลไกการปกครองใด ๆ ที่คุณต้องการ
Deer Hunter

ใช่ Drools เป็นหนึ่งในสิ่งที่ฉันเริ่มต้นด้วย ฉันต้องตรวจสอบอีกเล็กน้อยเพื่อดูว่าฉันสามารถประเมินชุดของกฎได้ครั้งละหนึ่งชุดหรือไม่เนื่องจากเป็นสิ่งที่สำคัญในกรณีของฉัน ขอบคุณ!
kaqqao

@veggen ยินดีที่จะช่วย!
Jalayn

2

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

http://en.wikipedia.org/wiki/Category:Text_adventure_game_engines

ไม่ได้กล่าวถึงในวิกิพีเดียเกลียวเป็นที่นิยมมากในขณะนี้


2

แนวคิดเกมของคุณตรงไปตรงมา ใน psudeocode มันจะออกมาเป็นแบบนี้:

while not at end of adventure story
    display text
    get response

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

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

สร้างคลาสการตอบกลับที่มีหนึ่งการตอบสนองและลิงก์ไปยังคลาสข้อความ

สร้างคลาสข้อความที่เก็บข้อความการผจญภัยและรายการคำตอบเป็นอินสแตนซ์ของคลาสตอบกลับ

แก้ไขเพื่อตอบความคิดเห็น:

คุณไม่คำนวณอะไรเลยตามโมเดลนี้ ใช้ตัวอย่างของคุณต้นไม้จะมีลักษณะเช่นนี้โดยที่ T คือข้อความและ A คือตัวเลือกการดำเนินการ:

T You stumble on a dead police officer
    A Take the gun
    T You hear footsteps
      A Run away
      A Hide and see who comes
    A Don't touch anything
    T You hear footsteps
      A Run away

ใช่มีข้อความซ้ำซ้อน แต่เมื่อทำตามสายโซ่การกระทำในอนาคตอาจนำไปสู่การตัดสินใจที่ผ่านมา มันเป็นต้นไม้ตัดสินใจขนาดใหญ่


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

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