Объектно-ориентированный дизайн для шахматной игры [закрыто]

Я пытаюсь понять, как проектировать и мыслить объектно-ориентированным образом, и хочу получить отзывы от сообщества по этой теме. Ниже приводится пример шахматной игры, которую я хочу разработать в объектно-ориентированной манере. Это очень обширный дизайн, и на данном этапе я сосредоточен на том, чтобы просто определить, кто отвечает за какие сообщения и как объекты взаимодействуют друг с другом, чтобы имитировать игру. Пожалуйста, укажите, есть ли элементы плохого дизайна (сильное сцепление, плохое сцепление и т. Д.) И как их улучшить.

В игре «Шахматы» есть следующие классы

  • Доска
  • Игрок
  • Фигура
  • Квадрат
  • ChessGame

Доска состоит из квадратов, поэтому доска может быть ответственна за создание и управление объектами Square. Каждая фигура также находится на квадрате, поэтому каждая фигура также имеет ссылку на квадрат, на котором она находится. (Имеет ли это смысл?). Каждая фигура должна перемещаться с одного поля на другое. Класс Player содержит ссылки на все части, которыми он владеет, а также отвечает за их создание (должен ли игрок создавать фигуры?). Player имеет метод takeTurn, который, в свою очередь, вызывает метод movePiece, принадлежащий классу фигур, который изменяет местоположение фигуры с ее текущего местоположения на другое. Теперь я не понимаю, за что именно должен отвечать класс Board. Я предположил, что это необходимо, чтобы определить текущее состояние игры и узнать, когда игра закончится. Но когда фигура меняет свое положение, как следует обновлять доску? должен ли он поддерживать отдельный массив квадратов, на которых существуют фигуры и который обновляется при перемещении фигур?

Кроме того, ChessGame изначально создает объекты Board и player, которые, в свою очередь, создают квадраты и фигуры соответственно и запускают моделирование. Вкратце, так может выглядеть код в 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();

}

Я не понимаю, как будет обновляться состояние доски. Должна ли фигура иметь ссылку на доску? Где должна лежать ответственность? Кто какие ссылки держит? Пожалуйста, помогите мне с вашими комментариями и укажите на проблемы в этом дизайне. Я намеренно не сосредотачиваюсь на каких-либо алгоритмах или других деталях игрового процесса, поскольку меня интересует только аспект дизайна. Я надеюсь, что это сообщество может предоставить ценную информацию.

87
задан Sid 12 November 2010 в 18:47
поделиться