ทำไมเนื้อหาโค้ดฮาร์โค้ดถึงไม่ดี?


41

ฉันรู้ว่าส่วนใหญ่เก็บข้อความสนทนาในไฟล์เกม แต่ฉันเคยเห็นเกมที่ใช้ข้อความเป็นตัวเขียนเนื้อหา (แผนที่ตัวเลือกคำสั่งของผู้เล่นที่เป็นไปได้ข้อความในเนื้อเรื่อง) ลงในรหัสเกม

ฉันนึกถึงเหตุผลไม่กี่ข้อ แต่อะไรคือสาเหตุหลักที่ทำให้เกมข้อความแม้แต่เก็บทุกอย่างไว้ในไฟล์นอกโปรแกรม

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

บางเกมยังมีกราฟิก (ASCII art?) อยู่ในโค้ด ฉันรู้ว่ามันไม่ถูกต้องและฉันสามารถเดาได้ว่าทำไมมันถึงไม่ดี แต่ก็ไม่รู้เหตุผลสำคัญว่าทำไม

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

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


9
เกมที่ใช้ตัวอักษรทำรหัสยากเนื้อหาจำนวนมาก แต่ฉันคิดว่านั่นเป็นเพราะเวลาที่พวกเขาได้รับการพัฒนาและตัวเลือกการออกแบบที่ไม่ดี เช่นเดียวกันกับป้อมปราการคนแคระ ฉันได้นำเกมที่เป็นข้อความทั้งหมดมาเองและย้ายเนื้อหาภายนอกแหล่งที่มาและไปยังฐานข้อมูล มันทำให้ชีวิตของฉันง่ายขึ้นมาก
เกลนสวอน

7
i18n จะยากมากที่จะทำกับเนื้อหาที่ฝังอยู่ในแหล่งที่มา
pllee

5
ไม่แน่ใจว่านี่เป็นการพัฒนาเกมโดยเฉพาะ ในอนาคตพิจารณาถามโปรแกรมเมอร์ SE หรือ stackoverflow
MichaelHouse

13
just making every unique dungeon (content) its own class.นั่นทำให้ฉันตัวสั่น การแยกข้อมูลออกจากลอจิกเป็นหลักการพื้นฐานสำหรับฉันที่ฉันประหลาดใจที่ยังมีนักพัฒนาที่ละเมิดมัน
Lilienthal

4
ไม่ว่าคุณจะตัดสินใจอะไรก็ตามจงตระหนักว่าเนื้อหา hardcoding อนุญาตให้มีกรณีพิเศษได้มากขึ้น ต้องการให้เจ้านายคนหนึ่งปรากฏระหว่างเที่ยงคืนถึง 7AM (เวลาจริง) หรือไม่ การ hardcode นั้นง่ายกว่าการสร้างวิธีทั่วไปให้มอนสเตอร์ปรากฏในบางช่วงเวลาเท่านั้น
user253751

คำตอบ:


85

มีสาเหตุหลายประการ ฉันจะสัมผัสกับไม่กี่:

  1. ทำให้ซอร์สโค้ดของคุณยุ่งเหยิง หากคุณมีบทสนทนา (ต้นไม้) จำนวนมากส่วนใหญ่ของ codebase ของคุณเป็นเพียงข้อความที่ไม่มีส่วนเกี่ยวข้องกับรหัสเกมจริงของคุณ
  2. คุณจะต้องคอมไพล์ซ้ำทุกครั้งที่คุณเปลี่ยนอักขระตัวเดียว
  3. ไดอะล็อกนั้นยากต่อการนำทาง ฉันนึกภาพพยายามใช้ต้นไม้โต้ตอบทั้งหมดนับประสาภายในแหล่งที่มาของคุณอย่างสมบูรณ์จะส่งผลให้เกิดความยุ่งเหยิงของปาเก็ตตี้และซ้อนกันifs, switches และอื่น ๆ ซึ่งส่งผลให้ในรหัสที่มีแนวโน้มที่จะเกิดข้อผิดพลาดอ่านยากและยากที่จะแก้ปัญหา
  4. หากคุณต้องการให้ผู้คนดัดแปลงหรือขยายเกมของคุณมันจะง่ายกว่ามากหากพวกเขาไม่ต้องจัดการกับซอร์สโค้ดเพื่อเปลี่ยนแปลงบางอย่าง
  5. ประเด็นข้างต้นสำคัญยิ่งกว่าหากคุณทำงานเป็นทีม คุณไม่ต้องการให้นักเขียนของคุณยุ่งกับโค้ดเพียงเพื่อป้อนบทสนทนา
  6. การแยกวิเคราะห์ XML หรือรูปแบบไฟล์มาตรฐานอื่น ๆ นั้นค่อนข้างง่ายหากคุณใช้ไลบรารีที่มีอยู่ดังนั้นค่าใช้จ่ายในการดำเนินการนั้นจะต่ำมากในขณะที่ให้ข้อดีและหลีกเลี่ยงปัญหาที่กล่าวถึงข้างต้นและอีกมากมาย
  7. @MiloPrice ชี้ให้เห็นด้านล่างมันยังง่ายกว่าที่จะแปลเกมหากข้อความของคุณอยู่ในไฟล์ภายนอก คุณสามารถเพิ่มภาษาได้ด้วยการเพิ่มไฟล์ทีมของคุณสามารถดูแลการแปลโดยไม่ต้องไปสัมผัสกับแหล่งที่มา (ซึ่งเป็นสิ่งสำคัญอย่างยิ่งหากคุณให้คนแปลว่าใครไม่ควรเห็นรหัสของคุณทั้งหมด - คิดว่าคนอิสระจาก ชุมชนที่ไม่ได้อยู่ในทีมของคุณเป็นต้น)

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

28
ความง่ายในการแปล / การแปลเป็นอีกหนึ่งประโยชน์ที่ยิ่งใหญ่
Milo P

2
@Christian: คุณสามารถมีโปรแกรมที่ขับเคลื่อนด้วยข้อมูลซึ่งข้อมูลถูกฝังอยู่ในโปรแกรมในรูปแบบที่สามารถใช้งานได้โดยตรงในสถานที่ (เช่นใน C หรือ C ++ ขนาดใหญ่หวังว่าจะconstมีอาเรย์แบบคงที่) สิ่งนี้ช่วยให้คุณประหยัดรหัสทั้งหมดและต้นทุนหน่วยความจำรันไทม์ของการโหลด / แปลงการแสดงข้อมูลภายนอก ณ รันไทม์ แน่นอนเหตุผลอื่น ๆ ทั้งหมดของคุณในการรักษาข้อมูลภายนอกยังคงมีผลอยู่
..

2
โดยส่วนตัวแล้วฉันชอบวิธีที่ดีกว่าด้วยเหตุผลเดียวกันที่แจกแจงไว้ที่นี่: ย้ายโค้ดส่วนใหญ่ของคุณในภาษาสคริปต์เช่นกัน สร้างแกนใน C / C ++ ฝังภาษาเช่น Python หรือ Lua และส่งออก API ไปยังมัน Don't Starveทำตามวิธีการนี้และเป็นหนึ่งในเกมที่ดีที่สุดที่ฉันเคยเห็น เกมอื่น ๆ มากมายในอดีตและปัจจุบันก็ทำเช่นนี้เช่นเดียวกับแอปพลิเคชั่น (และไม่ค่อยมีสาธารณูปโภค) ฉันจะบอกว่าโดยรวมแล้วนอกเหนือจากโครงการขนาดเล็กและสาธารณูปโภคเล็ก ๆการฝังรากลึกและการแยกเป็นเรื่องที่เพื่อนของคุณมักจะทำเสมอ
mechalynx

3
โปรดดำเนินการต่อการสนทนานี้ในการแชท
Josh

30

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

  • หลายภาษาที่เกมเขียนขึ้นนั้นมีเวลารวบรวมยาวนาน โดยเฉพาะอย่างยิ่ง C ++ อาจไม่ดีในแง่นี้และ C ++ เป็นภาษาที่ใช้กันทั่วไปมากสำหรับเกมเชิงพาณิชย์ขนาดใหญ่ มันมีปัญหากับภาษาเช่น C # และ Java น้อยกว่า แต่ก็ยังไม่เร็วเท่าที่สามารถจัดเก็บข้อมูลเกมในไฟล์ภายนอกที่สามารถโหลดซ้ำได้ในขณะที่เกมกำลังทำงานจริงเพื่อดูการเปลี่ยนแปลง

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

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

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

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


ฉันไม่คิดว่าเวลารวบรวมนั้นสำคัญนัก แต่ในฐานะนักพัฒนาเรามักจะพยายาม "รหัสที่เรียบร้อย" ... นี่เป็นเหตุผลที่ดีที่จะแยกสิ่งต่าง ๆ ด้วยสิทธิ์ของตัวเอง ... เนื้อหาควรเป็นเนื้อหาไม่ใช่รหัส!
สงคราม

4
@Wardy Compile ครั้งสำคัญมากใน C ++ ฉันได้ทำงานร่วมกับโซลูชันที่ใช้เวลาในการสร้างมากกว่า 15 นาทีไม่ว่าจะเนื่องจากขนาดของโครงการการใช้เทมเพลตที่ก้าวร้าวหรือแม้แต่ความเกียจคร้านของนักพัฒนา (รวมถึงส่วนหัวที่ไม่จำเป็น) และฉันแน่ใจว่านี่เป็นกรณีที่มีเกมเชิงพาณิชย์ขนาดใหญ่
concept3d

1
@ concept3d: ฉันหวังว่าโครงการของฉันคือ 15 นาที clean build บนเซิร์ฟเวอร์ build เฉพาะใช้เวลาประมาณ 50 นาที
Mooing Duck

คนน้อยที่เข้าถึงซอร์สโค้ดได้น้อยคนที่จะได้รับความเสียหายจากสมองที่ C ++ เป็นสาเหตุ : P
Sarge Borsch

ฉันคิดว่าบางคนอาจพลาดจุดโหลดใหม่ - ไม่มีใครสนใจถ้าใช้เวลา 30 วินาทีในการคอมไพล์เกมใหม่ศิลปินไม่ต้องการให้รีสตาร์ทเกมพวกเขาต้องการแป้นพิมพ์ลัดเพื่อให้สามารถทดสอบภาพเคลื่อนไหวที่แตกต่างกัน และพื้นผิวได้ทันที อันที่จริงนี่เป็นหนึ่งในสิ่งที่พวกเขาต้องการมากที่สุด การเห็นว่าสิ่งต่าง ๆ มองออกไปนอกเกมเป็นสิ่งหนึ่ง แต่การเห็นสิ่งเหล่านั้นในเกมเป็นสิ่งที่นับได้
wolfdawn

7

เช่นเคยเช่นเคยมันขึ้นอยู่กับ แต่ก่อนอื่นฉันอยากจะยืนยันว่าการเข้ารหัสยากนั้นไม่ได้เลวร้าย

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

หากเกมของคุณง่ายพอที่จะทำให้คุณสามารถ hardcode เนื้อหาบางอย่างในนั้นฉันจะพิจารณาอย่างรอบคอบเพื่อความเรียบง่าย

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

อย่างไรก็ตามการวาดเส้นแบ่งระหว่างโปรแกรมและเนื้อหานั้นไม่ได้เป็นเรื่องเล็กน้อยเสมอไป อาจกล่าวได้ว่าพื้นผิวมีเนื้อหา 100% แต่สิ่งที่เกี่ยวกับพื้นผิวที่สร้างขั้นตอน? ข้อความโต้ตอบอาจพิจารณาเนื้อหา 100%; แต่สิ่งที่เกี่ยวกับเมื่อกล่องโต้ตอบเปลี่ยนแปลงขึ้นอยู่กับการกระทำก่อนหน้าของคุณ? องค์ประกอบอื่น ๆ ที่เราอาจพิจารณาว่าเป็นส่วนหนึ่งของโปรแกรมเช่นสคริปต์หรือตัวแบ่งส่วน 100% อาจได้รับการพิจารณาเป็นส่วนหนึ่งของเนื้อหาของเกม พวกเขาควรจะฮาร์ดโค้ดหรือไม่ พวกเขาควรจะโหลดเป็นทรัพยากรภายนอกหรือไม่

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

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


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

1
@ NPSF3000 abstractions จะเพิ่มความซับซ้อน แต่สามารถลบความซับซ้อนมากกว่าที่พวกเขาเพิ่ม
user253751

2
@immibis ดังนั้นผลรวมทั้งหมดของความซับซ้อนของโครงการหลังจากการใช้สิ่งที่เป็นนามธรรมควรต่ำกว่าก่อน
NPSF3000

3
@ NPSF3000: ประเด็นของฉันคือคุณไม่ควรสร้าง abstractions เพียงเพราะคุณทำได้ บางครั้งข้อมูลฮาร์ดโค้ดนั้นง่ายกว่าเข้าใจได้ง่ายขึ้นและง่ายขึ้น บ่อยกว่าที่ฉันเคยเห็นเกมไปตามเส้นทางไปสู่softcodingซึ่งฉันรู้สึกเสียใจ โปรดทราบว่าการเพิ่ม abstractions นั้นง่ายกว่าการลบออกดังนั้นฉันจึงสนับสนุนให้เพิ่ม abstractions เฉพาะเมื่อคุณต้องการเท่านั้น
Panda Pajama

@PandaPajama ทำอะไร 'เพียงเพราะคุณสามารถ' มีแนวโน้มที่จะทำให้เกิดปัญหาโดยไม่คำนึงถึงสิ่งที่เป็น แต่นั่นไม่ได้หมายความว่าสิ่งที่ซับซ้อนโดยเนื้อแท้ซึ่งเป็นจุดที่ฉันกังวล นอกจากนี้สิ่งที่ทำให้คุณคิดว่าการเพิ่ม abstractions ง่ายกว่าการลบออก? จากด้านบนของหัวของฉันฉันคิดว่าอย่างอื่น - การเพิ่มสิ่งที่เป็นนามธรรมช้าอาจหมายถึงการเปลี่ยนโครงสร้างที่สำคัญ แต่ฉันไม่สามารถนึกถึงกรณีที่การลบสิ่งที่เป็นนามธรรมที่ไม่จำเป็นออกไปนั้นซับซ้อน การเปลี่ยนจาก XML เป็นสตริงฮาร์ดโค้ดควรไม่สำคัญ
NPSF3000

3

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

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

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


1
แน่นอนว่าการมีสิ่งที่นำมาใช้ซ้ำได้ส่วนใหญ่มีแนวโน้มที่จะบังคับให้คุณหลีกเลี่ยงการทำอะไร "พิเศษ" จากกฎที่คุณมีอยู่แล้ว ฉันไม่ได้เรียกร้องเกมใหญ่อย่างหนัก แต่มันมีประโยชน์อย่างมากเมื่อคุณสร้างต้นแบบหรือเขียนเกมทดลอง - มันให้ความยืดหยุ่นมากกว่า มันมาพร้อมกับราคาแน่นอนดังนั้นจึงเป็นความคิดที่ดีที่จะสร้างใหม่ทุกอย่างเมื่อการเล่นเกมใช้งานได้จริง การเล่นเกมเป็นส่วนที่ยาก - ตรวจสอบให้แน่ใจว่าคุณสามารถทดสอบได้โดยไม่ต้องดำดิ่งสู่ขุมทรัพย์ทางสถาปัตยกรรม: D มักจะง่ายกว่าที่จะหารูปแบบทั่วไปหลังจากที่คุณมีคอนกรีต
Luaan

3

เพื่อการเปลี่ยนแปลงที่รวดเร็วยิ่งขึ้นจึงเร่งการพัฒนาผลิตภัณฑ์ที่มีขนาดใหญ่ขึ้นเป็นตัน

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


3

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

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


3

ผมคิดว่าเป็นวลีที่สำคัญคือการแยกของความกังวล

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

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


3

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

ทำไม? เนื่องจากมีตัวเลือกที่นี่เกี่ยวกับการสร้างสมดุลระหว่างต้นทุน / ปัญหา / ข้อดี

เมื่อใช้ไฟล์ภายนอก ... ดีฉันเดาคำตอบอื่น ๆ อธิบายถึงประโยชน์ที่ดีพอ แต่สิ่งที่เกี่ยวกับค่าใช้จ่าย? คุณต้องกำหนดพิธีการที่ถูกต้องสร้างล่ามเห็นด้วยกับรูปแบบไฟล์และที่แย่กว่านั้น ... สร้างแอปพลิเคชันอื่น - ตัวแก้ไข - สิ่งใดที่เป็นปัญหา 0.00% หากคุณเป็นสมาชิกของ 50 coder ที่สร้างโครงการขนาดใหญ่ แต่ถ้าคุณอยู่คนเดียว: คุณจนตรอก

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

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

(หมายเหตุเกี่ยวกับการโลคัลไลซ์เซชั่น: มันเป็นเพียงแค่ตารางแฮชดังนั้นมันจึงเป็นปัญหาที่เป็นอิสระและแก้ไขได้ง่าย)


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

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

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

2

ฉันเดาว่าการให้สิทธิ์ใช้งานอาจเป็นเหตุผลที่จะไม่รวมเนื้อหาในรหัส

ตัวอย่างเช่น,

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