Кодерские работы 👾
104 subscribers
166 photos
16 videos
1 file
38 links
Теперь я тут обитаю и немного программирую.
Download Telegram
👋 Всем хай.
👨‍💻 Напомню, что я сейчас активно переписываю свои старые проекты 3-х летней давности. (Какой же там ужасный код)
👀 На скриншоте игра "Жизнь" Конвея.

😁 Мне настолько не понравился код и интерфейс, что я решил переписать с нуля, следуя чистому коду (насколько возможно).

🏭 Также использую паттерны:
- Стратегия
- Машина состояний
- Ну и все остальное полезное.

🧠 Кстати советую заглянуть в ваши старые репы и попробовать переписать, возможно вы будете удивлены от того, как ваши навыки возрасли, я это на себе отлично прочувствовал.

🤔 Если хотите поподробнее узнать про рефакторинг, ставьте реакции, пишите комментарии.

P.s.
Реп - https://github.com/W1xon/Game-of-Life
❤5🔥1
Сделать посты про рефакторинг и мой код 3-х летний давности?
Final Results
96%
Давай свой г*внокод
4%
Не нада, страшна
✍4
🏁 NFS-MaxEd Preview


🔥 Второй UI/UX-релиз программы для моддинга Need for Speed: Most Wanted (2005).

🎨 Был полностью переработан дизайн, стиль и навигация между страницами.
📂 Вместо стартового окна с выбором режима редактирования, управляющие кнопки (Races, Milestones, Blacklist, About, Save) теперь находятся в левой динамической панели для удобства и скорости вашей работы.
🗺 Страница с картой обновлена: добавлены подсказки по управлению и кнопки масштабирования.
⚙️ Страница About упрощена ради оптимизации.

💬 Надеюсь, новый дизайн вы оцените по достоинству.

🔗 Все ссылки ниже:
GitHub-репозиторий → github.com/W1xon/NFS-MaxEd

UI/UX Preview-релиз → github.com/W1xon/NFS-MaxEd/releases/tag/Preview

🧩 P.S. По результатам голосования сделаю разбор старого кода, но чуть позже хочу собрать материал и преподнести его максимально понятно.
🔥5💋2
🧩 Рефакторинг Game of Life — Часть 1: Игровая логика


Привет! 👋 Сегодня начну разбор тотального рефакторинга моего старого проекта — игры «Жизнь».
Покажу, как я вычистил игровую логику: от монолитной кучи до внятной архитектуры 🔄


🚨 Проблема №1: God Object — когда один класс правит всем


🧠 Всё в одном классе: логика, отрисовка, ввод, состояния.
💀 Результат:
• Невозможно понять, где что происходит
• Одно изменение ломает три других
• Логика намертво привязана к WinForms

📸 Старый код на изображении 1

✅ Решение: разделяй и властвуй


Я разнёс код по модулям по смыслу 👇 (изображение 2)
Теперь:
• Каждый класс делает только своё дело
• Чтобы понять работу с полем — читаю только TileMap (100 строк вместо 500)
• Изменения изолированы
• Таймеры, графика и мышь теперь не зависят от логики игры

🚨 Проблема №2: Неявное управление состоянием


Пауза, рисование и возобновление были размазаны по коду 😵 (изображение 3)

Почему это проблема? 😤
❌ Неочевидное поведение
❌ Баги при добавлении функций
❌ Добавил «режим редактирования»? Теперь нужно обновить *все места*, где проверяется isStop. Забыл одно — баг 🐛

✅ Решение: State Machine 🧠


Добавил систему состояний (изображение 4)
Теперь переходы прозрачны (изображение 5)
Добавить новое состояние? Просто создаёшь новый класс. Всё.

🚨 Проблема №3: Логика и отрисовка перемешаны 🤦‍♂️


Расчёт поколений и рисование были в одном методе (изображение 6)
Итог:
• нельзя рассчитать без рисования (1000 поколений = 1000 отрисовок)
• нельзя перерисовать без пересчёта
• профилировать больно

✅ Решение: Model и View отдельно 🎨


Model — чистая логика (изображение 7)
View — отдельный рендерер

Теперь:
✅ Можно рассчитать без рисования
✅ Можно перерисовать без логики
✅ Можно менять визуал хоть на OpenGL

🚨 Проблема №4: Массивы повсюду


Три массива (arrayCell, nextArrayCell, lastArrayCell) в разных методах.
Постоянные проверки x < columns && y < rows и куча багов с индексами 🐛 (изображение 8)

✅ Решение: инкапсуляция в TileMap


Всё спрятано в одном месте 👇 (изображение 9)
Теперь:
• Один источник правды
• Нет багов с индексами
• Оптимизация централизована

🚨 Проблема №5: Правила игры захардкожены


if (!hasLife && textBoxB.Text.Contains(...))
😬 Логика зависела от UI.

✅ Решение: GameSettings + CellType Registry (изображение 10)


Теперь каждый тип клетки знает свои правила,
а логика просто спрашивает у неё, что делать.

🔥 Можно легко добавить свои типы клеток
🔥 Свои правила
🔥 Даже комбинировать их — никаких ограничений!


🎯 Главные принципы


1️⃣ Single Responsibility Principle — каждый класс делает одно дело
2️⃣ Separation of Concerns — логика, UI, данные — раздельно
3️⃣ Encapsulation — детали реализации скрыты
4️⃣ Open/Closed Principle — легко расширять, не меняя старый код
5️⃣ Dependency Inversion — логика не зависит от UI



🔥 Выводы

Рефакторинг — это не «переписать красиво».
Это решение конкретных проблем 👇

1️⃣ Сложно понять код? → Раздели на классы
2️⃣ Баги при изменениях? → Инкапсулируй
3️⃣ Невозможно тестировать? → Отдели логику от UI
4️⃣ Трудно расширять? → Используй паттерны (State, Registry)

Ставь 🔥 если было полезно!
🔥7💋1
Game of Life: Иморт изображений.


😜 Иногда я могу так скажем сильно увлечься.
🫡 Собственно, как сейчас.

👾 В старом проекте была возомжность имортнуть файл и он бы отрисовлася по клеткам, там просто бралось среднее значение по RGB и если больше определенного значения, то клетка в белый красилась.

🚀 Но в новом я решил пойти дальше и юзаю различные алгоритмы для обработки краев, чтобы сделать контур.

⚙️ Но это не все, ведь пользователь сможет сам выбрать нужный пресет, по которому потом создатся поле.

🛠 Пока готова просто обработка фоток и их превью.
❤2🔥1💋1