Nesneye Dayalı bir şekilde nasıl tasarlayıp düşüneceğime dair bir fikir edinmeye çalışıyorum ve bu konu hakkında topluluktan biraz geri bildirim almak istiyorum. Aşağıdaki, OO tarzında tasarlamak istediğim bir satranç oyunu örneğidir. Bu çok geniş bir tasarım ve bu aşamadaki odak noktam sadece kimin hangi mesajlardan sorumlu olduğunu ve nesnelerin oyunu simüle etmek için birbirleriyle nasıl etkileşime girdiğini belirlemektir. Lütfen kötü tasarım unsurları (yüksek bağlantı, kötü uyum vb.) Olup olmadığını ve bunların nasıl iyileştirilebileceğini belirtin.
Satranç oyunu aşağıdaki sınıflara sahiptir
- Yazı tahtası
- oyuncu
- Parça
- Meydan
- Satranç oyunu
Pano, karelerden oluşur ve bu nedenle, Square nesnelerini oluşturmaktan ve yönetmekle sorumlu hale getirilebilir. Her bir parça aynı zamanda bir karenin üzerindedir, bu nedenle her bir parça üzerinde bulunduğu kareye referans verir. (Bu mantıklı mı?). Her parça daha sonra kendisini bir kareden diğerine taşımaktan sorumludur. Oyuncu sınıfı, sahip olduğu tüm parçaların referanslarını tutar ve bunların oluşturulmasından da sorumludur (Oyuncu Taşlar oluşturmalı mı?). Oyuncu takeTurn yöntemine sahiptir, bu da parçanın sınıfına ait olan ve parçanın konumunu mevcut konumundan başka bir konuma değiştiren bir movePiece yöntemini çağırır. Şimdi, Board sınıfının tam olarak neden sorumlu olması gerektiği konusunda kafam karıştı. Oyunun mevcut durumunu belirlemenin ve oyunun ne zaman bittiğini bilmenin gerekli olduğunu varsaydım. Ama bir parça onu değiştirdiğinde yeri yönetim kurulu nasıl güncellenmelidir? hangi parçaların var olduğu ve parçalar hareket ettikçe güncellemeler alan ayrı bir kare dizisi tutmalı mı?
Ayrıca, ChessGame başlangıçta sırasıyla kareler ve parçalar oluşturan ve simülasyonu başlatan Tahta ve oyuncu nesnelerini oluşturur. Kısaca, ChessGame'deki kod böyle görünebilir
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();
}
Yönetim kurulunun durumunun nasıl güncelleneceği konusunda emin değilim. Parçanın tahtaya bir referansı olmalı mı? Sorumluluk nerede olmalı? Kim hangi referansları tutuyor? Lütfen girdilerinizde bana yardımcı olun ve bu tasarımdaki sorunları belirtin. Sadece tasarım yönüyle ilgilendiğim için kasıtlı olarak herhangi bir algoritmaya veya oyunun daha fazla detayına odaklanmıyorum. Umarım bu topluluk değerli bilgiler sağlayabilir.
takeTurn()
hamlesi oyunu bitirirse p2 çağırmamalıdır . Az nitpicky comment: Ben daha doğal oyuncu aramaya bulmakwhite
veblack
.