Курсы по программированию

Формула программиста
основатель — Волосатов Евгений Витольдович
1-2-3 мая - Создай online игру!
Вебинар «Карточки памяти на Android» начнётся через 1  день 8 час. 17 мин.

Микроигры / 2048 - Смещение

  • На этом уроке мы реализуем класс с логикой игры.
    Далее, напишем заглушки для функций смещения клеток
    и функцию проверки окончания игры game_over().
  • Дата отправки отчёта: 15 апреля 2016 г.
  • Задание выполнено: за 3 час. 50 мин.
  • Чему научился: Повторил работу с рекурсией.
  • Что было сложным: Понять работу рекурсивных функций shift и combine, организовать прорисовку меток через самописный делегат и исправить небольшие недочеты с табличной компоновкой.
  • Комментарии: Во время написания кода прокачался в некоторых технических аспектах, поработал с "делегатами". В моем случае табличная компоновка не сказывалась на скорости отрисовки матрицы меток, поэтому оставил. Понравились рекурсивные функции - красиво. В итоге, хорошая игра в копилочку, есть куда расширять и улучшать.
  • Оценка видео-уроку:
Отчёт от 7276 за Микроигры / 2048 - Смещение


Отчёт от 7276 за Микроигры / 2048 - Смещение




Оцени работу

 
Сохранить страницу:

7276. Ильшат
Ильшат
ответить
→  Евгений Волосатов  # Микроигры / 2048 - Логика / 2016-04-15 09:20

Особенно понравилось то, как в функции combine складываются одинаковые, парные метки. По правилам игры, если например сдвинуть метки вверх, то сумма должна накапливаться в верхней метке. Если вниз - то в нижней, вправо - в правой, влево - в левой. И это на видео сразу заработало, благодаря организации подсчета через стек, а рекурсия по сути это стек :)


1. Евгений Волосатов
Евгений Волосатов
ответить
→  Ильшат  # Микроигры / 2048 - Логика / 2016-04-15 08:58

Я ждал, что ты оценишь рекурсивный алгоритм :)



Начинаем практику по языку C#




Чтобы стать хорошим программистом — нужно писать программы. На нашем сайте очень много практических упражнений.

После заполнения формы ты будешь подписан на рассылку «C# Вебинары и Видеоуроки», у тебя появится доступ к видеоурокам и консольным задачам.

Несколько раз в неделю тебе будут приходить письма — приглашения на вебинары, информация об акциях и скидках, полезная информация по C#.

Ты в любой момент сможешь отписаться от рассылки.
Научился: использовать рекурсию
Трудности: переписать логику игры
Мне сразу не понравилось разделение передвижения плашек и их объединения. У меня изначально был другой алгоритм в голове, который я и реализовал. Если при движении влево по уроку мы шли справа налево, то я же шел слева направо. Мне так показалось логичнее. Полный алгоритм можно увидеть на скриншоте. Не претендую на оптимальность, но хотя бы не вызываются лишний раз функции перемещения (как мне кажется). Перерисовка tableLayoutPanel происходила очень долго (Изначально думал, что это у меня комп слабый). Оказалось, что это из-за свойства CellBorderStyle. Когда поставил его в положение None, игра просто полетела. Остаточное моргание формы частично решал еще в Сокобане. Перед вызовом функции логики убирал видимость tableLayoutPanel, а после всех передвижений, возвращал обратно. Осталось одно общее мигание всех лейблов на долю секунды, но оно решилось установкой свойства DoubleBuffered. Визуально больше ничего не моргает. В игру от себя добавил подсчет очков (по правилам с википедии). А также возможность возврата на 1 шаг назад (сохранение предыдущего состояния матрицы map, и перерисовка значений в лейблах по ней).
Научился: Пользоваться свойствами объектов, созданных программно. Работать с массивами более уверенно. Рекурсивно выполнять список действий.
Трудности: Оптимизация программы. Доработки
Я заморочился и всё-таки добавил динамическое изменение размеров обычной Панели. Так же работает изменение размеров игрового поля. Демонстрация в приложенном Видео