Содержание
- 2. Алгоритм игр "3 в ряд"
- 3. Структура урока Часть 1 Часть 2 Создание в Construct 2 визуальной части игры. Позиционирование элементов на
- 4. Определение соседей abs(CurElmSelX-CurElmUnSelX)+abs(CurElmSelY-CurElmUnSelY) (CurElmSelX, CurElmSelY) -1 0 +1 +2 -2 -1 0 +1 F = |X1-X2|+|Y1-Y2|
- 5. Алгоритм игры «3 в ряд» Новая игра Генерировать поле Есть готовые слития? Да Нет или Ждать
- 6. Данные поля с фишками
- 7. 2 7 5 1 8 4 3 4 3 5 4 2 1 7 2 9
- 8. Анализ готовых групп M(X, Y) – массив поля с фишками NChBlock - Число фишек в текущей
- 9. Алгоритм: анализ готовых групп 'АНАЛИЗ ПО ГОРИЗОНТАЛИ ЦИКЛ Y = 1 To 6 ‘ Поле 6х
- 10. Анализ готовых групп 'АНАЛИЗ ПО ВЕРТИКАЛИ ЦИКЛ X = 1 To 6 NChBlock = 0 'Число
- 11. Слитие групп. Опадание фишек ChBlock – разным фишкам разные очки NChBlock – чем длиннее группа, тем
- 12. ЦИКЛ X = 1 To 8 NHole = 0 'Число незакрытых пропусков в текущем столбце For
- 13. Анализ на обмены Поиск определённых конструкций
- 14. Анализ на обмены Ф 1 1 Ф Ф 1 Ф Ф Ф Ф Ф Ф Ф
- 15. NChange = 0 'Число возможных обменов на слития ЦИКЛ I = 1 To 10 ’Перебор чисел
- 17. Скачать презентацию
Алгоритм игр "3 в ряд"
Алгоритм игр "3 в ряд"
Структура урока
Часть 1
Часть 2
Создание в Construct 2 визуальной части игры.
Позиционирование элементов
Структура урока
Часть 1
Часть 2
Создание в Construct 2 визуальной части игры.
Позиционирование элементов
Определение соседей;
Обмен фишками;
Анализ возможности обмена фишками;
Определение групп сливания. Анализ поля;
Восстановление фишек на поле;
Небольшая детализация игры
Определение соседей
abs(CurElmSelX-CurElmUnSelX)+abs(CurElmSelY-CurElmUnSelY)
(CurElmSelX, CurElmSelY)
-1 0 +1 +2
-2
-1
0
Определение соседей
abs(CurElmSelX-CurElmUnSelX)+abs(CurElmSelY-CurElmUnSelY)
(CurElmSelX, CurElmSelY)
-1 0 +1 +2
-2
-1
0
F = |X1-X2|+|Y1-Y2|
(X1,Y1)
(X2,Y2)
(CurElmUnSelX, CurElmUnSelY)
Алгоритм игры «3 в ряд»
Новая игра
Генерировать поле
Есть готовые
слития?
Да
Нет
или
Ждать действий
игрока
Есть
Алгоритм игры «3 в ряд»
Новая игра
Генерировать поле
Есть готовые
слития?
Да
Нет
или
Ждать действий
игрока
Есть
на слития?
Да
Нет
Добавление фишек
Анализ поля
конец игры
Анализ на обмены
Слитие групп
Данные поля с фишками
Данные поля с фишками
2
7
5
1
8
4
3
4
3
5
4
2
1
7
2
9
7
4
8
8
2
4
8
6
8
3
1
2
8
2
5
7
2
9
4
7
Данные поля с фишками
2
7
5
1
8
4
3
4
3
5
4
2
1
7
2
9
7
4
8
8
2
4
8
6
8
3
1
2
8
2
5
7
2
9
4
7
Данные поля с фишками
Анализ готовых групп
M(X, Y) – массив поля с фишками
NChBlock - Число
Анализ готовых групп
M(X, Y) – массив поля с фишками
NChBlock - Число
ChBlock – число группы/предыдущего поля
Параметры алгоритма:
Anlz - Число групп
ChBlock = 4
NChBlock = NChBlock +1
Y = 3
X = 1 --> 6
X
Y
Алгоритм: анализ готовых групп
'АНАЛИЗ ПО ГОРИЗОНТАЛИ
ЦИКЛ Y = 1 To 6
Алгоритм: анализ готовых групп
'АНАЛИЗ ПО ГОРИЗОНТАЛИ
ЦИКЛ Y = 1 To 6
NChBlock = 0 'Число фишек в текущей группе
ЦИКЛ X = 1 To 6
ЕСЛИ X = 1 ТО ChBlock = | M(X, Y) |
ЕСЛИ | M(X, Y) | = ChBlock ТО ‘ChBlock – число группы
NChBlock = NChBlock + 1
ИНАЧЕ
ЕСЛИ NChBlock > 2 ТО 'Найдена группа из NChBlock фишек ChBlock(>=3)
'Код подсчёта групп/очков '--->
Anlz = Anlz + 1 ’ Число групп. Факт нахождения групп
'Выделение группы
ЦИКЛ L = 0 To (NChBlock - 1)
M(X - NChBlock + L, Y) = (-1) * | M(X - NChBlock + L, Y) | 'Замена знака у готовых групп
КОНЕЦ ЦИКЛА L
КОНЕЦ ЕСЛИ
ChBlock = | M(X, Y) | 'Сброс группы на новую
NChBlock = 1
КОНЕЦ ЕСЛИ
ЕСЛИ (X = 6) And (NChBlock > 2) ТО 'Концевая группа
'Код подсчёта групп/очков '--->
Anlz = Anlz + 1
'Выделение группы
ЦИКЛ L = 1 To NChBlock
M(X - NChBlock + L, Y) = (-1) * | M(X - NChBlock + L, Y) | 'Замена знака у готовых групп
КОНЕЦ ЦИКЛА L
КОНЕЦ ЕСЛИ
КОНЕЦ ЦИКЛА X
КОНЕЦ ЦИКЛА Y
Анализ готовых групп
'АНАЛИЗ ПО ВЕРТИКАЛИ
ЦИКЛ X = 1 To 6
NChBlock
Анализ готовых групп
'АНАЛИЗ ПО ВЕРТИКАЛИ
ЦИКЛ X = 1 To 6
NChBlock
ЦИКЛ Y = 1 To 6
ЕСЛИ Y = 1 ТО ChBlock = | M(X, Y) |
ЕСЛИ | M(X, Y) | = ChBlock ТО
NChBlock = NChBlock + 1
ИНАЧЕ
ЕСЛИ NChBlock > 2 ТО 'Найдена группа из NChBlock фишек ChBlock(>=3)
'Код подсчёта групп/очков '--->
Anlz = Anlz + 1
'Выделение группы
ЦИКЛ L = 0 To (NChBlock - 1)
M(X, Y - NChBlock + L) = (-1) * | M(X, Y - NChBlock + L) | 'Замена знака у готовых групп
КОНЕЦ ЦИКЛА L
КОНЕЦ ЕСЛИ
ChBlock = | M(X, Y) |'Сброс группы на новую
NChBlock = 1
КОНЕЦ ЕСЛИ
ЕСЛИ (Y = 6) And (NChBlock > 2) ТО 'Концевая группа
'Код подсчёта групп/очков '--->
Anlz = Anlz + 1
'Выделение группы
ЦИКЛ L = 1 To NChBlock
M(X, Y - NChBlock + L) = (-1) * | M(X, Y - NChBlock + L) | 'Замена знака у готовых групп
КОНЕЦ ЦИКЛА L
КОНЕЦ ЕСЛИ
КОНЕЦ ЦИКЛА Y
КОНЕЦ ЦИКЛА X
Слитие групп.
Опадание фишек
ChBlock – разным фишкам разные очки
NChBlock – чем
Слитие групп.
Опадание фишек
ChBlock – разным фишкам разные очки
NChBlock – чем
тем больше очков
Anlz – число групп; комбо-сливания
ЦИКЛ X = 1 To 8
NHole = 0 'Число незакрытых
ЦИКЛ X = 1 To 8
NHole = 0 'Число незакрытых
For Y = 8 To 1 Шаг (-1)
ЕСЛИ M(X, Y) < 0 ТО 'Пропуск
NHole = NHole + 1 'Подсчет вертикали пропусков
ЕСЛИ NHole = 1 ТО YHole = Y 'Самый нижний пропуск
КОНЕЦ ЕСЛИ
ЕСЛИ (M(X, Y) > 0) И (NHole > 0) ТО 'Фишка над пропуском
M(X, YHole) = M(X, Y) 'Упавшая фишка
YHole = YHole - 1 'Перемещение самого нижнего пропуска
M(X, Y) = -1 ‘Вместо упавшей фишки пропуск
КОНЕЦ ЕСЛИ
КОНЕЦ ЦИКЛА Y
КОНЕЦ ЦИКЛА X
Опадание фишек
Анализ на обмены
Поиск определённых конструкций
Анализ на обмены
Поиск определённых конструкций
Анализ на обмены
Ф
1
1
Ф
Ф
1
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
0
0
0
Ф
0
1
Ф
Ф
1
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
1
0
0
Ф
0
0
Ф
Ф
1
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
1
1
0
Ф
1
0
Ф
Ф
0
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
0
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1)
2)
3)
4)
5)
6)
1
Ф
Ф
1
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
1
0
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
0
0
Ф
Ф
Ф
Ф
Ф
Ф
Ф
1
1
Ф
Ф
1
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
1
0
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
0
1
1
Ф
Ф
Ф
Ф
Ф
Ф
Ф
0
0
Ф
Ф
1
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
0
0
Ф
Ф
Ф
Ф
Ф
Ф
Ф
1
0
Ф
Ф
1
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
0
1
1
Ф
Ф
Ф
Ф
Ф
Ф
Ф
0
0
Ф
Ф
1
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
0
1
Ф
Ф
Ф
Ф
Ф
Ф
Ф
0
1
Ф
Ф
1
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
1
0
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
0
1
0
Ф
Ф
Ф
Ф
Ф
Ф
Ф
1
1
1
1
Ф
1
Ф
Ф
Ф
Ф
Ф
Ф
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
0
1
Ф
Ф
Ф
Ф
Ф
Ф
Ф
1
1
1
1
1
1
1
1
1
1
1
1
Ф
1
Ф
Ф
Ф
Ф
Ф
Ф
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
0
Ф
Ф
Ф
Ф
Ф
Ф
Ф
1
1
1
1
1
1
1
1
1
1
1
1
Ф
Ф
Ф
Ф
Ф
Ф
Ф
1
1
1
1
1
1
1
1
1
1
1
0
1
1
Ф
Ф
Ф
Ф
Ф
Ф
Ф
1
1
1
1
1
1
1
1
1
1
0
1
1
0
0
0
0
0
1
1
1
1
1
7)
8)
9)
10)
11)
12)
13)
14)
15)
16)
1
1
1
1
1
1
1
1
1
0
0
MK(11,1)=3
MK(11,2)=2
MS(11,2,1)=1
MS(11,1,2)=1
MS(11,3,2)=1
Очистка трёхмерного цикла
Цикл MS(1-16,1-4,1-4)=0 Конец цикла
‘Размер по X
‘Размер по
Анализ на обмены
Ф
1
1
Ф
Ф
1
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
0
0
0
Ф
0
1
Ф
Ф
1
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
1
0
0
Ф
0
0
Ф
Ф
1
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
1
1
0
Ф
1
0
Ф
Ф
0
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
0
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1)
2)
3)
4)
5)
6)
1
Ф
Ф
1
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
1
0
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
0
0
Ф
Ф
Ф
Ф
Ф
Ф
Ф
1
1
Ф
Ф
1
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
1
0
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
0
1
1
Ф
Ф
Ф
Ф
Ф
Ф
Ф
0
0
Ф
Ф
1
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
0
0
Ф
Ф
Ф
Ф
Ф
Ф
Ф
1
0
Ф
Ф
1
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
0
1
1
Ф
Ф
Ф
Ф
Ф
Ф
Ф
0
0
Ф
Ф
1
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
0
1
Ф
Ф
Ф
Ф
Ф
Ф
Ф
0
1
Ф
Ф
1
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
Ф
1
0
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
0
1
0
Ф
Ф
Ф
Ф
Ф
Ф
Ф
1
1
1
1
Ф
1
Ф
Ф
Ф
Ф
Ф
Ф
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
0
1
Ф
Ф
Ф
Ф
Ф
Ф
Ф
1
1
1
1
1
1
1
1
1
1
1
1
Ф
1
Ф
Ф
Ф
Ф
Ф
Ф
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
0
Ф
Ф
Ф
Ф
Ф
Ф
Ф
1
1
1
1
1
1
1
1
1
1
1
1
Ф
Ф
Ф
Ф
Ф
Ф
Ф
1
1
1
1
1
1
1
1
1
1
1
0
1
1
Ф
Ф
Ф
Ф
Ф
Ф
Ф
1
1
1
1
1
1
1
1
1
1
0
1
1
0
0
0
0
0
1
1
1
1
1
7)
8)
9)
10)
11)
12)
13)
14)
15)
16)
1
1
1
1
1
1
1
1
1
0
0
MK(11,1)=3
MK(11,2)=2
MS(11,2,1)=1
MS(11,1,2)=1
MS(11,3,2)=1
Очистка трёхмерного цикла
Цикл MS(1-16,1-4,1-4)=0 Конец цикла
‘Размер по X
‘Размер по
NChange = 0 'Число возможных обменов на слития
ЦИКЛ I = 1
NChange = 0 'Число возможных обменов на слития
ЦИКЛ I = 1
ЦИКЛ НомерМаски = 1 To 16 'Номер маски
ЦИКЛ Y = 1 To (8 - MK(НомерМаски, 2) + 1)
ЦИКЛ X = 1 To (8 - MK(НомерМаски, 1) + 1)
Nmask = 0 'Совпадения с маской
ЦИКЛ My = 1 To MK(НомерМаски, 2)
ЦИКЛ Mx = 1 To MK(НомерМаски, 1)
ЕСЛИ (MS(НомерМаски, Mx, My) = 1) And (M(X + Mx - 1, Y + My - 1) = I) ТО
Nmask = Nmask + 1
КОНЕЦ ЕСЛИ
КОНЕЦ ЦИКЛА Mx
КОНЕЦ ЦИКЛА My
ЕСЛИ Nmask = 3 Then
NChange = NChange + 1 'Найденные 3 совпадения с маской
ПереходКМетке FindMoves
КОНЕЦ ЕСЛИ
КОНЕЦ ЦИКЛА X
КОНЕЦ ЦИКЛА Y
КОНЕЦ ЦИКЛА НомерМаски
КОНЕЦ ЦИКЛА I
МЕТКА_FindMoves:
Алгоритм анализа на обмены
1
2
1
2
3
I=5
X=1
Y=2
НомерМаски=1
MS(1,1,1)=1 и M(X',Y')=5 -> Nmask = 1
MS(1,1,2)=1 и M(X',Y')=5 -> Nmask = 2
MS(1,2,3)=1 и M(X',Y')=5 -> Nmask = 3
=>
NChange = 1