Найти в Дзене
Игры в Excel

Азартная Перестрелка

Разбор устройства игры

Правая часть игрового поля
Правая часть игрового поля
Левая часть игрового поля
Левая часть игрового поля
Средняя часть игрового поля
Средняя часть игрового поля

Идея игры крайне проста. У нас есть два вырезанных контура png-формата, сквозь которые видны окрашенные ячейки. Ячейки диапазонов "жоржик" и "бандюга" условно форматируются - при значении 1, они становятся черными.

Начальное значение урона жизнибандита и жизнижоржа =0, затем поочерёдно они наносят урон, равный случайному значению в пределах силы оружия. Это значение суммируется к урону каждого, при очередном выстреле выделяется ячейка "банд" или "жорж" и бежит вниз, по счётчику внутри макроса, проставляя 1 во все ячейки пока не будет достигнуто значение текущего урона.

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

вот финальный фрагмент из макроса "бандитос":

ActiveSheet.Shapes("Секундант").Select
Selection.OnAction = "Жоржи"
Range("A1").Select

ячейка А1 в конце выделяется, чтобы выделенной не оставалась стрелка (уязвимой для сдвижки, изменения, удаления)

Вот полный текст парных макросов:

Sub бандитос()
'
'

ВЫДЕЛЯЕМ СТРЕЛКУ И ПОВОРАЧИВАЕМ В НУЖНУЮ СТОРОНУ
ActiveSheet.Shapes("Секундант").Select
Selection.ShapeRange.Rotation = 0

БЕРЕМ ИМЕЮЩИЙСЯ УРОН ЖИЗНИ ЖОРЖА И НОВЫЙ ВЫСТРЕЛ БАНДИТА
zhizn = Range("жизньжоржа").Value
vistrel = Range("пуль").Value

ПРОЯВЛЯЕМ ТРАССИРОВКУ ВЫСТРЕЛА ОТ БАНДИТА, А ОТ ЖОРЖА СКРЫВАЕМ
Range("бантрас").Value = 1
Range("жоржтрас").Value = 0

СУММИРУЕМ УРОН И НОВЫЙ ВЫСТРЕЛ, НО НЕ ПРЕВЫШАЯ ПОЛНОЙ ЖИЗНИ
zhizn = zhizn + vistrel
If zhizn > 30 Then zhizn = 30

НАЧИНАЯ С ГОЛОВЫ ЖОРЖА, БЕЖИМ ВНИЗ И ЗАТЕМНЯЕМ НУЖНОЕ КОЛИЧЕСТВО ЯЧЕЕК, ПОВТОРЯЕМ ЦИКЛ ДО ВЫПОЛНЕНИЯ УСЛОВИЯ
Range("жорж").Select
i = 1
krug:
ActiveCell.Value = 1
ActiveCell.Offset(1, 0).Range("A1").Select
i = i + 1
If i > 30 Then GoTo fin
If i <= zhizn Then GoTo krug
fin:
ЗАНЕСЁМ НОВОЕ ЗНАЧЕНИЕ ПОЛНОГО УРОНА В НУЖНУЮ ЯЧЕЙКУ

Range("жизньжоржа").Value = zhizn

А ВОТ ТУТ МЫ ВЫДЕЛЯЕМ СТРЕЛКУ И НАЗНАЧАЕМ ЕЙ ДРУГОЙ МАКРОС
ActiveSheet.Shapes("Секундант").Select
Selection.OnAction = "Жоржи"
Range("A1").Select

End Sub

А ЭТО ЗЕРКАЛЬНЫЙ МАКРОС. НА ЭТОТ РАЗ ОФИЦЕР НАНОСИТ УРОН БАНДИТУ

Sub Жоржи()
'
'
ActiveSheet.Shapes("Секундант").Select
Selection.ShapeRange.Rotation = 180
zhizn = Range("жизньбандита").Value
vistrel = Range("бабах").Value
Range("бантрас").Value = 0
Range("жоржтрас").Value = 1
zhizn = zhizn + vistrel
If zhizn > 30 Then zhizn = 30
Range("банд").Select
i = 1
krug:
ActiveCell.Value = 1
ActiveCell.Offset(1, 0).Range("A1").Select
i = i + 1
If i > 30 Then GoTo fin
If i <= zhizn Then GoTo krug
fin:
Range("жизньбандита").Value = zhizn
ActiveSheet.Shapes("Секундант").Select
Selection.OnAction = "бандитос"
Range("A1").Select
End Sub

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

После очередной перестрелки мы нажимаем на дуэльные пистолеты и макрос "Заново" всё возвращает в исходное состояние

Sub Заново()
Range("бандюга").Value = 0
Range("жоржик").Value = 0
Range("бантрас").Value = 0
Range("жоржтрас").Value = 0
Range("жизньжоржа").Value = 0
Range("жизньбандита").Value = 0
End Sub

Если остались вопросы, спрашивайте в комментариях или пишите мне на почту.