Алгоритм игр. Создание в Construct 2

Содержание

Слайд 2

Алгоритм игр "3 в ряд"

Алгоритм игр "3 в ряд"

Слайд 3

Структура урока Часть 1 Часть 2 Создание в Construct 2 визуальной

Структура урока

Часть 1

Часть 2

Создание в Construct 2 визуальной части игры.
Позиционирование элементов

на поле;
Определение соседей;
Обмен фишками;

Анализ возможности обмена фишками;
Определение групп сливания. Анализ поля;
Восстановление фишек на поле;
Небольшая детализация игры

Слайд 4

Определение соседей abs(CurElmSelX-CurElmUnSelX)+abs(CurElmSelY-CurElmUnSelY) (CurElmSelX, CurElmSelY) -1 0 +1 +2 -2 -1

Определение соседей

abs(CurElmSelX-CurElmUnSelX)+abs(CurElmSelY-CurElmUnSelY)

(CurElmSelX, CurElmSelY)

-1 0 +1 +2

-2
-1
0

+1

F = |X1-X2|+|Y1-Y2|

(X1,Y1)

(X2,Y2)

(CurElmUnSelX, CurElmUnSelY)

Слайд 5

Алгоритм игры «3 в ряд» Новая игра Генерировать поле Есть готовые

Алгоритм игры «3 в ряд»

Новая игра

Генерировать поле

Есть готовые
слития?

Да

Нет

или

Ждать действий
игрока

Есть

обмены
на слития?

Да

Нет

Добавление фишек

Анализ поля

конец игры

Анализ на обмены

Слитие групп

Слайд 6

Данные поля с фишками

Данные поля с фишками

Слайд 7

2 7 5 1 8 4 3 4 3 5 4

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

Данные поля с фишками

Слайд 8

Анализ готовых групп M(X, Y) – массив поля с фишками NChBlock

Анализ готовых групп

M(X, Y) – массив поля с фишками

NChBlock - Число

фишек в текущей группе

ChBlock – число группы/предыдущего поля

Параметры алгоритма:

Anlz - Число групп

ChBlock = 4

NChBlock = NChBlock +1

Y = 3

X = 1 --> 6

X

Y

Слайд 9

Алгоритм: анализ готовых групп 'АНАЛИЗ ПО ГОРИЗОНТАЛИ ЦИКЛ Y = 1

Алгоритм: анализ готовых групп

'АНАЛИЗ ПО ГОРИЗОНТАЛИ
ЦИКЛ Y = 1 To 6

‘ Поле 6х 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
Слайд 10

Анализ готовых групп 'АНАЛИЗ ПО ВЕРТИКАЛИ ЦИКЛ X = 1 To

Анализ готовых групп

'АНАЛИЗ ПО ВЕРТИКАЛИ
ЦИКЛ X = 1 To 6
NChBlock

= 0 'Число фишек в текущей группе
ЦИКЛ 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
Слайд 11

Слитие групп. Опадание фишек ChBlock – разным фишкам разные очки NChBlock

Слитие групп.
Опадание фишек

ChBlock – разным фишкам разные очки

NChBlock – чем

длиннее группа,
тем больше очков

Anlz – число групп; комбо-сливания

Слайд 12

ЦИКЛ 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

Опадание фишек

Слайд 13

Анализ на обмены Поиск определённых конструкций

Анализ на обмены

Поиск определённых конструкций

Слайд 14

Анализ на обмены Ф 1 1 Ф Ф 1 Ф Ф

Анализ на обмены

Ф

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

‘Размер по

Y
Слайд 15

NChange = 0 'Число возможных обменов на слития ЦИКЛ I =

NChange = 0 'Число возможных обменов на слития
ЦИКЛ I = 1

To 10 ’Перебор чисел различных фишек
ЦИКЛ НомерМаски = 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