-
== พินตู ==
-
ภาษา:เดลฟี
เวอร์ชัน: 0.02
ผู้เขียน: โทนี่ (
[email protected])
วันที่: 2002.01.13
การแนะนำ
-
ปริศนาจิ๊กซอว์ส่วนใหญ่ที่ฉันเคยเห็นมาก่อนจะมีแผ่นสี่เหลี่ยม และหลายชิ้นสามารถเคลื่อนย้ายได้โดยการเปลี่ยนตำแหน่งของแผ่นกระเบื้องสองชิ้นเท่านั้น มันให้ความรู้สึกที่แตกต่างจากปริศนาจิ๊กซอว์จริงมากจนรู้สึกอึดอัดมาก
ไม่นานมานี้ ฉันเห็นปริศนาจิ๊กซอว์ที่รวมอยู่ใน "The Legend of Zhao Yun of the Three Kingdoms" แผ่นกระเบื้องมีขอบที่ไม่สม่ำเสมอ (มีขอบเว้าและนูน) และคุณสามารถลากแผ่นกระเบื้องใดก็ได้ในหน้าต่าง นี่ทำให้ฉันคิด ... ฉันเกิดแนวคิดที่จะสร้างซอฟต์แวร์ที่คล้ายกันขึ้นมาเอง (แล้วผมเห็นจิ๊กซอว์ต่างประเทศชื่อ bjig32 ครับ ดีมากครับ ถ้าผมได้เห็นก่อนเริ่มพัฒนาโปรแกรมนี้บางทีผมคงไม่คิดจะพัฒนาเองเพราะในความเห็นผมไม่มีทางพัฒนาได้ เกมไขปริศนาที่ดีเหมือนกัน)
ฉันจะใช้มันอย่างไร
-
ระบบทั้งหมดของเกมประกอบด้วยคลาสสองคลาสที่ออกแบบโดยฉันเอง ได้แก่ TTuObj และ TTuMng
TTuObj - หมายถึงไทล์ซึ่งเป็นรูปภาพชิ้นเล็กๆ หลังจากถูกตัดแล้ว มีขอบเขตที่ไม่ปกติและสามารถเคลื่อนที่ไปในคอนเทนเนอร์ที่วางไว้เพื่อตอบสนองต่อเหตุการณ์การลากเมาส์ ฉันออกแบบคลาสนี้ให้สืบทอดจาก TObject จากนั้นสร้าง TPanel และ TImage ตามลำดับในตัวสร้าง (สาเหตุที่ไม่สืบทอดจาก TControl หรือสืบทอดโดยตรงจาก TPanel ก็เพราะฉันไม่ค่อยคุ้นเคยกับการใช้ vcl เพื่อเขียนตัวควบคุม หากทำได้ ให้เขียนใหม่) TPanel จะใช้เพื่อสร้างรูปร่างขอบที่ผิดปกติ เนื่องจาก TImage ไม่มีจุดจับและไม่สามารถเปลี่ยนรูปร่างได้ (ฉันคิดอย่างนั้น) และใช้ TImage เพื่อแสดงภาพและจัดเตรียมเหตุการณ์ของเมาส์ นอกจากนี้ แต่ละ TTuObj ยังบันทึกพอยน์เตอร์ของ TTuObj รอบๆ และดูว่ามีการเชื่อมต่อเกิดขึ้นหรือไม่ ซึ่งจะช่วยให้สามารถระบุได้ว่าทั้งสองไทล์เชื่อมต่อกันเมื่ออยู่ใกล้กันหรือไม่ และเพื่อย้ายไทล์ใดๆ หลังไทล์ เชื่อมต่ออยู่ มันสามารถย้ายไทล์ที่เชื่อมต่ออยู่
TTuMng - เป็นผู้จัดการของเกมตัวต่อ มีหน้าที่รับผิดชอบในการแบ่งภาพที่สมบูรณ์ออกเป็นส่วนๆ จัดการจากส่วนกลาง และพิจารณาว่าเชื่อมต่อชิ้นส่วนทั้งหมดหรือไม่ (นั่นคือ เกมจบลงแล้ว)
ข้อบกพร่องที่รู้จัก
-
ประสิทธิภาพของทั้งระบบยังต่ำมาก โดยเฉพาะเมื่อย้ายไทล์ การกะพริบจะรุนแรงมาก หลังจากการตัดสินเบื้องต้น ฉันคิดว่าเป็นเพราะเมื่อมีการย้ายไทล์ เหตุการณ์ PAINT ของไทล์เองจะถูกกระตุ้นก่อน จากนั้นเหตุการณ์ PAINT ของไทล์เองจะถูกทริกเกอร์ เหตุการณ์ PAINT ของคอนเทนเนอร์ที่มีไทล์อยู่ ซึ่งหมายความว่าไทล์ทั้งหมดจะถูกวาดใหม่หนึ่งครั้ง การวาดตัวควบคุมขอบที่ผิดปกตินั้นไม่มีประสิทธิภาพโดยธรรมชาติ ดังนั้นมันจะกะพริบเช่นนี้ . ฉันพยายามจัดการฟังก์ชันการประมวลผลข้อความ WM_PAINT ของ AImage ใน TTuObj ด้วยตัวเอง (นั่นคือ ไม่อนุญาตให้วาดใหม่เมื่อลากไทล์) แต่ฉันพบว่าหลังจากย้ายไทล์ มันทิ้งภาพติดตาไว้ที่ใดก็ตามที่ผ่านไป เกมไขปริศนาใน "Three Kingdoms Zhao Yun" เขียนด้วย DirectX และไม่มีการสั่นไหวเลย บางทีฉันอาจจะลองเขียนมันด้วย DirectX ในอนาคต
หวังว่าคุณจะเข้าร่วมและปรับปรุงมันได้ !!!!!!