Боевой проект: Простой тетрис (с исходным кодом)

Java

bg

предисловие

После изучения java я всегда хотел найти проект для реального боя.Тетрис хороший проект для реального боя.Его принцип относительно прост в реализации. Сказав это, я сначала понятия не имел, пока не пошел посмотреть видео о тетрисе на YouTube и исходный код его реализации на GitHub. Я сделал некоторую обработку на основе его программы и сделал полуфабрикат ниже. Тетрис больше подходит для практики новичкам, я поделюсь некоторыми навыками и опытом выполнения этого проекта ниже, добро пожаловать на обсуждение!

Подготовить

Я использую не свинг а относительно новый javafx, но на самом деле, javafx я изучаю только там, где мне нужно его использовать, так что если вы использовали свинг, быстрее начать с javafx, чтобы сделать тетрис, в конце концов, мы только нужно, чтобы у javafx было несколько более часто используемых API.

Идеи дизайна

Тетрис бывает семи форм:

Их имена: O, J, L, Z, S, T, I (сравните буквы с графикой, и вы поймете, почему). Во-вторых, каждый блок может иметь до 4 преобразований. Вот что я увидел в блоге со всеми преобразованиями:

Прежде всего, я разработал классы для представления этих семи фигур. Сначала я хотел использовать семь классов для наследования базового класса. Позже я обнаружил, что проще написать один класс вместе. Конкретная идея заключается в разработке формы class, у которого есть Name и другие атрибуты, а когда программа новая, name будет случайным образом выбирать одно из семи имен, а затем последующие методы и операции будут основываться на этом имени. Инициализация класса Shape и методы flip зависят от имени. Часть кода выглядит следующим образом:

После этого мы генерируем двумерный массив в виде матрицы ноль-единица для представления текущего положения фигуры.Когда фигура движется, в дополнение к проверке, чтобы не пересечь границу, нам также нужно проверить, коснется ли движение другие фигуры. Это наш двумерный массив. Его должно быть легко понять.

Существует три способа перемещения фигуры: вправо, влево и вниз. Первые два относительно просты в реализации, а последний сложнее, поскольку необходимо учитывать множество факторов. Здесь мне нужно предсказать следующую фигуру, что означает, что я должен переключить управление на следующую фигуру, когда текущую фигуру нельзя переместить. Таким образом, на самом деле в каждый момент времени вверху генерируются две фигуры, но одна из них статична и невидима. После переключения управления необходимо проверить, не нужно ли ликвидировать линию, часть кода выглядит следующим образом:

Последняя операция исключения, которую я считаю более сложной.Если ее не обработать должным образом, будет много странных багов.Общая идея моей реализации такова: Сначала проверьте весь двумерный массив, найдите «строки», которые можно удалить, а затем запишите и исключите все строки, которые необходимо удалить.После исключения переместите неустраненные квадраты на соответствующее расстояние и, наконец, обновить двумерный массив.

Суммировать

Вышеизложенное является общим дизайном и идеями реализации.Остальной дизайн элементов интерфейса и другой детальный дизайн относительно просты, поэтому я не буду повторяться.Наконец, я поделюсь ссылкой на видео YouTube, которое я смотрел для справки, как а так же мой проект исходный код.

Связь

Видео, на которые я ссылаюсь:

woohoo.YouTube.com/watch?V=удав…

Исходный код моего проекта:

GitHub.com/ZT-X U/TE Т-день…