Как создать игру шашки в excel
Excel – это бесконечно продвинутый инструмент, который сегодня используют во многих сферах. Ведение семейного бюджета, математические расчеты, планирование рекламных кампаний, записи для научных исследований и иногда даже полноценные RPG-игры – это только часть того, на что способна программа от Microsoft.
К сожалению, большинство людей используют ее только для составления простых таблиц, даже не подозревая, каким потенциалом на деле обладает Excel. В этой статье мы поделимся 9 лайфхаками, которые заставят вас по-новому взглянуть на возможности этой программы.
Растягивание ячеек
Прежде чем перейти к более серьезным фишкам, устроим небольшую разминку. Вы удивитесь, но даже о такой базовой функции, как растягивание информации в ячейках, знают далеко не все.
Как это работает? Допустим, вам нужно сделать столбец, в котором будут числа от 1 до 15. Конечно, вы можете потратить время и сами забить цифры в каждую ячейку, но такую работу с большим трудом можно назвать продуктивной. Гораздо лучше – растянуть ячейку.
Умный Excel сделает все самостоятельно. Для этого:
- Добавьте начальную цифру. В нашем случае это 1.
- Зажмите клавишу Ctrl.
- Потяните за правую нижнюю часть ячейки.
Удаление повторов
Например, вы составляете топ ключевых слов для SEO-продвижения сайта или делаете список сотрудников отдела продаж – в любом случае стоит избегать дубликатов в ячейках. Вы можете довериться своей внимательности и выделить все повторы самостоятельно, но гораздо удобнее и быстрее – воспользоваться встроенной функцией Excel для поиска дубликатов.
Для этого выделите нужную область, зайдите в раздел «Данные» и кликните на кнопку «Удалить дубликаты».
Для примера мы удалили дубликаты в онлайн-версии Excel. Но эта возможность также доступна и в обычной версии программы для Windows или macOS
Для примера мы удалили дубликаты в онлайн-версии Excel. Но эта возможность также доступна и в обычной версии программы для Windows или macOS
Быстрое изменение регистра букв
Достаточно воспользоваться функцией «СТРОЧН» и выделить диапазон значений. Так вы быстро поменяете регистр.
И наоборот – если буквы во всех словах нужно сделать большими, используйте «ПРОПИСН».
Создание очень секретного листа
Если вы составляете бизнес-план того, как в будущем ваша корпорация получит контроль над всем миром, не стоит держать эту информацию открытой для всех в Excel-табличке. Ситуация серьезная, поэтому обычным скрытием листа здесь не обойтись.
Чтобы информация стала полностью невидимой для посторонних, сделайте следующее:
- Нажмите клавиши Alt и F11.
- Выберите номер листа.
- Выберите свойство Visible.
- Выберите опцию xlSheetVeryHidden.
Теперь вся тайная информация будет абсолютно недосягаема для чужих глаз.
Блокирование изменений в таблице задним числом
Очень актуальная функция для тех, кто использует Excel для работы в команде. Например, вам нужно, чтобы после определенного дня сотрудники не могли самостоятельно изменить информацию в таблицах.
Вот что вам нужно сделать:
- Кликните на ячейку и выберите раздел «Данные».
- Нажмите на кнопку «Проверка данных».
- Выберите «Другой» в списке «Тип данных».
- Добавьте текст «=А2=СЕГОДНЯ()» в графу «Формула».
- Уберите галочку с «Игнорировать пустые ячейки» и кликните «Ок».
Теперь, если кто-то захочет ввести другие данные в эту ячейку, появится предупреждение. Это же можно сделать и с другими ячейками в таблице.
Создание небольших графиков прямо в ячейках
Иногда использовать большую диаграмму в таблице не совсем уместно, но как-то представить информацию графически все равно хочется. Здесь на помощь приходят спарклайны – маленькие графики или диаграммы, находящиеся прямо в ячейках.
Чтобы создать спарклайн:
- Перейдите на вкладку «Вставка».
- Кликните на тип спарклайна, который хотите добавить в вашу таблицу.
- Укажите диапазон данных, на основе которых будет строиться график или диаграмма.
Импорт курса валют
Работаете с иностранными компаниями или просто хотите, чтобы актуальный курс всегда был перед глазами? Excel легко может показать эту информацию. При этом не нужно будет делать copy-paste с финансовых сайтов – программа справится без вашей помощи.
Для импорта курса валют:
Отображение данных из таблицы Excel на карте
Microsoft стремится, чтобы ее продукты работали вместе и дополняли друг друга. Например, начиная с Office 2013 возможен необычный кроссовер программы Excel и карты Bing. Кейсов использования такого дуэта предостаточно!
Например, у вас есть офисы в 10 городах России и вы хотите наглядно показать продажи в различных торговых точках. Конечно, можете сделать скриншот карты и потом добавить его в таблицу, но это займет больше времени и будет не так информативно.
Чтобы добавить интерактивную карту:
- Перейдите на вкладку «Вставка» и кликните на «Магазин приложений».
- Найдите и установите плагин Bing Maps.
- Выберите плагин в списке «Мои приложения» на вкладке «Вставка» и поместите его на рабочий лист.
- Определите диапазон и кликните Show Locations на модуле карты.
Преобразование строк в столбцы и обратно
Нужно сделать из строк столбцы? Необязательно тратить на такую рутинную задачу драгоценное время. Достаточно воспользоваться встроенными возможностями Excel:
- Выберите ячейки, которые хотите перенести.
- Нажмите «Ctrl + C».
- Кликните правой кнопкой мышки по ячейке, в которую хотите транспонировать данные.
- Выберите «Транспонировать» в «Параметрах вставки».
Где можно побольше узнать о возможностях Excel?
Эти 9 лайфхаков – лишь малая часть того, на что действительно способен Excel. В умелых руках этот привычный инструмент в разы упрощает работу и оптимизирует процессы в компаниях.
Однако бесплатные онлайн-справочники и видео на YouTube дают очень отрывочные знания по Excel. У них нет общего плана, в каком порядке вы должны получать знания. Не говоря уже о том, что информацию из таких курсов никто не перепроверяет и там вполне могут оказаться ошибки.
Если уж браться за обучение, стоит обращаться к профессионалам. Курс « Excel: от новичка до эксперта » – отличная возможность получить новые навыки и прокачаться как специалист. За время учебы вы узнаете, как работать со сводными таблицами, писать макросы и сложные формулы, красиво представлять полученную информацию с помощью графиков и диаграмм.
Преимущества обучения на курсе
✅ Интерактив и практические занятия. Никакой скуки вроде унылых лекций от запинающихся преподавателей. На курсе вас ждут только тренажеры, дублирующие интерфейс Excel, игры и живые кейсы из практики.
✅ Учеба в своем темпе. Можете пройти курс за полторы недели, а можете – за месяц. Все зависит от вашего упорства и тяги к новым знаниям.
✅ Возможность оплаты курса в рассрочку без процентов. Не стоит откладывать учебу на потом, даже если сейчас у вас нет всей нужной суммы.
✅ Помощь в трудоустройстве. Мы разошлем ваше резюме по нашей базе корпоративных клиентов, среди которых – ведущие российские и международные компании: Cбербанк, Gett, МТС, Билайн, Мегафон, Ростелеком, ПИК, X5 Retail Group.
Сейчас на обучение действует специальная цена. Достаточно при заказе курса назвать менеджеру промокод ДЗЕН, и ваша скидка составит 50 %!
Аналитикам, экономистам, финансовым менеджерам и вообще всем, кто работает с цифрами, не обойтись без твердых и качественных знаний в Excel. Запишитесь на курс «Excel: от новичка до эксперта» и получите навыки, которые пригодятся в самых разных компаниях и областях – от геймдева до инвестирования >>>
Разбор создания игры в Excel
При создании игры мы преследовали две цели:
- Продемонстрировать возможности программирования и визуализации в Excel. На примере научить вас некоторым приемам создания пользовательской формы и макросов, которые с ней взаимодействуют.
- Разнообразить досуг после плодотворной работы в Excel. Игра также встроена в нашу надстройку VBA-Excel чтобы она всегда была под рукой.
Разработка игрового поля
Игровое поле пятнашек состоит по сути из 16 фишек, можно также добавить кнопкой перемешать (начать с начала) и отображением количества шагов. В качестве фишек мы будем использовать обычные кнопки CommandButton - 16 штук.
Расположим их в виде поля 4x4. Уберем стандартное название кнопок (а свойство Caption) сделаем их квадратными в форме фишек. Вообще тут можно дать волю фантазии наложить тени, выбрать цвет и так далее, углубляться не будем. На игровое поле мы добавили также кнопку перемешать. Она будет служить для сброса и начала новой игры.
Добавили текстовые поля Label , в которые будем записывать количество потраченных шагов и лучший счет. Что получилось видно на картинке.
Еще один момент, чтобы кнопки не "нажимались" (т.е., чтобы по клику не происходила анимация нажатия на кнопку), установим свойство Locked в положение True.
Механика игры
Управление перемещением фишек будем реализовывать путем нажатия на стрелки вверх, вниз, влево и вправо. При нажатии на стрелки будем менять текст кнопок (свойство Caption) в зависимости от направления. С анимацией не будем мудрить, сами фишки не будем перемещать, будем просто мгновенно менять текст фишки с одного на другой, визуально будет казаться, что фишка переместилась по полю.
Старт игры
Инициализация формы вызываем процедуру создания поля.
Функция проверки заряженного числа на четность
Создадим процедуры, которые будут перемещать наши фишки. Ниже приведена одна из них, остальные аналогичные, можете найти их в файле.
В конце делаем проверку поля и проверяем правильно ли игрок расставил фишки.
Осталось "отловить" нажатие стрелок на клавиатуре и запускать нужное движение. Для этого воспользуемся событием формы UserForm_KeyDown.
Все мы знакомы с Excel. Вот и я, душный банковский служащий, что-то да слышал об этом инструменте.
Одни люди умеют лишь форматировать ячейки, другие создают клоны Doom, используя встроенный в Microsoft Office язык программирования.
Я не претендую на второй тип, но и к первым себя не отношу. Для меня Visual Basic for Applications, или VBA, стал тем первым ЯП, который заинтересовал и позволил уверовать в свои силы. Путешествие в этот интересный мир началось с автоматической записи макросов и разбора созданного программой кода.
Как начинающему программисту-самоучке, мне приходилось активно шерстить интернет в поисках решения возникающих проблем. Огромное коммьюнити, большое количество тематических сайтов и, на крайний случай, справка Microsoft помогали в решении практически любой проблемы.
Однако наступил такой момент, когда все рабочие задачи оказались решены и автоматизированы, а внутреннему программисту (ха-ха) все ещё хотелось чего-то большего.
Тогда меня осенило! В Excel ведь можно делать игры. Первая же найденная статья от программиста, который в армии клепал на основе VBA разные вещи, подтвердила мою теорию.
Эта серия статей не была задумана как обучающая (ведь я сам ещё учусь), но если что-нибудь изложенное будет полезно начинающим программистам, которые только погружаются в мир Visual Basic, то считайте, что я пополнил интернет одной полезной ссылкой.
Вторая цель создания цикла заключается в самообразовании и развитии навыков. Я буду ставить себе определенную цель, а потом исполнять ее наиболее приближенной к задумке.
К тому же где, как не в комментариях, мне доходчиво и культурным языком укажут на допущенные ошибки?
Я постараюсь объяснять все подробно, но без углубления в простейшие истины. Не буду рассказывать, что такое переменные, циклы или массивы. Всю эту информацию, изложенную доступным языком, можно найти в интернете.
В этих статьях я буду описывать процесс создания игр в Excel, начиная с простейших пятнашек и заканчивая глобальной RPG. Это позволит мне больше углубиться в тему, а вам поглумиться над неумехой-программистом. Или, в лучшем случае, забрать готовое решение на работу и скрывать безделье за мнимой подготовкой отчета. Ссылки на все исходные материалы будут в свободном доступе.
Темы первых статей цикла уже определены. В этой статье я расскажу, как сделать пятнашки в Excel. В следующий раз разберу создание игры в стиле Toon Blast.
Если вам, к моему удивлению, будет интересен такой формат, то пишите в комментариях, какого типа игры вы бы хотели, чтобы я реализовал на базе Excel.
Необходимо определиться с игровым полем. В данном случае все просто. Что есть пятнашки? Диапазон размером 4 на 4 ячейки, что в сумме даёт 16 ячеек. Переименовываем первый лист (по желанию), приводим нужные ячейки к квадратной форме и декорируем, как душе угодно. Получается примерно следующее:
На этом этапе необходимо в случайном порядке расположить числа от 1 до 15, а также пустое поле на выбранном диапазоне. Для этого открываем окно редактирования кода (Alt + F11), добавляем простой модуль (при желании и его можно переименовать для красоты).
Создаем публичную переменную rngPlayField, которая будет хранить координаты нашего игрового поля, и в методе initializeField() пишем следующий код:
Public rngPlayField As Range Sub initializeField() Dim collNumbers As New Collection, countNumbers As Byte, rndNumber As Byte, fndCells As Range Set rngPlayField = Sheets("MAIN").Range("B2:E5") 'игровой диапазон For countNumbers = 1 To 16 'формируем коллекцию чисел collNumbers.Add countNumbers Next For Each fndCells In rngPlayField.Cells 'цикл для каждого элемента на игровом поле rndNumber = Application.WorksheetFunction.RandBetween(1, collNumbers.Count) 'случайное число от 1 до количества элементов в коллекции fndCells.Value = collNumbers.Item(rndNumber) 'значение ячейки = случайное число из коллекции collNumbers.Remove rndNumber 'удаляем использованное число из коллекции Next Call decorateField 'вызываем декорирование поля End Sub
Сперва метод создаёт коллекцию чисел от 1 до 16.
Я заметил особенность, что в VBA в большинстве случаев удобнее пользоваться коллекциями элементов, чем одномерными массивами. В моей практике были и такие случаи, когда приходилось использовать коллекции массивов (возможно, из-за моей некомпетентности).
InitializeField() запускает цикл For Each, который распространяется на каждую ячейку нашего диапазона. На первом этапе цикла программа рассчитывает случайное число от 1 до значения размера нашей коллекции (в настоящий момент 16) и помещает в первую ячейку диапазона число, хранящееся в коллекции под полученным случайным индексом.
Далее цикл удаляет из коллекции использованное число и переходит к следующей ячейке.
На последующих этапах происходит то же самое, за тем исключением, что размер коллекции постепенно уменьшается, пока в ней не останется ни одного числа, а все ячейки окажутся заполненными.
UPD. Уже в процессе написания статьи я выяснил, что не все комбинации, полученные таким образом, изначально решаемы. Тогда мной в ускоренном темпе был написан код, который сперва формирует правильное поле от 1 до 16, а затем в стиле песков времени разбирает пятнашки в течении 300 ходов (что мы собственно и делаем в реальной жизни, когда хотим "рестартнуть" игру). Направление движения "костяшки" рассчитывается случайным образом.
Sub createRightField() Dim countNumbers As Byte, fndCells As Range, countMoves As Integer, byteRndDir As Byte, fndRndRange As Range countNumbers = 1 For Each fndCells In rngPlayField.Cells 'заполняем поле значениями от 1 до 16 fndCells.Value = countNumbers countNumbers = countNumbers + 1 Next While countMoves < 300 byteRndDir = 3 * Rnd() + 1 ' 1 - up, 2 - down, 3 - left, 4 - right For Each fndRndRange In rngPlayField.Cells If fndRndRange.Value = 16 Then Select Case byteRndDir 'выбор направления Case 1 If fndRndRange.Offset(-1, 0) <>"" Then fndRndRange.Value = fndRndRange.Offset(-1, 0) fndRndRange.Offset(-1, 0) = 16 countMoves = countMoves + 1 End If Case 2 If fndRndRange.Offset(1, 0) <> "" Then fndRndRange.Value = fndRndRange.Offset(1, 0) fndRndRange.Offset(1, 0) = 16 countMoves = countMoves + 1 End If Case 3 If fndRndRange.Offset(0, -1) <> "" Then fndRndRange.Value = fndRndRange.Offset(0, -1) fndRndRange.Offset(0, -1) = 16 countMoves = countMoves + 1 End If Case 4 If fndRndRange.Offset(0, 1) <> "" Then fndRndRange.Value = fndRndRange.Offset(0, 1) fndRndRange.Offset(0, 1) = 16 countMoves = countMoves + 1 End If End Select End If Next Wend Call decorateField End Sub
Сперва создаём обработчик события нажатия на определенную ячейку. Для этого в модуле листа, на котором расположено игровое поле, формируем метод Worksheet_SelectionChange и пишем в нем следующий код. Переменная Target при этом содержит адрес выбранной ячейки.
Private Sub Worksheet_SelectionChange(ByVal Target As Range) Set rngPlayField = Sheets("MAIN").Range("B2:E5") If Target.Cells.Count > 1 Then Exit Sub ElseIf Not Application.Intersect(rngPlayField, Target) Is Nothing Then 'считывает вхождение нажатой ячейки в игровое поле Call moveCells(Target) End If End Sub
При выборе диапазона ячеек (больше одной), а также если выбранная ячейка не относится к игровому полю, программа завершает работу.
В ином случае запускается метод имитации движения цифр, принимающий адрес выбранной ячейки в качестве аргумента.
В основном модуле в методе moveCells(byVal rngCell as range) пишем следующее:
Sub moveCells(ByVal rngCell As Range) 'процедура нажатия на ячейку с числом Dim checkCells As Integer For checkCells = -1 To 1 Step 2 'цикл для проверки ячеек слева/справа и сверху/снизу от выбранной ячейки If rngCell.Offset(checkCells, 0).Value = 16 And Not Application.Intersect(rngPlayField, rngCell.Offset(checkCells, 0)) Is Nothing Then 'проверка сверху/снизу rngCell.Offset(checkCells, 0).Value = rngCell.Value rngCell.Value = 16 ElseIf rngCell.Offset(0, checkCells).Value = 16 And Not Application.Intersect(rngPlayField, rngCell.Offset(0, checkCells)) Is Nothing Then 'проверка слева/справа rngCell.Offset(0, checkCells).Value = rngCell.Value rngCell.Value = 16 End If Next Call decorateField ' вызываем декорирование поля
Цикл проверяет, есть ли слева, справа, снизу или сверху от нажатой ячейки пустое поле (его имитирует число 16) и считывает вхождение смещенной ячейки в диапазон игрового поля. Если условия выполнены, то программа просто меняет числа местами.
Создаём в рабочей книге второй лист и размещаем на нем победный вариант. Пример:
Далее пишем следующий код:
Sub decorateField() 'декорирует и проверяет на победу Dim fndZero As Range, rngRightData As Range, countRows As Byte, countColumns As Byte, countRight As Integer Set rngRightData = Sheets("DATA").Range("A1:D4") 'диапазон с правильными значениями For countRows = 1 To 4 For countColumns = 1 To 4 If rngPlayField.Cells(countRows, countColumns) = rngRightData.Cells(countRows, countColumns) rngPlayField.Cells(countRows, countColumns) <> 16 Then 'декорирование правильной позиции With rngPlayField.Cells(countRows, countColumns) .Interior.Color = RGB(0, 150, 0) 'vbGreen показался мне слишком ярким .Font.Color = vbWhite End With countRight = countRight + 1 Else With rngPlayField.Cells(countRows, countColumns) .Interior.Color = xlNone .Font.Color = vbBlack End With End If Next Next For Each fndZero In rngPlayField 'цвет шрифта для нуля If fndZero = 16 Then fndZero.Font.Color = vbWhite End If Next If countRight = 15 Then 'проверка победы MsgBox "Победа!", vbExclamation, "Победа" End If End Sub
Данная программа с помощью цикла проверяет значение каждой ячейки игрового поля на соответствие аналогичной ячейке поля с победной расстановкой значений и закрашивает правильные варианты в зелёный цвет. И наоборот. Далее метод проверяет поле на наличие числа 16 (которое имитирует пустую "костяшку", не забываем) и устанавливает для шрифта белый цвет. Последний момент: проверка победы. При каждом совпадении каких-либо чисел с правильной позицией увеличивается переменная countRight, и когда ее значение станет равно 15, игра сообщит о победе.
Вам бывает скучно на работе? Часто сидите два-три дня без единого намёка на трудовую деятельность и пытаетесь ее имитировать, а руководство так и ждет ошибки с вашей стороны?
Теперь этого можно будет избежать, ведь в разработке находится пошаговая RPG в стиле Dragon Quest на NES для офисного приложения Excel.
Конечно, идея не нова. В Excel и раньше делали разнообразные игры (даже полноценный шутер). Но если вы читали мои предыдущие статьи, то поймёте, что создавать троллейбусы из батонов белого (или чёрного) хлеба — мое небольшое хобби.
На данный момент готова альфа-версия графического движка и редактор карт. С вероятностью в 99% они будут дорабатываться в процессе разработки.
Сперва немного расскажу о некоторых технических характеристиках.
1. Скорее всего в игре будет использоваться событийная модель, а не циклическая, ведь для пошаговой стратегии цикл не так уж и важен. Это будет зависеть от того, как быстро Excel справится с рендером одного кадра. Минус такого подхода заключается в том, что написать какой-нибудь платформер на этой основе не получится. В любом случае я попробую оба варианта.
2. Все текстуры имеют размер 16*16 пикселей. Палитра состоит всего из 56 цветов (стандартный размер палитры Excel). В качестве основы я взял палитру NES.
3. Текстуры я рисую в программе Aseprite, а в Excel из. bmp перевожу с помощью небольшого, написанного на VBA софта, который нашел в интернете.
4. Бэкграунд состоит из тайлов, спрайты же привязаны к системе координат.
Карта уровня представляет собой двумерный массив с кодовым обозначением тайла в формате «XXXY», где XXX — номер текстуры по порядку, Y — значение, указывающее на то, можно ли пройти сквозь тайл. Вторая функция пока что не реализована.
Спрайты хранятся в отдельном массиве в формате: координата X, координата Y, порядковый номер спрайта, тип спрайта и тэг. Два последних значения пока не используются.
Для создания графического движка сперва необходимо инициализировать различные переменные. Часть из них хранится на отдельном листе, а в коде я сделал их публичными (знаю, что так нельзя):
- высота и ширина игрового экрана;
- диапазон игрового экрана;
- массив игрового экрана для рендеринга;
- размер одной текстуры;
- карта тайлов и координаты спрайтов;
- массив спрайтов, тайлов и спрайтов игрока.
Все текстуры хранятся на отдельном листе с отображением индексов цветов палитры.
Так как это только первая версия движка, нажатие на «Новую игру» тут же запускает метод fillWithTextures (процесс создания массива цифровых значений цвета).
Первым делом происходит поиск спрайтов, которые нужно отрисовать. Для этого программа проверяет каждый «пиксель» игрового экрана, считает смещение этого пикселя относительно стартовых координат камеры, а также смещение относительно всех спрайтов на уровне. Если смещение «пикселя» относительно спрайта по каждой оси равно от 0 до 15 (так как размер текстуры 16*16), берётся индекс нужного цвета из массива спрайтов.
Вторым пунктом программа на основе смещения относительно координат камеры высчитывает позицию «пикселей» на карте тайлов. Когда нужный тайл найден, программа с помощью функции getTextOffset возвращает индекс цвета пикселя из массива тайлов.
'Возвращает координату текстуры Function getTexOffset(dCoordinate As Double) As Integer getTexOffset = (dCoordinate - 1) Mod main.blockSize End Function
Почему сперва происходит проверка спрайтов, а затем тайлов?
Все просто. Программа просто не трогает те «пиксели», которые уже закрашены спрайтами, что влияет на производительность в лучшую строну.
P.S. На следующий день я понял, что проверка условия «закрашенности» спрайтами должна производиться в начале. Тогда это повлияет на производительность. Привет, оптимизация.
Вторая проблема — это проверка спрайтов для каждого пикселя экрана. Предположим, что на уровне находится 40 спрайтов. При размере экрана 96*64 = 6144 пикселей количество итераций цикла достигает 6144 * 40 = 245760. Если пойти другим путём и проверять спрайты не для каждого пикселя, а по условию нахождения в поле зрения камеры, то количество итераций не превысит 40*16*16 = 10240. Эта проблема решается быстро.
Для того, чтобы поместить спрайт игрока в рендер-массив нужно посчитать смещение спрайта относительно координат камеры.
Sub renderPlayer(imagePose As Integer) Dim offsetX As Double, offsetY As Double, cntRow As Integer, _ cntCol As Integer 'Считаем смещение относительно координат камеры offsetX = main.playerX - main.cameraX offsetY = main.playerY - main.cameraY 'Если игрок не находится за пределами камеры If offsetX >= 0 And offsetY >= 0 And _ offsetX < main.cameraX + main.screenW And _ offsetY < main.cameraY + main.screenH Then For cntRow = 0 To main.blockSize - 1 For cntCol = 0 To main.blockSize - 1 'Если пиксель текстуры заполнен If main.arrPlayerSpr((cntRow + 1) + (imagePose * main.blockSize), cntCol + 1) <>0 Then 'Если пиксель не заходит за пределы камеры If cntRow + main.playerY
Аргумент imagePose будет использоваться для имитации поворота игрока при движении.
В конце-концов рендер-массив готов, поэтому вызываем последнюю процедуру, которая рисует сформированный кадр на игровом поле. Ее я показывать не буду, потому что она очень сырая и будет дорабатываться.
Будут дорабатываться и текущие процедуры, потому что на данный момент быстродействие немного хромает и реализовать упомянутую циклическую модель в данный момент проблематично.
Вот, что получается в итоге:
На этом можно пока закончить. Надеюсь, что из ваших глаз не пошла кровь от «лучшего в мире» языка программирования и попыток написать что-то осмысленное.
В любом случае жду критику и советы. Всегда интересно послушать, что скажут люди.
Я создал паблик ВКонтакте, куда буду выкладывать свои мысли, алгоритмы, код, ссылки на эти статьи и конечно мемасики:) Если вам интересно наблюдать за разработкой игр и разных странных вещей, добро пожаловать.
Это статья для новичков в геймдеве. Для тех, кто хочет сделать игру, но не знает с чего начать.
Я постараюсь, по шагам, объяснить весь процесс от желания до релиза. Погнали!
Я гейм-дизайнер с 10-летним стажем. Работал в многих компаниях, например в Playgendary. Делал разное: и казуалки для мобилок, и танковый шутер для PC.
Энтузиазм — это топливо, которое ты сжигаешь при разработке. Оно позволит тебе делать игру после работы, когда устал, когда хочется отдохнуть.
Как пополнять запас энтузиазма? Смотри документалки, читай истории успеха разработчиков. Это мотивирует!
Например, вот классная документалка о инди-играх Indie Game: The Movie
Смотри по сторонам: на другие игры, фильмы, кино, на новые технологии. Желание изучить что-то новое или сделать что-то похожее — это то, что нужно.
Одному — проще. Проще придумать идею и принимать решения. Не надо спорить и описывать задачи. Сделать игру одному — возможно. Я например сделал 4 игры один.
С командой — лучше. Лучше получается качество. Твои решения критикуются, и результат улучшается. Можно распределить обязанности и сделать игру быстрее. Последнюю игру я делаю в команде со своей женой. Она отвечает за историю, критикует мои решения, помогает с артом, ищет стримеров.
Короче - есть команда, круто! Нет команды — делай всё сам, это не трудно.
Очень важно понять — для чего тебе всё это?
Ну например:
1. Трудоустройство в геймдев компанию.
Продукт — портфолио. Приоритет - качество исполнения.
Вопросы: На какую должность хотим устроиться? В какую компанию(и)? Какими играми занимается компания(и)? Чему нужно научиться?
2. Научиться делать игры, освоить навык.
Продукт — опытный образец. Приоритет- новые знания.
Вопросы: Какой навык освоить? Как сделать какую-то конкретную штуку?
3. Рассказать о чём то важном.
Продукт — манифест. Приоритет - донести идею до масс.
Вопросы: Поймут ли мою идею? Как сделать продукт более массовым?
4. Сделать игру о которой мечтал.
Продукт — мечта. Приоритет — воплотить своё видение.
Вопросы: Что я хочу видеть? Чем можно пренебречь? Как закончить проект?
5. Построить свой бизнес.
Продукт — актив. Приоритет - получить доход.
Вопросы: Какие игры лучше продаются? Сколько времени займет разработка? Как сократить это время?
Цель может быть не одна. Цели могут меняться от игры к игре.
Короче - ты должен ответить на вопрос — зачем я делаю эту игру?
Например, я и моя жена — фанаты фильмов ужасов про пришельцев. Типа «Знаки», «Мрачные небеса», «Секретные материалы». Поэтому нам проще работать над идеями и сценарием для They Are Here
А может, ты на досуге рисуешь анимешных девочек. А твой друг изучает программирование искусственного интеллекта. Значит вам будет проще сделать игру про девушек, которые будут чатиться с игроком, словно живые.
Короче - твои умения и увлечения — это твои преимущества. Учитывай их при выборе платформы, движка, жанра игры. А пока, просто подумай над этим.
Если просто, то есть 2 пути: Мобилки или ПК + Консоли.
Исходя из целей и умений нужно будет выбрать что-то одно. Это разные платформы, с разными играми, аудиторией и монетизацией.
- Массовая аудитория. Дети, пенсионеры, скучающие продавщицы. Это не геймеры. Всё должно быть очень понятно и просто.
- Играют по 1 — 5 минут. В перерывах, в очередях, на работе. Чтобы «убить время».
- Ценится простая яркая графика.
- Упор на простой, но залипательный кор-геймплей.
- Некоторые жанры (головоломки, аркады) — наиболее просты в разработке. Можно сделать небольшой прототип (1-5 уровней) и показать его работодателю, например.
- Не требуется красивая или сложная графика. Главное — чтобы было понятно.
- Простой геймплей и гейм-дизайн.
- Будет плюсом, если сам привык к мобильным девайсам и играм.
- Очень. Высокая. конкуренция. Игр миллионы и почти все они — бесплатные. Игроки приходят только с рекламы. Нет рекламы — нет игроков. Нет денег.
- Монетизация. Нужно встраивать рекламу или внутри-игровые покупки в игру. Знать куда и как. Тестировать чтобы всё это работало.
- Аналитика. Нужно понимать что такое LTV. Почему он должен быть > чем CPI. Встраивать аналитику в игру.
- Будь готов делать по 20 прототипов или улучшать продукт, пока LTV не станет > CPI.
- Заработать денег небольшой команде, можно только с издателем. Я лично не знаю других путей.
Короче - мобилки, это огромный супер-маркет. На полке лежит то, что окупает рекламу. Это конкуренция рекламных бюджетов. Если хочешь заработать на мобилках, то советую делать гипер-казуалки и работать с издателем.
Если пофиг на доход — классная, лёгкая платформа.
Если решишься, узнай подробнее про:
- Хардкорные геймеры.
- Играют по несколько часов. Дома. Чтобы погрузиться в игру.
- Ценится реалистичная или стильная графика.
- Упор на интересную историю или глубокий геймплей.
- Меньше конкуренция, чем на мобилках. Особенно на консолях.
- Легче получить игроков и отзывы.
- Можно хорошо заработать портировав игру на консоли, с помощью издателя.
- Не надо возится с аналитикой и монетизацией.
- С детства понятная платформа (ПК / Консоль) и аудитория (Геймеры).
- Аудитория любит авторские, творческие, интересные игры.
- Будет плюсом, если сам играешь на компе или приставке.
- Плохо заходят простенькие игры (головоломки, аркады). Геймеры хотят получить опыт, вжиться в роль. Залипнуть надолго. Игра не должна выглядеть как что-то на пару минут.
- Игры дольше в производстве. Но можно хитрить — делать маленькие игры, которые выглядят как большие, а также использовать готовые ассеты.
- Нужно поработать над интересной идеей. Найти отличительные черты (USP), которые выделят проект.
- Нужно продумать интересную историю или геймплей.
- Более сложный геймдизайн.
- Большая требовательность к качеству графики.
Короче - ПК, а особенно Консоли это элитный бутик. На полке лежит то, что пользуется спросом. Это конкуренция качества. Если хочешь заработать, то сделай интересную игру, и обязательно портируй её на консоли (через издателя). Подумай как сэкономить на производстве!
Если решишься, узнай подробнее про:
Интересуйся тем Как делают игры (классный подкаст в твои наушники)
Рекомендую погуглить про:
- Игровые механики, жанры и сеттинги.
- Геймдизайн. Есть книга Джесси Шелла, она хорошая, но большая. Можешь гуглить про конкретный жанр.
- Кор-геймплей и Мета-геймплей.
- Левел-дизайн. Лучше гуглить про отдельный жанр.
- Пользовательский интерфейс (UI) в играх.
- Ассеты и маркетплейсы.
Короче - сперва узнай поверхностно о всех непонятных терминах. Глубже изучай только то, что нужно будет для разработки конкретно твоей игры.
Движок — это программа, в которой собирается игра. Это большой кухонный комбайн, в котором есть всё. Там программируется логика, собираются уровни, выставляется освещение, настраивается анимация, создаются материалы, вставляются звуки и т.п.
Про выбор движка написано много статей — погугли.
Если ты один, и не знаешь языков программирования, рекомендую Unreal Engine 4.
- Там есть Blueprints — это визуальное программирование. Это проще чем писать код.
- Красивый рендер «из коробки».
- Есть большой маркетплейс с гововыми ассетами
- Это популярный коммерчесский движок, на котором сделано очень много игр.
- Можно сделать игру под все платформы. Можно встроить рекламу, инапы, аналитику.
- Много уровков. Рекомендую Unreal Engine Rus
- Классный интерфейс.
- Куча встроенных функций.
- Бесплатный до ляма баксов дохода.
Перед началом работы над игрой, сделай пару очень простых подделок «в стол».
Сделай змейку, пинг-понг и т.п. Пофиг на качество, пофиг на геймдизайн. Главное — попрактиковаться «на кошках», пощупать функции движка.
В движке будет работать вся команда — поэтому каждый должен изучить его, хотя-бы поверхностно. Вы должны понимать друг друга, а еще помогать программисту собирать игру.
Короче - почитай про выбор движка. Потрать время на его изучие.
Жанр — это твоя ниша. Жанр — это очень важно. Есть жанры, в которые никто не играет. А для некоторых нужно изучить много дополнительного материала.
Лучше выбрать жанр который:
- Популярен на платформе. Игры этого жанра часто покупают или скачивают. Используй сайты для аналитики жанров.
- Не слишком сложен в производстве. мморпг — не твой выбор.
- Нравится тебе или команде. Ты разбираешься в нём или много играл в детстве.
Как только ты определилися с жанром — гугли всё по производству игр в этом жанре. Геймдизайн, графика, уровни, звуки. На что сделать акцент?
Поиграй в лучшие игры в этом жанре. Посмотри видео об этом жанре.
Короче - выбери жанр и узнай про него всё что можешь!
Идея — ядро твоей игры. Зерно, из которого вырастет проект.
Какая идея хорошая?
- Понятная. Должна быть понятна каждому. Например, твоей маме.
- Интересная. Уже хочется поиграть в это! Люди любят риск и новый опыт, который хотят, но не могут пережить в реальной жизни. Например GTA — это симулятор крутого парня, которым все хотят быть, но не могут.
- Популярная. Это не артхаус, не что-то странное или специфичное. Идея обращается к понятным образам из жизни или массовой культуры.
- Выделяющаяся. Такого раньше не было. Или было, но давно. Или в другом жанре. Или в другом стиле. Или плохо сделано.
- Каталог игр на твоей платформе. Смотри что популярно. Думай как это изменить, подать под другим углом. Хмм…игра про постройку железной дороги в топе. А что если, мы играем за машиниста?
- Сайты-сервисы с аналитикой тэгов и жанров на платформе. Можно отследить популярность жанра, количество игр в нем. Можно скрестить отдельные тэги между собой.
- Массовая культура. Фильмы, книги, комиксы, короткометражки, гифки, картинки из интернета.
Скорее всего у тебя будет рождаться много идей. Записывай их. Дай полежать. А потом выбери ту, что не даёт тебе покоя и кажется лучшей.
Идея может казаться масштабной. Но она должна умещаться в Питч, чтобы быть понятной игрокам, прессе и твоей маме.
На основе Питча, описываем концепт игры. Более развернутое описание игры на одну страничку. За кого мы играем? В чем цель? Что можно делать? Какие эмоции вызываем?
Продумай ключевые фичи — USP, которые будут продавать твой проект. Они вытекают из твоей идеи.
Например, идея Панка — издевательство над массовой культурой и модой.
Ключевые фичи (USP) Панка: вызывающее поведение, агрессивная музыка и странные прически.
Показывай свои USP везде — в трейлере, скриншотах, постере, описании игры. Говори про них общении с прессой и издателями.Тычь ими в лицо!
Например, у They Are Here — это пришельцы, кукурузные поля как фильме Знаки, и НЛО.
Кароче - почитай про идею, концепцию, питч, USP игры. Сформулируй чёткое видение твоего проекта и доноси это видение до всех. Без него — всё развалится и поплывет.
Ассеты — это кирпичики, из которых состоят игры.
Составь список того, что нужно сделать. Хотя-бы крупными мазками. Сделать уровнь, найти музыку, вставить персонажа. А еще надо 20 видов мечей.
Оцени время, а потом умножь его на 2. Даже если тебе кажется это глупым. Умножь его в 2 раза!
Если видишь, что проект большой — отрезай всё ненужное. Ненужное — всё, что не показывает идею. Или редко появляется на экране.
Например, если идея игры — ультра-насилие, то можно не делать 20 видов мечей, а лучше проработать физику расчленения тела.
Прикинь, что для мобильных гипер-казуалок нужно сделать минимум 30 минут геймплея. А для ПК и Консолей, лучше сделать игру на 2 часа. Если можешь больше — круто!
Настоятельно рекомендую!
Покупай и используй готовые ассеты. Это лучший способ сократить время производства и не потерять качество. Это не стыдно, это нормально. Это вообще огонь!
Записывай, всё что надо сделать. Каждую мелочь. Иначе — забудешь.
Ставь задачи. Себе и команде. Рекомендую Trello (проще) или Asana (функциональнее).
Cобирай инфу по проекту в одном месте. Можно юзать доски типа “Miro” или вики типа Notion.
Если ты один, или у вас небольшая команда, не парься над большой и красивой документацией. Лучше покажи пример, начерти схему, объясни на пальцах ЧЁ НАДО сделать.
Референс — лучшее описание задачи для художника! Например, я сказал жене — хочу обложку как у Слендера, но с пришельцем. Этого — достаточно!
Собирай и храни нужную инфу. Ссылки на классные статьи. Контакты возможных партнёров. Скриншоты багов. И т.п.
Демо-версия / Вертикальный срез / MVP — очень близкие по смыслу понятия. Это маленький кусочек игры финального качества.
Демо-версия решает множество задач:
- Поможет записать видео, скриншоты, гифки
- Покажет окупаемость мобильной игры
- Поможет устроиться на работу
- Ускорит набор вишлсистов в Steam
- Получит отзывы от игроков и стримеров
- Можно участвовать в фестивалях и конкурсах
- Только с ней можно найти издателя.
Короче - сделай демонстрационную версию игры. Это твоя визитная карточка. Показывай её всем. Говори — я сделаю так-же, только больше.
Не буду вдаваться в подробности о релизе. Всё зависит от игры и платформы.
Лучше дам рекомендации как дожить до релиза:
- Не меняй идею на ходу. Сильно. По чуть-чуть можно.
- Не начинай другие проекты. Не распыляйся. Делай, что запланировал.
- Составь график работы. Работай над игрой постоянно. Хотя бы по 3 дня в неделю, по 2 часа в день. Больше — быстрее!
- Надоела разработка? Поиграй в похожие игры. Посмотри похожие фильмы. Найди, что было бы круто сделать.
- Всё равно надоела? Мечтай о релизе. Представь как это будет здорово и вечно!
- Показывай свою работу — пиши посты, пости гифки, давай поиграть стримерам. Твоя цель — получить позитивную обратную связь. Ну или отрицательную.
- Узнавай что-то новое про производство игр. Слушай подкасты, смотри доклады. Это мотивирует, помогает в производстве.
Эта статья — вводная. Тебе много предстоит узнать и загуглить на каждом шаге.
Короче - ты можешь сделать это! Реально!
Ошибка выжившего же.
Смотри документалки, читай истории успеха разработчиков. Это мотивирует!
Или демотивирует, когда видишь, что такого результата никогда можешь не достигнуть)
Нет команды - делай всё сам, это не трудно.
Читая Апанасика помните — у него уже 3 месяца нет работы и за плечами пара провалившихся проектов. Как говорится, тоже фильтруйте,)
Тогда купи курс где тебя мотивируют! Что как в первый раз.
Иногда захожу в раздел: ищу команду. Тоже мотивирует. Наверное это плохо. Новички стараются найти себе команду, а я не могу улыбку снять с лица от некоторых постов.
С чего начать делать игру? Пошаговая инструкция:
1. Начни делать игру
2. . 99. Команда нужна / не нужна, гугл в помощь, ебашь побольше и всё получится
100. Профит!
1.Представь сову
2.Представь как ты рисуешь сову
3.Изучи терминологию для обозначения разных аспектов в рисовании сов
3.Изучи как рисуются совы, как их рисуют другие люди
4.Прочитай книги, разные полезные советы о том, как рисовать сову
5.Выбери с помощью чего ты будешь рисовать сову
6.Задумайся зачем ты рисуешь сову, нужно ли тебе это
.
100.Нарисуй сову
Человек личный бренд качает)
Документалка классная, но меня она демотивировала скорее, причем всерьез и надолго. Смотря на то как чуваки по 5 лет страдают, выгорают и без особого запала выпускают-таки свои игры оставаясь в депрессии не хочется повторять этот путь, даже при том что они выпускают гениальные вещи типа super meatboy. Что для игроков удовольствие и крутота для автора осталось болью. Может я конечно что-то не так запомнил, поправьте.
Меня в каком-то смысле мотивирует история нотча. Чел пилил игры как хобби, работая на обычной работе программистом, пилил много и безуспешно, но потом у него стрельнул майнкрафт и он озолотился, а заодно подарил миру прекрасное развлечение.
А меня подобное наоборот мотивирует.
Я вижу, что каждый, даже в относительно простых проектах, сталкивается с трудностями. И я понимаю, что это не я бездарность, а всего лишь нормальный творческий процесс, и что если я буду продолжать прикладывать силы, то у меня может получиться что-то хорошее.
Меня больше демотивирует, когда я вижу людей, вокруг которых видимость того, что они без особых проблем добиваются желаемого. Я начинаю сравнивать их с собой и вижу пропасть
А потом ещё разругались, например, как создатели мясного парня.
Видишь дефолтный заголовок в стиле "как сделать игру, пошаговая инструкция" или "как заработать миллион долларов, пошаговая инструкция" или "как родить ежа, пошаговая инструкция" и фотку автора в шапке, то знай - тебе щас будут впаривать очередные прописные истины и сто раз пережеванную и заново выплюнутую инфу. По факту пиар самого себя под видом якобы образовательной статьи. Мерзко.
но это же с мемааасиками!
ПК + Консоли
Аудитория:
Хардкорные геймеры.
Игроют по несколько часов. Дома. Чтобы погрузиться в игру.
Ценится реалистичная или стильная графика.
Упор на интересную историю или глубокий геймплей.
вот это весьма спорный момент)
Почему вам так кажется?
Но в итоге-то ты будешь продавать игру, а не блупринты из неё.
В любой теме, где упоминаются блупринты, обязательно найдется чел, которым будет кекать над этим. А по факту, в чём разница между лапшой из блупринтов, и лапшой из обычного кода?
Да, сходу предлагать Анриал новичку без знания программирования это немного странно, тем более в примерах змейка и пинг-понг (а в уроках 2-х летней давности видосы для тех кто уже умеет прогать на плюсах)— конечно он это сделает, но это не значит, что теперь можно пилить большую игру.
Ну и приводить маркетплейс и "большое" количество проектов на движке такое себе — хорошо что они есть, но это точно не USP в сравнении с тем же Юнити, где всего этого в разы больше.
Step 1: Find the coder
Step 2: Break his legs and give him computer
Step 3: Injure a adrenaline
Читайте также: