คำถามติดแท็ก grid

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

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

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

5
การจำลองความดันในการจำลองแบบของเหลวที่ใช้กริด
ฉันมีระบบน้ำที่ใช้ระบบกริด 2 มิติในเกม XNA ของฉันเรามีวิธีการใช้เซลลูลาร์ออโตมาตาเพื่อจำลองการตกของน้ำและการแพร่กระจาย ตัวอย่างของน้ำที่ไหลลงมาตามทางลาด: แต่ละแผ่นสามารถมีค่าของเหลว 0 ถึง 255 ค่าซึ่งเก็บไว้ในหน่วยไบต์ ฉันไม่ได้ใช้floatsระบบน้ำเก่าที่ฉันเคยทำ แต่มันเพิ่มภาวะแทรกซ้อนและมีผลการทำงานที่ยอดเยี่ยม กระเบื้องน้ำแต่ละอัพเดตตัวเองด้วยชุดของกฎง่ายๆ: หากไทล์ด้านล่างมีช่องว่างให้ย้ายมากที่สุดเท่าที่เป็นไปได้จากไทล์ปัจจุบันไปยังล่างสุด (Flow Down) หากทั้งสองด้านนั้นไม่เหมือนกันและไม่เป็นศูนย์และทั้งสองจะผ่านได้เราจะได้ผลรวมของ 3 แผ่น (ซ้าย + ปัจจุบัน + ขวา) และหารด้วย 3 โดยปล่อยให้ส่วนที่เหลืออยู่บนแผ่นกลาง (ปัจจุบัน) หากกฎข้างต้นให้ผลรวมเป็น 2 เราควรแบ่งไพ่ออกเป็นสองด้าน (1, 0, 1) หากกฎ 2 ให้ 1 เป็นผลรวมให้เลือกด้านที่สุ่มเพื่อไหลเข้า หากกฎ 2 ล้มเหลวเราควรตรวจสอบว่าด้านใดด้านหนึ่งสามารถผ่านได้และอีกด้านหนึ่งไม่ได้ หากเป็นจริงเราจะแบ่งไทล์ปัจจุบันออกเป็นสองส่วนสำหรับ 2 ไทล์ ฉันจะขยายตรรกะนี้เพื่อรวมความกดดันได้อย่างไร แรงดันจะทำให้ของเหลวเพิ่มขึ้นเหนือ "U-Bends" และเติมในช่องอากาศ …
30 xna  c#  physics  grid  water 

2
รับวงแหวนของกระเบื้องในตารางหกเหลี่ยม
ขอบคุณบทความนี้: กระเบื้องหกเหลี่ยมและการค้นหาเพื่อนบ้านที่อยู่ติดกันฉันสามารถรวบรวมกระเบื้องที่อยู่ติดกับกระเบื้องที่กำหนดได้ แต่ฉันติดอยู่กับอัลกอริทึมที่ทำให้ฉัน "วงแหวน" ของกระเบื้องที่ระบุโดยออฟเซ็ตเท่านั้น อัลกอริทึมที่กำหนดในโพสต์สแต็คโอเวอร์โฟลว์ไม่สนใจลำดับที่รวบรวมไทล์ ฉันรู้ว่ามีการเพิ่ม 6 ออฟเซ็ตทุกแผ่น ออฟเซ็ต 1 ให้คุณได้ 6 ไทล์ ออฟเซ็ต 2 ให้ 12 ออฟเซ็ต 3 ให้ 18 และอื่น ๆ มีการเติบโตอย่างต่อเนื่องที่ 6 จากการชดเชยแต่ละครั้ง ดังนั้นฉันคิดว่าควรมีกฎที่ปรับให้เหมาะกับการชดเชยเหล่านี้ ฉันไม่สามารถหาอันนี้ได้อย่างแน่นอน ใคร?

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

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

2
การวางแผนตระเวนดินแดน
ฉันกำลังพัฒนาเกม / จำลองสถานการณ์ที่ตัวแทนกำลังต่อสู้เพื่อดินแดน ฉันมีสถานการณ์ที่แสดงในภาพด้านล่าง: สิ่งมีชีวิตเหล่านี้กำลังเดินไปรอบ ๆ และครอบครองผืนดินที่พวกเขาเหยียบหากพวกเขาเป็นอิสระ เพื่อทำให้สิ่งนี้น่าสนใจยิ่งขึ้นฉันต้องการแนะนำพฤติกรรม "การลาดตระเวน" ซึ่งเจ้าหน้าที่กำลังเดินไปรอบ ๆ ดินแดนของพวกเขาเพื่อลาดตระเวนจากผู้บุกรุกที่อาจต้องการใช้มัน ในด้านเทคนิคแต่ละสแควร์จะแสดงเป็นx,yตำแหน่งเช่นเดียวกับมิติที่แสดงความยาวด้าน นอกจากนี้ยังมีข้อมูลเกี่ยวกับผู้ที่ครอบครองตาราง ArrayListสี่เหลี่ยมทั้งหมดจะถูกเก็บไว้ใน ฉันจะแนะนำพฤติกรรมการลาดตระเวนได้อย่างไร สิ่งที่ฉันต้องการคือให้แต่ละหน่วยลาดตระเวนส่วนหนึ่งของพื้นที่ (พวกเขาแบ่งระหว่างพวกเขาซึ่งพวกเขาจะลาดตระเวนในพื้นที่) ปัญหาหลักที่ฉันพบมีดังนี้: พื้นที่ของที่ดินนั้นสุ่มมากดังที่เห็นในภาพ มันค่อนข้างยากที่จะเข้าใจว่าขอบเขตอยู่ในแต่ละทิศทาง ตัวแทนควรแบ่งภูมิภาคเป็นหน่วยลาดตระเวนอย่างไร พื้นที่ของที่ดินอาจไม่ต่อเนื่องจากทีมตรงข้ามอาจเข้ายึดครองดินแดนกลาง ฉันมีความคิดที่จะนำสี่เหลี่ยมจัตุรัสที่ไกลที่สุดในแต่ละทิศทางปฏิบัติต่อพวกมันให้เป็นขอบเขตของพื้นที่และแบ่งพื้นที่ตามขอบเขตเหล่านั้น แต่อาจรวมถึงที่ดินที่ไม่เกี่ยวข้องจำนวนมาก ฉันจะแก้ไขปัญหานี้ได้อย่างไร
14 java  ai  grid 

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

5
ฉันจะพูดคุยเกี่ยวกับอัลกอริธึมบรรทัดของ Bresenham ไปยังจุดลอยตัวได้อย่างไร
ฉันพยายามรวมสองสิ่งเข้าด้วยกัน ฉันกำลังเขียนเกมและฉันจำเป็นต้องกำหนดสี่เหลี่ยมกริดที่วางอยู่บนเส้นตรงกับจุดสิ้นสุดของจุดลอยตัว ยิ่งกว่านั้นฉันต้องการมันเพื่อรวมสี่เหลี่ยมกริดทั้งหมดที่มันแตะ (เช่นไม่ใช่แค่เส้นของ Bresenhamแต่เป็นสีน้ำเงิน): มีใครให้ข้อมูลเชิงลึกเกี่ยวกับวิธีการใช้หรือไม่ วิธีแก้ปัญหาที่ชัดเจนคือการใช้อัลกอริธึมแบบไร้เดียงสา แต่มีบางสิ่งที่ได้รับการปรับให้เหมาะสมที่สุด (เร็วกว่า)?

3
การสร้างถนน / แม่น้ำบนแผนที่ตาราง 2d
นี่เป็นคำถามที่มือใหม่ แต่ที่นี่มันไป: แผนที่ของฉันเป็นตาราง 2d และฉันต้องการสร้างถนนและแม่น้ำ เส้นทางจากจุดเริ่มต้นไปยังจุดสิ้นสุดต้องไม่เป็นเส้นทางที่ดีที่สุดในจำนวนไพ่ แต่ควรมีการสุ่มในระดับหนึ่ง (รอบ) มีอัลกอริธึมมาตรฐานสำหรับสิ่งนี้หรือไม่? ไชโย! UPDATE: นี่คือผลลัพธ์ของการเล่นกับน้ำหนักบนกริดและใช้อัลกอริธึมพา ธ สั้นที่สุด (Bellman-Ford) โดยใช้ไลบรารี jgrapht ฉันไปกับคำตอบของ Donutz หลังจากทั้งหมด http://pastebin.com/AGQGK5ik

2
การค้นหารูปร่างใน 2D Array จากนั้นปรับให้เหมาะสม
ฉันเพิ่งได้รับอนุญาตให้ใช้รูป ... ภาพด้านล่างจากเกมของฉันแสดงบล็อกมืดบางส่วนซึ่งได้รับการยอมรับว่าเป็นส่วนหนึ่งของรูปร่าง "T" ตามที่เห็นรหัสได้ทำให้บล็อกมืดลงด้วยจุดสีแดงและไม่เห็นรูปร่าง "T" ที่มีเส้นขอบสีเขียว รหัสของฉันวนซ้ำผ่าน x / y ทำเครื่องหมายบล็อกที่ใช้หมุนรูปร่างทำซ้ำเปลี่ยนสีทำซ้ำ ฉันเริ่มพยายามแก้ไขการตรวจสอบนี้ด้วยความกังวลใจมาก แนวคิดปัจจุบันคือ: วนรอบตารางและจดบันทึกรูปแบบที่เกิดขึ้นทั้งหมด (ไม่ทำเครื่องหมายบล็อกตามที่ใช้) และวางสิ่งเหล่านี้ลงในอาร์เรย์ วนซ้ำผ่านกริดอีกครั้งคราวนี้สังเกตว่าบล็อกใดถูกครอบครองโดยรูปแบบใดและด้วยเหตุใดจึงมีหลายรูปแบบ วนลูปผ่านกริดอีกครั้งคราวนี้สังเกตว่ารูปแบบใดขัดขวางรูปแบบใด รู้สึกอย่างนั้น ... ฉันจะทำยังไงดี? ฉันคิดว่าฉันจะต้อง ลองผสมผสานรูปร่างที่ขัดแย้งกันหลายแบบเริ่มต้นด้วยสิ่งกีดขวางรูปแบบส่วนใหญ่ก่อน ฉันจะเข้าใกล้คนนี้ได้อย่างไร ใช้เหตุผลที่บอกว่าฉันมี 3 รูปร่างที่ขัดแย้งกันครอบครอง 8 บล็อกและรูปร่างเป็น 4 บล็อกต่อหนึ่งดังนั้นฉันจึงสามารถมีได้สูงสุดสองรูปร่าง (ฉันยังต้องการรวมรูปร่างอื่น ๆ และอาจมีการให้คะแนนน้ำหนักซึ่งจะต้องพิจารณาเมื่อผ่านรูปร่างที่ขัดแย้งกัน แต่อาจเป็นอีกวัน) ฉันไม่คิดว่ามันเป็นปัญหาการจัดเก็บขยะ แต่ฉันไม่แน่ใจว่าจะหาอะไร หวังว่าจะทำให้รู้สึกขอบคุณสำหรับความช่วยเหลือของคุณ แก้ไขแม้จะมีความชัดเจนของคำถามทุกคนดูเหมือนจะเข้าใจใช่ ฉันต้องการค้นหารูปร่าง "T" สูงสุดภายในแต่ละสี (เพราะถ้าฉันให้คะแนนสองและคุณได้สามคุณจะรำคาญเล็กน้อย)

2
บล็อกล้มและรูปร่างที่ซับซ้อน
ขณะนี้ฉันมีเกมเหมือน Tetris ที่เรียบง่ายและพบปัญหาที่ฉันไม่สามารถแก้ไขได้ ซึ่งแตกต่างจาก Tetris ที่มีรูปทรงล้มเดียวฉันมีรูปทรงหลายรูปที่เชื่อมต่อกันที่อาจต้องตก ฉันต้องคำนวณตำแหน่งสุดท้ายของพวกเขา พิจารณาสิ่งต่อไปนี้: ในการคำนวณตำแหน่งสุดท้ายของรูปร่างสีเขียวฉันเพียงแค่สแกนหาทุก ๆ ตารางจนกว่าฉันจะไปถึงอีกสี่เหลี่ยมจัตุรัสหรือขอบของกระดาน เสร็จสิ้น สำหรับรูปร่างที่เรียบง่ายหลาย ๆ แบบฉันกำลังไต่ขึ้นบอร์ด ดังนั้นสีแดงจึงไม่จำเป็นต้องเคลื่อนไหวสีส้มจะลดลงทีละหนึ่งสีเขียวลดลงสาม เสร็จสิ้น ฉันไม่รู้วิธีรักษารูปร่างสีเขียวและสีแดงที่เชื่อมต่อกัน การใช้ตรรกะของ # 2 เราจะท้าย "ติด" ลอยกลางอากาศ หากฉันสแกนหารูปร่างสีเขียวฉันจะพบกับสีแดงและไม่เคลื่อนไหวและในทางกลับกันสำหรับสีแดง วิธีแก้ปัญหาอาจใช้รูปร่างสองแบบเป็นหนึ่งเดียว คล้ายกับ # 3 ในสถานการณ์นี้ฉันสามารถประสบความสำเร็จได้ด้วยการปฏิบัติต่อวัตถุเป็นหนึ่งเดียว แตกต่างจาก # 3 และ # 4 ฉันไม่สามารถรักษารูปร่างเป็นหนึ่งเป็นรูปร่างสีส้มจะจบลงหนึ่งตารางลอยสูงเกินไป ... อีกรูปแบบของปัญหา # 6 อาจมีสถานการณ์อื่น ๆ ที่ฉันมีหลายรูปร่างที่คลุกเคล้าในสถานการณ์ที่ซับซ้อนมากขึ้น แต่ฉันคิดว่าข้างต้นครอบคลุมส่วนพื้นฐานที่สุดของปัญหา ฉันรู้สึกว่ามีวิธีการแก้ปัญหาที่สง่างามที่ฉันยังไม่ได้พบ / คิดและจะขอบคุณมากที่ข้อมูลเชิงลึกความคิดหรือทรัพยากรใด ๆ สารละลาย …

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

3
ตรวจสอบว่าชุดของกระเบื้องในตารางเป็นรูปร่างที่ล้อมรอบ
รับชุดไพ่ในตารางฉันต้องการตรวจสอบ: หากกระเบื้องทำให้รูปที่ล้อมรอบ หากกระเบื้องทำให้ตัวเลขที่ถูกปิดล้อมเมื่อคุณนับด้านข้างของกระดานเป็นขอบของรูป หากหนึ่งในสองคำสั่งก่อนหน้านี้เป็นจริงกระเบื้องใดเพิ่มเติมที่อยู่ภายในรูปที่ปิดล้อมรูปแบบไทล์เริ่มต้น ผู้เล่นจะเริ่มต้นด้วยการกดลงบนกระเบื้องหนึ่งแล้วลากนิ้วของพวกเขาไปยังกระเบื้องอื่น ๆ เพื่อสร้างห่วงโซ่ของกระเบื้องสีเดียวกัน ฉันจะตรวจสอบตามที่ฉันไปเพื่อดูว่าไทล์ถัดไปนั้นใช้ได้หรือไม่ อดีต หากผู้เล่นจะเริ่มต้นในกระเบื้องสีแดง, ย้ายที่ถูกต้องต่อไปของพวกเขาเพียงอย่างเดียวคือไปยังกระเบื้องสีแดงที่อยู่ติดกัน (เส้นทแยงมุมไม่นับ) เมื่อผู้ใช้ยกนิ้วฉันต้องสามารถตรวจสอบ 3 รายการข้างต้น ดังนั้นความคิดเริ่มต้นของฉันก็คือตั้งแต่ฉันตรวจสอบความถูกต้องของโซ่ทุกครั้งที่ฉันไปเมื่อผู้เล่นยกนิ้วของฉันฉันสามารถตรวจสอบว่ากระเบื้องตัวแรกและตัวสุดท้ายติดกันหรือไม่ (ฉันรู้อยู่แล้วว่าพวกมันมีสีเดียวกัน) หากพวกเขาอยู่ติดกันฉันมีลางสังหรณ์ว่าฉันได้ทำร่างที่ปิดล้อมและฉันจะมาที่นี่เพื่อลองดูว่าฉันพลาดอะไรที่ยิ่งใหญ่หรือไม่ การพิสูจน์ตรรกะ / คณิตศาสตร์บางอย่างที่ว่าลางสังหรณ์ของฉันถูกต้อง (หรือตัวอย่างที่พิสูจน์ว่าไม่ถูกต้อง) แต่นั่นคือเมื่อฉันคิดว่ารายการหมายเลข 2: ฉันยังต้องคำนึงถึงโซ่ที่ใช้ขอบของกระดานเป็นด้านข้างของรูปที่แนบมา ในกรณีนั้นรายการแรกและชิ้นสุดท้ายในห่วงโซ่จะไม่ติดกัน แต่ฉันก็ยังคงมีรูปที่ล้อมรอบ ดังนั้นตอนนี้ฉันกลับไปที่จตุรัสหนึ่งหน่อย ฉันจะทำอย่างไรกับพิกัดกริดของโซ่นี้เพื่อหาว่าพวกมันสร้างรูปที่ล้อมรอบหรือไม่? และเมื่อฉันจะรู้ว่าฉันมีตัวเลขที่ล้อมรอบสิ่งที่เป็นวิธีที่ดีที่สุดที่จะได้รับรายชื่อที่เพิ่มขึ้นของกระเบื้องทั้งหมดที่ตกอยู่ภายในขอบเขตของตนหรือไม่ ด้านบนฉันวาดภาพสิ่งที่ฉันคาดหวังว่าผลลัพธ์ที่เป็นไปได้ 4 ข้อของการทดสอบนี้คือ โซ่ไม่ได้ทำรูปที่ถูกปิดล้อม โซ่ทำรูปที่ปิดล้อม หากคุณนับด้านข้างของกระดานเป็นขอบ (หรือมากกว่าหนึ่งขอบ) ของรูปภาพโซ่จะสร้างรูปที่ล้อมรอบ ห่วงโซ่จะสร้างรูปที่ถูกปิดล้อม แต่มีจุดข้อมูลเพิ่มเติม (ผู้ใช้เลือกอย่างถูกต้องเป็นส่วนหนึ่งของห่วงโซ่) ซึ่งไม่ได้เป็นส่วนหนึ่งของรูปที่สร้างขึ้น กรณีที่ 4 นั้นยากที่สุดเพราะคุณต้องแยกลิงก์โซ่ "พิเศษ" เพื่อค้นหารูปที่แนบมาและชิ้นส่วนที่อยู่ข้างใน (แต่ไม่ต้องอยู่รอบ ๆ พื้นที่ …
10 algorithm  grid  graph 

2
วิธีที่มีประสิทธิภาพมากขึ้นในการติดตั้ง Line of sight บนตาราง 2d ด้วยการฉายรังสี?
พิจารณาตารางไพ่แบบ 2d และขอบเขตของพิกัดโดยประมาณ - ซึ่งอยู่กึ่งกลางผู้เล่น - ซึ่งแสดงถึงเส้นสายตา เป้าหมายคือเพื่อป้องกันสายตาที่มองข้ามสิ่งกีดขวาง (เช่นกำแพง) มันค่อนข้างง่ายที่จะตรวจสอบว่ามีเซลล์ใดในขอบเขตของสายตาที่มองเห็นหรือไม่: ฉายรังสีจากผู้เล่นไปยังเซลล์เป้าหมายโดยใช้Bresenham's - หากหนึ่งในเซลล์ที่ทับซ้อนกันระหว่างผู้เล่นและเป้าหมายนั้นเป็นอุปสรรคเซลล์เป้าหมาย ไม่สามารถมองเห็นได้ ตอนนี้ความคิดแรกของฉันคือการวนซ้ำไปตามเซลล์กริดทั้งหมดในแนวสายตา - แต่ดูเหมือนว่าจะไม่มีประสิทธิภาพสำหรับฉัน ตัวอย่างเช่นหากผู้เล่นยืนอยู่ติดกับกำแพงและคุณกำหนดว่ามองไม่เห็นเซลล์ที่อยู่นอกกำแพงคุณสามารถระบุเซลล์ทั้งหมดบนรังสีหลังจากนั้นจะมองไม่เห็น นอกจากนี้ยังพิจารณาการส่งรังสีไปยังแต่ละเซลล์ตามแนวรัศมีของสายตาและวนเซลล์แต่ละเซลล์ตามแต่ละรังสี - แต่ฉันจะทำการประมวลผลเซลล์มากกว่าหนึ่งครั้ง มีวิธีที่มีประสิทธิภาพมากกว่านี้ไหม ในขณะที่วนซ้ำ ~ 50 เซลล์ต่อเทิร์นคือการคำนวณที่ค่อนข้างเบาฉันจะเร่งความเร็ว - เป้าหมายคือสามารถหมุนเวียนรอบ ๆ ไม่กี่รอบต่อวินาทีในการเล่นอัตโนมัติ ดังนั้นยิ่งฉันมีประสิทธิภาพมากเท่าไร

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