Создание шахматной многопользовательской игры

Я пытаюсь сделать многопользовательскую игру в шахматы на Visual Basic. Это игра для двух игроков, в которую можно будет играть в обычном режиме, даже не по локальной сети.
На данный момент я закончил проектирование доски.

Моя логика такова:
Во-первых, при щелчке по любому квадрату обработчик события щелчка проверяет, находится ли фигура на этом квадрате. Если нет, то он проверяет, нужно ли переместить фигуру на эту клетку. Если оба отрицательны, то ничего не происходит.

Теперь проблема в том, как мне закодировать события щелчка? Кроме того, я представил плату с помощью двумерного массива. Но как обновить позиции после каждого хода? И как мне проверить, выполняется ли легальный ход? Еще одна вещь, которую я хочу добавить, это то, что всякий раз, когда нажимается кусок, должны быть выделены возможные допустимые квадраты.

Для этого я сделал следующее: для каждого события щелчка на любом квадрате проверялось, есть ли кусок. Если была фигура, то он подсвечивал все возможные ходы для этой фигуры по логике If-Else-If, но это получалось слишком громоздко и слишком долго. И еще одна проблема, которая возникла, заключалась в том, как я узнаю, что если пользователь щелкнет пустой квадрат, чтобы переместить туда кусок?

Пожалуйста помогите.


person Rohit Shinde    schedule 19.06.2012    source источник
comment
Пожалуйста, уточните язык, который вы используете. Вы отметили «VBA», но в вопросе упоминается только Visual Basic. Если это VB, а не VBA, мы говорим о VB6 или VB.NET?   -  person psubsee2003    schedule 19.06.2012
comment
Я имел в виду VB.Net. Я думаю, что это, должно быть, была ошибка с моей стороны, когда я пометил его VBA. Извиняюсь.   -  person Rohit Shinde    schedule 19.06.2012


Ответы (2)


«Но как мне обновлять позиции после каждого хода?»

Когда деталь вот-вот переместят:

Проверьте, может ли фигура двигаться таким образом. (Подобно тому, как слон может двигаться только по диагонали)

Убедитесь, что фигура вашей команды не находится на той позиции, которую вы собираетесь переместить.

Создайте второй массив, в котором перемещение уже произошло.

Проверьте, был ли переезд законным. (Твоя очередь, но твоего короля можно убить одним движением)

Чтобы проверить это, вам нужно:

Чтобы получить свою позицию королей

А потом искать все возможные ходы для противника

проверьте, может ли ход приземлиться на позицию ваших королей.

person Dzha    schedule 19.06.2012
comment
Я создал массив с именем position, в котором хранится положение фигур в начальной позиции. Но как потом обновить? На самом деле, я понимаю логику, но у меня проблемы с реальной реализацией. - person Rohit Shinde; 19.06.2012
comment
Если перемещение допустимо: сохраните содержимое текущей позиции в переменной, удалите содержимое текущей позиции и скопируйте содержимое переменной в новую позицию. - person Dzha; 19.06.2012
comment
Но как мне проверить, является ли это законным ходом? Можете ли вы дать мне код для этого? - person Rohit Shinde; 19.06.2012

Этот вопрос не совсем подходит для переполнения стека, но я дам вам указатель:

Вам нужно создать класс с именем ChessPiece

У него будут такие свойства, как IsWhite, LocationX и LocationY, которые хранят его текущую позицию на доске, и PieceType, который будет перечислением вроде этого:

Public Enum ChessPieceType
    King
    Queen
    Bishop
    Pawn
    'etc
End Enum

Вам нужно создать какой-то массив этих классов, чтобы у вас было по одному для каждой фигуры на доске, и вы могли устанавливать эти позиции вручную при запуске игры.

Когда пользователь пытается переместить фигуру, вы проверяете перечисление PieceType, чтобы убедиться, что этот тип шахматной фигуры действительно может туда перемещаться, а затем проверяете, что на этой клетке нет ни одной из его собственных фигур и т. д. и т. д.

person Matt Wilko    schedule 19.06.2012