ฉันจะใช้ระบบคำสั่งสำหรับเกมการผจญภัยสไตล์จุดและคลิกได้อย่างไร


11

ฉันกำลังสร้างเกมชี้และคลิกการผจญภัยและตอนนี้ฉันกำลังพยายามหาวิธีที่ดีที่สุดในการใช้ระบบคำสั่ง

สมมติว่าเป็น Monkey Island หรือ Maniac Mansion อินเตอร์เฟสด้วยชุดคำกริยาและวัตถุในฉากและในคลัง เมื่อคลิกที่นี่คุณจะสร้างประโยคเพื่อดำเนินการ

ตัวอย่างเช่นคุณอาจคลิกlook atจากนั้นคลิกที่ต้นไม้เพื่อรับ "ดูต้นไม้" หรือคลิกที่แอปเปิ้ลจากgiveนั้นจึงคลิกที่ผู้หญิงเพื่อรับ "ให้แอปเปิ้ลกับผู้หญิง"

ประโยคมีสามรูปแบบที่เป็นไปได้:

  • verbตัวอย่างเช่น "บันทึก"
  • verb nounเช่น "pick up apple", "ดู octopus"
  • verb noun nounตัวอย่างเช่น "ให้ดองกับสุนัขที่บ้า", "ใช้ชะแลงกับขวดดอง"

ในสถานการณ์ที่แตกต่างกันฉันจะต้องการให้การดำเนินการถูกกำหนดโดยวัตถุต่าง ๆ

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

หากอินเทอร์เฟซใช้งานได้เหมือน Maniac Mansion คุณต้องสร้างประโยคและบอกให้มันทำงาน (ใน Maniac Mansion โดยคลิกที่ประโยคหรือคลิกอีกครั้งในสิ่งสุดท้ายที่คุณคลิก)

ถ้ามันทำงานเหมือน Monkey Island ประโยคจะดำเนินการทันทีที่เสร็จสมบูรณ์ซึ่งทำให้เกิดปัญหาสำหรับคำกริยาuseที่บางครั้งอาจใช้คำนามหนึ่งคำและอีกสองครั้ง

ดังนั้นคุณจะใช้ระบบที่จัดการสิ่งนี้ได้อย่างไร


1
ดูเหมือนว่าจะมีคำกริยาสามประเภทหนึ่งประเภทสำหรับคำนามศูนย์อีกประเภทหนึ่งสำหรับสองคน ฯลฯ พวกเขาไม่ได้เป็นคลาสของวัตถุเดียวกัน คุณไม่สามารถ "ดูปลาหมึกยักษ์ที่มีขวดดอง" ดังนั้นlookคำกริยาคำนามเดียว ฯลฯ
tenpn

คำตอบ:


10

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

สิ่งที่ต้องการ:

  1. ผู้ใช้คลิกที่ชีสเบอร์เกอร์
  2. เกมแสดงเมนู: "หยิบกินดูให้กับ ___"
  3. ผู้ใช้เลือก "ให้กับ ___"
  4. เกมบอกว่า "ให้กับใคร?" และรอให้ผู้ใช้คลิกคำนามอื่น (หรือปุ่มยกเลิก)
  5. ผู้ใช้คลิกลิง
  6. เกมมอบชีสเบอร์เกอร์ให้กับลิง

การนำไปปฏิบัติอย่างชาญฉลาดแต่ละวัตถุในเกมจำเป็นต้องมีข้อมูลสำหรับ:

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

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


+1 ทั้งในการสร้างแบบจำลองสิ่งต่าง ๆ และด้านอินเทอร์เฟซของสิ่งต่าง ๆ ใช่ส่วนใหญ่ฉันเห็นด้วยเพราะนี่เป็นวิธีที่ฉันทำ แต่ฉันชอบคำตอบนี้
drhayes

หากเราเห็นด้วยก็ต้องชัดเจนว่าทั้งคู่ต้องถูก ;)
ใจดี

ดังนั้นอย่างมีประสิทธิภาพคุณคิดว่าพฤติกรรมในการปฏิบัติควรถูกกำหนดโดยคำนามแรกเสมอ?
SpoonMeiser

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

นี่เป็นวิธีที่ทำให้เค้นเต็มได้
Jari Komppa

2

ฉันนำเสนอวิธีแก้ง่าย ๆ สามารถขยายได้แน่นอน

ฉันคิดว่ารายการง่าย ๆ ของ(verb, object1, object2)จะแก้มันได้:

  • ถ้าผู้เล่นคลิกวัตถุ (คำกริยา) "ใช้" และคลิก "บอลลูน" และวัตถุคลิกผู้เล่น "ปั๊ม" และมี triplet ("ใช้", "บอลลูน", "ปั๊ม") จากนั้นคุณ "ใช้ลูกโป่งกับปั๊ม"
  • บางครั้ง object2 อาจเป็น NULL เช่นเดียวกับใน "use helium" (use, helium, NULL)
  • ต้องการให้ผู้เล่นคลิกที่กริยาของวัตถุก่อน
  • หากผู้เล่นคลิกที่สิ่งที่ไม่ตรงกับสิ่งที่พูดว่า "ฉันทำไม่ได้นี่เป็นเรื่องไร้สาระ"
  • แน่นอนคุณควรตรวจสอบทุกครั้งหลังจากคลิกถ้าลำดับถูกต้อง

วิธีจัดการค่าเริ่มต้น:

  • หากการคลิกครั้งแรกไม่ได้อยู่บนวัตถุกริยาให้ค้นหาการกระทำเริ่มต้นที่เป็นไปได้
  • วิธีหนึ่งในการตั้งค่าเริ่มต้นคือการสร้างสี่เท่า ควอไทล์ (กริยา, วัตถุ 1, วัตถุ 2, เป็นค่าเริ่มต้น)
  • วิธีอื่นในการจัดเก็บพวกเขาจะมีรายการค่าเริ่มต้นสาม
  • ...

ตัวอย่างบางส่วน:

  • (ใช้, ลูกโป่ง, ปั๊ม)
  • (ให้จอห์นมันฝรั่ง)
  • (เดินปิรันย่าเป็นโมฆะ)
  • (ใช้, ballon-in-คงคลัง, pump)
  • (open, door-to-roof, NULL), default .... ตัวอย่างของการดำเนินการเริ่มต้น

สามารถขยายได้:

  • เพิ่มกิจกรรมบางอย่างที่จะถูกเรียก (ให้บางสิ่งบางอย่างกับผู้เล่นผู้เล่นจะพูดว่า "ฉันไม่สามารถทำเช่นนั้นได้เพราะฉันเป็นโจรสลัดที่ยิ่งใหญ่" เริ่มต้นฉากตัดเปลี่ยนบางอย่างในโลก ... )
  • เพิ่มเงื่อนไขบางอย่าง บางครั้งลูกโป่งอาจอยู่ในกรงดังนั้นคุณจะต้องแสดง "ถ้าลูกโป่งไม่ได้อยู่ในกรง" ฉันคิดว่าฉันอาจเข้าใกล้สิ่งนี้ด้วยแคลคูลัสเหตุการณ์หรือโพยหรือทำด้วยตัวชี้ฟังก์ชัน ...
  • บางครั้งประโยคใน commandline อาจไม่ใช่ "look at hole" แต่จะถูกเขียนใหม่เป็น "look in hole" สิ่งนี้ต้องการเพียงตัวแปร :)

1

มีสองปัญหาที่นี่: การตีความการป้อนข้อมูลของผู้เล่นลงในต้นไม้ไวยากรณ์แล้วออกจากต้นไม้นั้น

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

หลังจากกดปุ่มแต่ละครั้งคุณสามารถถามต้นไม้คำกริยาว่ามันอยู่ในสถานะที่ถูกต้องในการดำเนินการ (สำหรับการป้อนข้อมูลสไตล์เกาะ Monkey)

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

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

ตรวจสอบรูปแบบของล่ามสำหรับข้อมูลเพิ่มเติมเกี่ยวกับขั้นตอนการแยกวิเคราะห์


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