สำหรับสัปดาห์ที่แล้วฉันได้ทำงานกับระบบสินค้าคงคลังด้วย Unity3D ตอนแรกฉันได้รับความช่วยเหลือจากพวกที่ Design3 แต่มันก็ไม่นานจนเราแยกทางกันเพราะฉันไม่ชอบวิธีที่พวกเขาใช้รหัสพวกเขาไม่มีกลิ่นของ OOP ใด ๆ
ฉันทำตามขั้นตอนต่อไป - รายการใช้มากกว่าหนึ่งช่องระบบการจัดวางขั้นสูง (รายการพยายามอย่างดีที่สุดเพื่อหาสิ่งที่เหมาะสมที่สุด) ระบบเมาส์ในตัวเครื่อง (เมาส์ถูกขังอยู่ในพื้นที่ใช้งานกระเป๋า) ฯลฯ
นี่คือตัวอย่างการทำงานของฉัน
สิ่งที่เราต้องการมีในเกมของเราคือคุณลักษณะการจัดระเบียบอัตโนมัติ - ไม่ใช่การจัดเรียงอัตโนมัติ เราต้องการคุณสมบัตินี้เนื่องจากคลังของเราจะเป็น 'เรียลไทม์' - ไม่เหมือนใน Resident Evil 1,2,3 ฯลฯ ที่คุณจะหยุดเกมชั่วคราวและทำสิ่งต่างๆในคลังของคุณ ทีนี้ลองนึกภาพตัวคุณเองในสถานการณ์ที่ถูกล้อมรอบไปด้วยซอมบี้และคุณไม่มีกระสุนคุณมองไปรอบ ๆ คุณเห็นว่ามีกระสุนอยู่ในพื้นดินดังนั้นคุณจึงไปหาพวกเขาและพยายามเลือกพวกเขา แต่พวกเขาไม่ พอดี! คุณดูสินค้าคงคลังของคุณและพบว่าหากคุณจัดระเบียบบางรายการใหม่มันจะพอดี! - ตอนนี้ผู้เล่น - ในสถานการณ์นั้นไม่มีเวลาที่จะจัดระเบียบใหม่เพราะเขาล้อมรอบด้วยซอมบี้และจะตายถ้าเขาหยุดและจัดระเบียบสินค้าคงคลังเพื่อให้มีพื้นที่ (จำสินค้าคงคลังในแบบเรียลไทม์ไม่หยุดชั่วคราว) - จะไม่ มันจะดีสำหรับการที่จะเกิดขึ้นโดยอัตโนมัติ? - ใช่!
(ฉันเชื่อว่าสิ่งนี้ได้ถูกนำไปใช้ในบางเกมเช่น Dungeon siege หรืออะไรบางอย่างเพื่อให้แน่ใจว่าทำได้)
ลองดูตัวอย่างนี้:
ใช่ดังนั้นหากคุณจัดเรียงปัญหาโดยอัตโนมัติคุณจะได้รับช่องว่างของคุณ แต่ไม่ดีเพราะ: 1- แพง: มันไม่จำเป็นต้องมีการดำเนินการเรียงลำดับทั้งหมดเพื่อเพิ่มช่องว่างเหล่านั้นในภาพแรกเพียงเลื่อนรายการสีแดงที่ ด้านล่างซ้ายมากและคุณจะได้ช่องว่างเดียวกับที่คุณได้รับจากการจัดเรียงอัตโนมัติ 2- มันน่ารำคาญสำหรับผู้เล่น: "ใครบอกให้คุณสั่งซื้อสิ่งของของฉันอีกครั้ง"
ฉันไม่ได้ถามว่า "จะเขียนรหัสอย่างไร" สำหรับเรื่องนี้ฉันแค่ขอคำแนะนำบางอย่างที่จะมองอัลกอริทึมที่เกี่ยวข้อง? สิ่งนี้เกี่ยวข้องกับกราฟและเส้นทางที่สั้นที่สุดหรือไม่? ฉันหวังว่าจะไม่ cuz ฉันไม่สามารถจัดการศึกษาต่อในวิทยาลัยของฉันได้: / ถึงแม้ว่าจะเป็นเพียงบอกฉันและฉันจะได้เรียนรู้สิ่งที่เกี่ยวข้อง
สังเกตเห็นว่าอาจมีมากกว่าหนึ่งวิธี ดังนั้นฉันคิดว่าสิ่งแรกที่ฉันต้องทำคือหาว่าสถานการณ์นั้น 'แก้ไขได้' - ถ้าฉันรู้วิธีตัดสินว่าสถานการณ์นั้นแก้ไขได้หรือไม่จากนั้นฉันก็สามารถ 'แก้ปัญหา' ได้ ฉันแค่ต้องรู้เงื่อนไขที่ทำให้ 'แก้ไขได้' และฉันเชื่อว่าต้องมีอัลกอริทึม / โครงสร้างข้อมูลสำหรับสิ่งนี้
นี่คือรูปสำหรับมากกว่าหนึ่งวิธีในการลองใส่รายการ 1x3:
ลูกศรแสดงวิธีแก้ปัญหาอย่างใดอย่างหนึ่ง แต่ถ้าคุณดูคุณจะพบมากกว่าหนึ่ง นี่คือสิ่งที่ฉันไม่ได้จัดเรียงอัตโนมัติในท้ายที่สุด แต่หาวิธีแก้ปัญหาและนำไปใช้
โปรดทราบว่าถ้าฉันใช้เวลากับมันฉันจะหาวิธีแก้ไขมัน แต่มันจะไม่เป็นวิธีที่ดีที่สุดมันเหมือนกับการถือล้อรถด้วยเท้าแทนที่จะเป็นมือของคุณ! XD หรือเหมือนกับพยายามแก้ปัญหาที่ต้องใช้อาร์เรย์ แต่คุณยังไม่ได้ตระหนักถึงการมีอยู่ของพวกเขา! แล้วแนวทางที่ถูกต้องในเรื่องนี้คืออะไร?
อัปเดตจากคำอธิบาย
@ สตีเฟ่นฉันไม่มีกูรูใน Alogs คุณพูดถึง 'knapsack' และ @BlueRaja - Danny Pflughoeft พูดถึง 2D algo packing algo พวกเขาเกี่ยวข้องกันหรือไม่? - ฉันยังสับสนว่าฉันควรเข้าใกล้เรื่องนี้อย่างไร
และใช่ฉันใช้ "ฮิวริสติก" อยู่แล้ว แต่ฉันไม่รู้จริง ๆ ว่าฉันเป็น: D พบช่องแรกที่พร้อมใช้งานและดูว่ารายการพอดีหรือไม่
ฉันไม่ทราบว่าการสั่งซื้อสินค้าตาม "ความใหญ่โต" (ซึ่งฉันเรียกว่า nSlotsRequired = nRowsReq * nColsRec) จะใช้งานได้หรือไม่เพราะคุณมีรายการ 2x2 และ 1x4 พวกเขามีขนาดเท่ากัน แต่รูปร่างที่แตกต่างกันและจะมี เอฟเฟกต์ที่แตกต่างกันเกี่ยวกับวิธีที่เหลือของรายการถัดไป ดังนั้น ... : /
ฉันดูวิดีโอนี้ฉันชอบความคิดแบบเต็มรูปแบบจริงๆ แต่ฉันสงสัยว่าจะทำยังไงต่อไปเนื่องจากสินค้าคงคลังเป็นแบบ 2D ฉันไม่แน่ใจด้วยซ้ำว่าช่องเก็บของเป็นกุญแจสำคัญที่นี่เพราะมันเป็นความจริงที่ฉันสามารถมีถุงได้มากกว่าหนึ่งใบ แต่ในเกมของเรามันจะเป็นแค่ถุงเดียว ดังนั้นมันเป็นเรื่องของการใส่ของในถุง 'หนึ่ง' และไม่มากไปกว่านั้น ตัวอย่างใน vid นั้น (ท่อและรถเมล์) ไม่ตรงกับปัญหาของฉัน นอกจากนี้ยังดูบางสิ่งเกี่ยวกับสิ่งที่เป้หลังนี้ฉันไม่เห็นว่า 'ค่า' เกี่ยวข้องกับรายการ / สินค้าคงคลังของฉันอย่างไร แต่ฉันคิดว่า 'น้ำหนัก' นั้นเหมือนกับความเป็นกลุ่มไม่แน่ใจ