ฉันพยายามทำความเข้าใจเกี่ยวกับวิธีการออกแบบและคิดในลักษณะเชิงวัตถุและต้องการรับคำติชมจากชุมชนในหัวข้อนี้ ต่อไปนี้เป็นตัวอย่างเกมหมากรุกที่ฉันต้องการออกแบบในลักษณะ OO นี่เป็นการออกแบบที่กว้างมากและจุดสนใจของฉันในขั้นตอนนี้คือการระบุว่าใครเป็นผู้รับผิดชอบต่อข้อความใดและวัตถุโต้ตอบกันอย่างไรเพื่อจำลองเกม โปรดชี้ให้เห็นว่ามีองค์ประกอบของการออกแบบที่ไม่ดี (ข้อต่อสูงการเชื่อมต่อที่ไม่ดี ฯลฯ ) และจะปรับปรุงได้อย่างไร
เกมหมากรุกมีคลาสดังต่อไปนี้
- คณะกรรมการ
- ผู้เล่น
- ชิ้น
- สแควร์
- เกมหมากรุก
คณะกรรมการประกอบด้วยสี่เหลี่ยมดังนั้นคณะกรรมการจึงมีหน้าที่รับผิดชอบในการสร้างและจัดการวัตถุทรงสี่เหลี่ยม แต่ละชิ้นยังอยู่ในรูปสี่เหลี่ยมจัตุรัสดังนั้นแต่ละชิ้นจึงมีการอ้างอิงถึงสี่เหลี่ยมจัตุรัสด้วย (สิ่งนี้สมเหตุสมผลหรือไม่?) จากนั้นแต่ละชิ้นจะต้องรับผิดชอบในการเคลื่อนย้ายตัวเองจากตารางหนึ่งไปยังอีกสี่เหลี่ยมหนึ่ง คลาสผู้เล่นมีการอ้างอิงถึงชิ้นส่วนทั้งหมดที่เขาเป็นเจ้าของและยังรับผิดชอบในการสร้างของพวกเขา (ผู้เล่นควรสร้างชิ้นส่วนหรือไม่) ผู้เล่นมีวิธี TakeTurn ซึ่งจะเรียกวิธีการ movePiece ซึ่งเป็นของคลาสชิ้นส่วนซึ่งเปลี่ยนตำแหน่งของชิ้นส่วนจากตำแหน่งปัจจุบันไปยังตำแหน่งอื่น ตอนนี้ผมสับสนว่าคณะกรรมการต้องรับผิดชอบอะไรกันแน่ ฉันคิดว่าจำเป็นต้องกำหนดสถานะปัจจุบันของเกมและรู้ว่าเมื่อเกมจบลง แต่เมื่อชิ้นส่วนเปลี่ยนมัน ' ตำแหน่งของบอร์ดควรปรับปรุงอย่างไร ควรรักษาอาร์เรย์ของสี่เหลี่ยมที่แยกจากกันซึ่งชิ้นส่วนใดมีอยู่และได้รับการอัปเดตเมื่อชิ้นส่วนเคลื่อนที่หรือไม่
นอกจากนี้ ChessGame ยังสร้างบอร์ดและวัตถุของผู้เล่นอย่างตั้งใจซึ่งจะสร้างสี่เหลี่ยมและชิ้นส่วนตามลำดับและเริ่มการจำลอง สั้น ๆ นี่อาจเป็นลักษณะของโค้ดใน ChessGame
Player p1 =new Player();
Player p2 = new Player();
Board b = new Board();
while(b.isGameOver())
{
p1.takeTurn(); // calls movePiece on the Piece object
p2.takeTurn();
}
ฉันไม่ชัดเจนว่าสถานะของบอร์ดจะได้รับการอัปเดตอย่างไร ชิ้นควรมีการอ้างอิงถึงบอร์ดหรือไม่? ความรับผิดชอบควรอยู่ที่ไหน? ใครถืออะไรอ้างอิง? โปรดช่วยฉันด้วยข้อมูลของคุณและชี้ให้เห็นปัญหาในการออกแบบนี้ ฉันไม่ได้ตั้งใจที่จะมุ่งเน้นไปที่อัลกอริทึมหรือรายละเอียดเพิ่มเติมของการเล่นเกมเนื่องจากฉันสนใจเฉพาะด้านการออกแบบเท่านั้น ฉันหวังว่าชุมชนนี้สามารถให้ข้อมูลเชิงลึกที่มีค่า
takeTurn()
หากการเคลื่อนไหวของ p1 จบเกม ความคิดเห็น nitpicky หัก: ฉันคิดว่ามันเป็นธรรมชาติมากขึ้นที่จะเรียกผู้เล่นและwhite
black