Разбор устройства игры
Идея игры крайне проста. У нас есть два вырезанных контура 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
Если остались вопросы, спрашивайте в комментариях или пишите мне на почту.