Взаимные угрозы шахматных фигур в числовой разнице [Евгений Роменович Сова] (pdf) читать постранично, страница - 2

Книга в формате pdf! Изображения и текст могут не отображаться!


 [Настройки текста]  [Cбросить фильтры]

3-й фигуры.
Let f3 = chebo(dc3x, dc3y)
' Проверяем конфликтность между 1-й и 3-й, 2-й и 3-й фигурами:

For index = 1 To 31
If Abs(f1 - f3) = dif(index) Then GoTo chessgenerate
If Abs(f2 - f3) = dif(index) Then GoTo chessgenerate
Next index
' Генерируем расположение 4-й фигуры (коня) по координатам X и Y.
Let dc4x = Int(Rnd * 8 + 1)
Let dc4y = Int(Rnd * 8 + 1)
' Получаем № клетки исходя из получившегося расположения 4-й фигуры.
Let f4 = chebo(dc4x, dc4y)
' Проверяем конфликтность между 1-й и 4-й, 2-й и 4-й, 3-й и 4-й фигурами:
For index = 1 To 31
If Abs(f1 - f4) = dif(index) Then GoTo chessgenerate
If Abs(f2 - f4) = dif(index) Then GoTo chessgenerate
If Abs(f3 - f4) = dif(index) Then GoTo chessgenerate
Next index
' Генерируем расположение 5-й фигуры (ладьи) по координатам X и Y.
Let dc5x = Int(Rnd * 8 + 1)
Let dc5y = Int(Rnd * 8 + 1)
' Получаем № клетки исходя из получившегося расположения 5-й фигуры.
Let f5 = chebo(dc5x, dc5y)
' Проверяем конфликтность между 1-й и 5-й, 2-й и 5-й, 3-й и 5-й, 4-й и 5-й
фигурами:
For index = 1 To 31
If Abs(f1 - f5) = dif(index) Then GoTo chessgenerate
If Abs(f2 - f5) = dif(index) Then GoTo chessgenerate
If Abs(f3 - f5) = dif(index) Then GoTo chessgenerate
If Abs(f4 - f5) = dif(index) Then GoTo chessgenerate
Next index
' Контрольная проверка на отсутствие конфликтов между всеми фигурами.
For index = 1 To 31
If Abs(f1 - f2) = dif(index) Then GoTo chessgenerate
If Abs(f1 - f3) = dif(index) Then GoTo chessgenerate
If Abs(f1 - f4) = dif(index) Then GoTo chessgenerate
If Abs(f1 - f5) = dif(index) Then GoTo chessgenerate
If Abs(f2 - f3) = dif(index) Then GoTo chessgenerate
If Abs(f2 - f4) = dif(index) Then GoTo chessgenerate
If Abs(f2 - f5) = dif(index) Then GoTo chessgenerate
If Abs(f3 - f4) = dif(index) Then GoTo chessgenerate
If Abs(f3 - f5) = dif(index) Then GoTo chessgenerate
If Abs(f4 - f5) = dif(index) Then GoTo chessgenerate
Next index
В общем получаем универсальный ряд из 42 чисел для всех четырёх
разновидностей шахмат: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 14, 15, 16, 17, 18, 19, 21,
20, 24, 27, 28, 30, 32, 35, 36, 40, 42, 45, 48, 49, 50, 54, 56, 60, 63, 64, 70, 72, 80,
81.
' Записываем ряд из 42 чисел.
Data
0,1,2,3,4,5,6,7,8,9,10,11,14,15,16,17,18,19,21,20,24,27,28,30,32,35,36,40,
42,45,48,49,50,54,56,60,63,64,70,72,80,81
' Объявляем массив соответствующего размера.
Dim Shared dif(1 To 42) As Integer
' Заполняем значениями из ряда чисел.
For index = 1 To 42
Read dif(index)
Next index

Изначально максимальное количество угроз на клетку равняется количеству
задействованных фигур. Однако после проверки на конфликтность становится
меньше на 1 в макрук и сёги, на 2 в сянци, и лишь шахматы сохраняют 5 в крайне
ограниченном количестве расстановок.
Исходный код: http://sf.net/projects/divgen/
Тематический сайт: http://truechess.org/
Спасибо за внимание!