Привет! Я решил для практики сделать игру тетрис и хочу

с самого начала разработки понять - "делаю ли я говнокод?".

Меня немного напрягло нагромождение условных операторов и я решил спросить, нормально ли это? Логика тетриса будет решаться при помощи манипуляций с двумерным булевым массивом, все фигуры будут двигаться по своеобразной "тайловой сетке". На месте ячеек массива, которые будут true, я буду потом рисовать фигуры.

https://pastebin.com/yn3stfmC

Буду рад любой критике!

13 ответов

15 просмотров
Андрей- Автор вопроса

Оцените пожалуйста!) Код очень маленький!

Андрей
Оцените пожалуйста!) Код очень маленький!

Как вариант можно использовать Switch вместо ифов

Андрей- Автор вопроса
Максим
Как вариант можно использовать Switch вместо ифов

Но он проверяет значение одного поля, а у меня много разных, поэтому я не думаю, что он подойдёт

Андрей
Оцените пожалуйста!) Код очень маленький!

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

Андрей- Автор вопроса
Artem Frolov
Больщая вложенность циклов и ветвлений по мартину ...

Да, думаю вы правы, большое спасибо, что посмотрели! Просто я ещё не набрался опыта нормально организовывать код, являюсь новичком в геймдеве. А в остальном как? Подходящая база для тетриса или не очень?

Андрей
Да, думаю вы правы, большое спасибо, что посмотрел...

По 60 строкам кода невозможно оценить, подходящая база или нет) Но то, что у тебя такая большая вложенность и при всем этом нужен ты используешь goto, о чем-то, да говорит

Андрей
Да, думаю вы правы, большое спасибо, что посмотрел...

Тут 60 строк, но они уже очень грязные, в одном классе смешано несколько уровней абстракций, высокая вложенность, много неотносящихся к игровому полю переменных, некоторые группы переменных, как x и y - можно выделить в отдельные класы, например coord, тут много что можно почистить и улучшить, в двух словах не написать, если хотите лучше понять, что такое чистый код, проичтайте хотя бы книгу мартина - чистый код, в двух словах старайся писать код так, что бы метод выполнял только одно дейсьтвие, что бы класс служил только одному предназначению и избегай таких награмождений из вложенностей, в них тупо сложно ориентироваться

https://pastebin.com/aTkkdgE4

Андрей
Да, думаю вы правы, большое спасибо, что посмотрел...

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

Андрей- Автор вопроса
Artem Frolov
Тут 60 строк, но они уже очень грязные, в одном кл...

Да, вы правы. Просто тогда я решил, что по идее игра маленькая и ей не нужна прочная объектно-ориентированная база, написание которой вероятно, заняло бы очень много времени. В такой маленькой игре вероятно, будет очень легко ориентироваться. Но в следующем проекте (а может даже в этом), я обязательно научусь лучше организовывать код. Просто я совсем не понимаю, каким образом всю структуру сложного ООП кода с кучей взаимодействий и абстракций, можно уложить в голове, даже такой игры как Тетрис, не говоря уже о более сложных проектах. Возможно, где-то нужно какие-то зарисовки делать

Андрей
Да, вы правы. Просто тогда я решил, что по идее иг...

Так тебе и не нужно все держать в голове, ООП служит тому, что бы проводить декомпозицию задачи, что бы в один конкретный момент времени ты был сконцентрирован на каком то небольшом аспекте всего проекта, а не разбирал сотни строк непонятных зависимостей и ненужных подробностей, конечно когда ты для того что бы написать hello world используешь 3 паттерна и несколько интерфейсов - это тоже говнокод, чистый код это про баланс под конкретную задачу, чувство этого баланса приходит с опытом

Андрей- Автор вопроса
Владимир
https://pastebin.com/aTkkdgE4

Спасибо большое за помощь, но как именно код стал лучше? Код ведь не укоротился и не стал понятнее. А на скриншоте он и вовсе не будет работать, ведь выходит из цикла не задав позицию тетрамино (фигуры). Я ценю вашу помочь, но объясните, как именно в положительном ключе повлияли эти изменения?

Андрей
Спасибо большое за помощь, но как именно код стал ...

Это не идеальное решение и не идеальный код, просто пример, как можно обойтись меньшей вложенностью.

Похожие вопросы

Обсуждают сегодня

Добрый вечер, Пока не совсем понимаю как наладить общение между телеграм ботом и ПО для работы с сим боксом. По самому боту так понял: - Нужен некий баланс, который можно поп...
Magic
6
сделал сайт, прикрутил в боте сайт, и виджет логина. как автоматически логинить пользователя в аккаунт(телеграм), при входе с бота?
Александра Чернивецкая
5
Объясните, пожалуйста, почему компилятор ругается на использование в условии неинициализированной переменной: int x; Task.Run(async () => { x = await somefunc(); }).Wait...
Александр
5
Ребят, подскажите, пожалуйста, почему в префиксе к ассетам, которые генерируются через фильтр | theme в шаблоне, стал вдруг появляться index.php? Вот так выглядит ссылка на а...
Виталий
1
Всем привет. Ребята, подскажите, пожалуйста. у ботов есть ограничение на отправку сообщений - 30 сообщений в секунду, эти ограничения накладываются на все сообщения? или на со...
Artem Stormageddon
4
Блин, ребята, сори за тупые вопросы. А можно ли как-то открыть вебапку по нажатию на кнопку в меню(которое появляется слева, команды)?
Artem Stormageddon
3
а плаксы из-под питона умеют только в комфортных условиях что-то выдавить из себя?)
Lencore
9
Но, может, есть уже проверенная? Наши требования такие: 1. Сообщения должны приходить из Инста в CRM оду 2. Должна быть возможность подключить несколько экаунтов Инстаграм. Р...
Alexander Sharoiko MSE / Александр Шаройко
13
Это может быть все-таки не флудвейт? у меня ботфазер принимает изменения и отображает даже что они изменились, на видео видно что он прислал якобы уже измененное описание, н...
OVERLINK
13
Коллеги, может знает кто, можно ли цвет бейджа счётчика в BackendMenu менять без бубнов?
Alex Blaze
3
Карта сайта