วิธีการใช้“ การ์ดเทคนิคพิเศษ” ในเกมการ์ดซื้อขาย


16

ฉันกำลังพยายามเขียนการ์ดเกมซื้อขายที่นี่ในทางใดทางหนึ่งมันคล้ายกับMagic The GatheringหรือYu-Gi-Oh! เกมการ์ด.

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

เพื่อให้คุณเข้าใจว่าเอฟเฟกต์การ์ดเหล่านี้มีอะไรบ้างนี่คือตัวอย่างของเอฟเฟกต์การ์ดคาถาที่มีอยู่ในYu-Gi-Oh! เกมการ์ด:

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

Konami ทำวิดีโอเกมหลายเกมพร้อมด้วย AI และการ์ดหลายพันใบ ฉันไม่คิดว่ามันจะเป็นไปได้จริง ๆ ที่จะเข้ารหัสรหัสฐานข้อมูลทั้งหมดใช่ไหม?

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

คำตอบ:


17

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

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

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

จากนั้นคุณก็จัดการสแต็คเหล่านั้นตามกฎของเกมจนกว่าสแต็กจะว่างเปล่า ณ จุดที่สามารถดำเนินการใหม่ได้เป็นต้น

หากคุณใช้กฎของเกมอย่างสมบูรณ์รหัสกฎของคุณจะไม่มีการ์ดฮาร์ดโค้ดเดียว การ์ด Hardcoding สามารถสร้างทางลัดที่สะดวกสบายได้ แต่ในระยะยาวสิ่งนี้จะทำให้โค้ดของคุณพองตัวและสร้างข้อผิดพลาดที่อาจเกิดขึ้นเช่นเมื่อการ์ดใหม่ถูกปล่อยออกมาซึ่งมีปฏิสัมพันธ์กับการ์ดเหล่านั้นด้วยวิธีที่แปลกใหม่ ในเกมอย่าง MtG ที่มีการ์ดพิเศษมากกว่า 12,000 ใบและไม่มีที่สิ้นสุด


1
คำตอบที่ดี. มาจากโลกแห่งการเขียนโปรแกรมที่ใช้งานได้ฉันจะให้การ์ดแต่ละใบปิดกั้นสภาพแวดล้อมของเกมเพื่อให้น่าขันยิ่งขึ้น ตัวอย่างเช่นบัตรสามารถสร้าง "พื้นที่" ใหม่ที่ยอมรับได้โดยการเพิ่มรายการของการ์ดลงในรายการของพื้นที่ อย่างเป็นรูปธรรม: Zombie Monster Mayhem: สิ่งมีชีวิตที่พ่ายแพ้ทั้งหมดจะได้รับการฟื้นฟูใน "Communal Cemetery" ใหม่โดยไม่มีความสามารถพิเศษและสุ่มโจมตีผู้เล่นที่มีพื้นฐานมาจากลูกเต๋า
ไบร์

ลิงค์เพิ่มเติม: github.com/Fluorohydride/ygopro-coreสำหรับการใช้งาน YGO แบบโอเพ่นซอร์สที่มีชื่อเสียงเนื่องจาก YGO ได้ถูกกล่าวถึงในคำถามเช่นกัน
SK19

2

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


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

1

ฉันกำลังวางแผนเกมการ์ดโดยใช้ภาษาเว็บด้วย mysql db ฉันกำลังจะทำการติดตั้งแบบทั่วไปดังนั้นมันจึงมีความยืดหยุ่นกับการ์ดที่ไม่เหมือนใคร ตัวอย่างเช่น:

reduceHitPoints() { } 
reduceMana() { }
reduceSpeed() { }

มันอาจเป็นได้อย่างง่ายดาย:

reduce($attacker, $target, $reduceWhat, $amount) { }
massReduce($attacker, Array $targets, $reduceWhat, $amount) { }

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

ตัวเลือกและความสามารถทั้งหมดจะได้รับการกำหนดไว้ในฐานข้อมูลในแถวเดียวนั้น

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