Шахматки

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
netdemon
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 179
Зарегистрирован: 04.09.2007 (Вт) 15:51

Шахматки

Сообщение netdemon » 15.03.2008 (Сб) 12:39

Помогите написать алгоритм проверки корректности хода для шахмат

Поле задано массивом 8х8 нумерация слева направо, сверху вниз.

:)
Лишь разум потерянный бесповоротно мною. Наполнить может сердце мне тоской.
Нельзя обнять необъятное и впихнуть невпихуемое.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 15.03.2008 (Сб) 14:06

Как заданы фигуры? Это объекты? Или просто значение в матрице?
Lasciate ogni speranza, voi ch'entrate.

netdemon
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 179
Зарегистрирован: 04.09.2007 (Вт) 15:51

Сообщение netdemon » 15.03.2008 (Сб) 14:57

Фигуры заданы так:

Код: Выделить всё
Public Punit(32) as cChessUnit



И Вот сам проект:
Вложения
CChessUnit.zip
(791 байт) Скачиваний: 41
Chess.zip
(98.99 Кб) Скачиваний: 46
Лишь разум потерянный бесповоротно мною. Наполнить может сердце мне тоской.
Нельзя обнять необъятное и впихнуть невпихуемое.

netdemon
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 179
Зарегистрирован: 04.09.2007 (Вт) 15:51

Сообщение netdemon » 16.03.2008 (Вс) 12:43

Вот проверочка на шах пешкой и конём. :)
Код: Выделить всё
Public Function IsCheck(up As UPOS, ucolor) As Boolean
  ' up-позиция короля ; ucolor-цвет короля
  Dim retval As Boolean
  Dim i As Integer
  Dim j As Integer
 
 
  retval = False
    ' Проверка на *ШАХ* лошадкой и пешкой
   For i = 0 To 7
    For j = 0 To 7
      If PUnit(i).gColor <> ucolor And PUnit(i).gUnit = PAWN And (PUnit(i).LinePos = up.uLine + 1 And (PUnit(i).ColPos = up.uColumn + 1 Or PUnit(i).ColPos = up.uColumn + 1)) Then retval = True: Exit For
      If PUnit(i).gColor <> ucolor And PUnit(i).gUnit = HORSE And ((PUnit(i).LinePos = up.uLine + 2 And (PUnit(i).ColPos = up.uColumn + 1 Or PUnit(i).ColPos = up.uColumn - 1))) Or _
                                    ((PUnit(i).LinePos = up.uLine - 2 And (PUnit(i).ColPos = up.uColumn + 1 Or PUnit(i).ColPos = up.uColumn - 1))) Or _
                                    ((PUnit(i).ColPos = up.uColumn - 2 And (PUnit(i).LinePos = up.uLine - 1 Or PUnit(i).LinePos = up.uLine + 1))) Or _
                                    ((PUnit(i).ColPos = up.uColumn - 2 And (PUnit(i).LinePos = up.uLine - 1 Or PUnit(i).LinePos = up.uLine + 1))) Then retval = True: Exit For
    Next j
   Next i
IsCheck = retval
End Function
Лишь разум потерянный бесповоротно мною. Наполнить может сердце мне тоской.
Нельзя обнять необъятное и впихнуть невпихуемое.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 28

    TopList