Tôi đang cố gắng tìm hiểu cách thiết kế và suy nghĩ theo hướng Đối tượng và muốn nhận được một số phản hồi từ cộng đồng về chủ đề này. Sau đây là một ví dụ về trò chơi cờ vua mà tôi muốn thiết kế theo cách OO. Đây là một thiết kế rất rộng và trọng tâm của tôi ở giai đoạn này chỉ là xác định ai chịu trách nhiệm về những thông điệp nào và cách các đối tượng tương tác với nhau để mô phỏng trò chơi. Vui lòng chỉ ra nếu có các yếu tố của thiết kế xấu (khớp nối cao, tính liên kết kém, v.v.) và cách cải thiện chúng.
Trò chơi Cờ vua có các lớp sau
- Bảng
- Người chơi
- Cái
- Quảng trường
- Trò chơi cờ vua
Board được tạo thành từ các hình vuông và vì vậy Board có thể được thực hiện chịu trách nhiệm tạo và quản lý các đối tượng Square. Mỗi mảnh cũng nằm trên một hình vuông nên mỗi mảnh cũng có một tham chiếu đến hình vuông mà nó nằm trên. (Điều này có nghĩa không?). Sau đó, mỗi mảnh có nhiệm vụ tự di chuyển từ hình vuông này sang hình vuông khác. Lớp người chơi nắm giữ các tham chiếu đến tất cả các mảnh mà anh ta sở hữu và cũng chịu trách nhiệm về việc tạo ra chúng (Người chơi có nên tạo các mảnh không?). Người chơi có phương thức takeTurn mà lần lượt gọi một phương thức moveP mảnh thuộc Class mảnh, nó thay đổi vị trí của mảnh từ vị trí hiện tại sang vị trí khác. Bây giờ tôi đang bối rối về những gì chính xác lớp Board phải chịu trách nhiệm. Tôi cho rằng cần phải xác định trạng thái hiện tại của trò chơi và biết khi nào trò chơi kết thúc. Nhưng khi một mảnh thay đổi nó ' vị trí của hội đồng quản trị nên được cập nhật như thế nào? nó có nên duy trì một mảng ô vuông riêng biệt trên đó các mảnh tồn tại và nhận được cập nhật khi các mảnh di chuyển không?
Ngoài ra, ChessGame còn tạo ra các đối tượng Bảng và người chơi, những người này lần lượt tạo ra các hình vuông và quân cờ tương ứng và bắt đầu mô phỏng. Tóm lại, đây có thể là mã trong ChessGame có thể trông như thế nào
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();
}
Tôi không rõ trạng thái của hội đồng quản trị sẽ được cập nhật như thế nào. Mảnh có nên tham chiếu đến hội đồng quản trị? Trách nhiệm nên nằm ở đâu? Ai nắm giữ tài liệu tham khảo? Vui lòng giúp tôi với đầu vào của bạn và chỉ ra các vấn đề trong thiết kế này. Tôi cố tình không tập trung vào bất kỳ thuật toán hoặc chi tiết nào khác của trò chơi vì tôi chỉ quan tâm đến khía cạnh thiết kế. Tôi hy vọng cộng đồng này có thể cung cấp những hiểu biết có giá trị.
takeTurn()
nếu nước đi của p1 kết thúc trò chơi. Bình luận ít khó hiểu hơn: Tôi thấy tự nhiên hơn khi gọi các cầu thủwhite
vàblack
.