อะไรคือข้อผิดพลาดที่ใหญ่ที่สุดที่ต้องพิจารณาเมื่อพัฒนาเกมใหม่


19

จริง ๆ แล้วฉันเพิ่งเริ่มติดตาม (ขอบคุณ David Young สำหรับการแก้ไขการตั้งชื่อ) สองสามเกมบนเว็บใหม่สำหรับ Facebook เมื่อไม่กี่สัปดาห์ที่ผ่านมาและฉันเพิ่งถูกน้ำท่วมด้วยบล็อกจิตและเวลาจากการเขียนโค้ดซ้ำ ฉันกำลังทำงานกับสิ่งที่คล้ายกับเกม RPG แนวสวมบทบาท (Vampire Wars) ฉันมีทักษะในการเขียนรหัสเกม แต่ฉันกำลังโหยหาผ่านรูปแบบการออกแบบที่ถูกต้องและทำให้ผลิตภัณฑ์ตรงกับสิ่งที่ฉันเห็นในใจ

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

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

ขยาย

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

บางทีโพสต์ของฉันควรจะขอลิงค์แนะนำที่อธิบายตรรกะเกมง่าย ๆ

สิ้นสุดการขยาย

ขอบคุณทุกคนล่วงหน้า!


1
นี่คือการอ่านที่ค่อนข้างเกี่ยวข้องและน่าสนใจที่ฉันพบว่ามีประโยชน์: makegames.tumblr.com/post/1136623767/finishing-a-game
zfedoran

คำตอบ:


22

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


4
นี่เกือบจะฆ่าหนึ่งในเกม FB ของฉัน มันเต็มไปด้วยฟีเจอร์ต่าง ๆ แต่ทั้งหมดนี้ให้ความรู้สึกแบบครึ่งทาง
Tesserex

หากฉันจำได้ถูกต้องปรากฏการณ์นี้เรียกว่า "คุณสมบัติคืบ" หลุมพรางอันตรายแน่นอน
S. TarıkÇetin

14

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

การทำต้นแบบ: คุณ (อาจ) ทำผิด

ประกาศแจ้ง:

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

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

แก้ไข:

ฉันกำลังเพิ่มนี่เพื่อชี้แจงความแตกต่างระหว่าง Prototype และ Tracer Code

โปรดจำไว้เสมอว่า: ต้นแบบถูกออกแบบมาให้ถูกทิ้ง! Tracer Code ไม่ใช่

หลุมพรางที่ต้นแบบ

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

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

ข้อมูลเพิ่มเติมเกี่ยวกับการออกแบบ Tracer Code จากThe Pragmatic Programmer

กระสุนติดตามและต้นแบบ


นั่นเป็นสิ่งที่ดี ... ฉันจะต้องดูที่บทความนั้น จากข้อความที่ตัดตอนมาที่คุณโพสต์ดูเหมือนว่าฉันอาจจะดูต้นแบบที่ไม่ถูกต้อง แต่มันก็ดูเหมือนว่ามันอาจเป็นข้อผิดพลาดทั่วไป
angryCodeMonkey

ความผิดพลาดที่คุณยกมาทำให้ฉันรำคาญอยู่พักหนึ่งแล้ว
jokoon

4

ข้อผิดพลาด: ไม่แยกตรรกะของคุณออกจากข้อมูลของคุณ ไม่ทดสอบว่าข้อมูลของคุณสร้างผลลัพธ์ที่ต้องการ

จากความคิดเห็นของคุณในโพสต์ของโจ:

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

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

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

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

TestResult TestPlayerKillsMonsterDuringAttack(PlayerStats, MonsterStats, seed)
{
   Player player(PlayerStats);
   Monster monster(MonsterStats);

EncounterEngine.SeedRNG(seed);
while(1) { result = EncounterEngine.Attack(player, monster); if (result == PLAYER_DEAD) return TEST_FAIL; if (result == MONSTER_DEAD) return TEST_PASS; // result == MONSTER_DAMAGED, PLAYER_DAMAGED is expected. } }

เช่น. หากคุณเรียกสิ่งนี้ด้วย PlayerStats.Level == 5 และ MonsterStats.Level == 3 คุณคาดหวังว่าผู้เล่นจะต้องกำจัดสัตว์ประหลาดนี้ในที่สุด


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

ไม่แยกตรรกะของคุณออกจากข้อมูลของคุณ เป็นจุดที่ดีซึ่งมักจะทำให้เกิดปัญหาตามท้องถนนหรือในขณะที่อัปเดต!
Spooks

2

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

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


1

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


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

ทำไมต้องเขียนเครื่องยนต์ใหม่ คุณสามารถใช้โค้ดเฉพาะของเกมในภาษาสคริปต์เช่น lua เปลี่ยนตัวแปรหรือวิธีคำนวณทางคณิตศาสตร์และไม่จำเป็นต้องคอมไพล์ซ้ำเพื่อตรวจสอบสิ่งต่างๆ gamedev.net/reference/articles/article1932.asp
David Young

1

ฉันจะแนะนำSteve Pavlinaบทความของเกี่ยวกับการบริหารเวลาและแรงจูงใจในตนเอง: http://stevepavlina.narod.ru/

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

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