|
Падаван С++
447 / 261 / 89
Регистрация: 11.11.2014
Сообщений: 916
|
||||||
Игра Арканоид06.10.2015, 13:26. Показов 9627. Ответов 16
Метки нет (Все метки)
Добрый день дорогие кибер форучане, сделал попытку написать игру арканоид, вроде вот и получилось, но вот незадача, выйглядит это как то недобросовестно и ужасно со взгляда ООП, я создал подобную тему в разделе OpenGl, но не наказывайте меня модераторы, все вопросы там относяться по большей мере к графической части, а от вас хотелось бы услышать критику в стороны реализации на ООП, что улучшить, что переделать или вообще снести к чертям этот код и все заново, но уже с более четкими задачами. Оставляю код здесь на расмотрение, накидал пару коментов, они из разряда капитан очевидность, но может будут кому то нужны, жду ваших сообщений
![]() Кликните здесь для просмотра всего текста
0
|
||||||
| 06.10.2015, 13:26 | |
|
Ответы с готовыми решениями:
16
Арканоид Арканоид Арканоид |
|
233 / 99 / 27
Регистрация: 20.03.2014
Сообщений: 304
|
|
| 06.10.2015, 14:43 | |
|
Эх) Выкидывать не надо) Но переделать можно многое. Пока редактирую можете подумать на темы:
1. коллизии имен переменных и типов; 2. преимущества передачи параметров по ссылке/константной ссылке; 3. полиморфизм и его применимость в контексте вашей задачи. Добавлено через 1 минуту 4. согласованность именования переменных, типов и функций в расках проекта.
1
|
|
|
Падаван С++
447 / 261 / 89
Регистрация: 11.11.2014
Сообщений: 916
|
|
| 06.10.2015, 15:11 [ТС] | |
|
UltraPenguin, Выкидывать в плане код ?))) Если да то я за ним не гонюсь может кому поможет )))
Коллизия имен переменных и типов, я понял о чем вы к примеру есть класс Ball и переменная с таким же именем собственно как и Field, это понял учтем, по ссылке приимущество в том что не создаеться копия обьекта а работаем с исходным, но я новичек скажем так делал чтобы хотя бы чтото зароботало, по поводо полиморфизма его я думаю можно отнести к методу draw ? Но тут другой вопрос теперь мне сказали на форуме по opengl если мы привязываем вызов opengl в классе то это по сути уже и не ооп ))) Так что я стал подумывать о создании глобальных функций рисования или может я не прав. ![]() Добавлено через 2 минуты По поводу 4го пункта недопонял, обьясните пожалуйста ![]() Добавлено через 5 минут По поводу наследования от Object так подумал, не лучше ли будет пихнуть данные в protected ? Добавлено через 16 минут Еще вот сказали, что наследоваться от точки(Object) не лучшая идея, предложили точку сделать структурой и использовать композицию/агрегацию в других классах
0
|
|
|
233 / 99 / 27
Регистрация: 20.03.2014
Сообщений: 304
|
||
| 06.10.2015, 15:15 | ||
|
Скажу сразу с OpenGL не работал, ее код трогать не буду. По поводу 4го пункта: придерживайтесь единого стиля именования элементов кода хотя бы в рамках проекта. Подробнее про стиль кода например тут или отчасти у Тамики. Статей и ресурсов over9000
1
|
||
|
Падаван С++
447 / 261 / 89
Регистрация: 11.11.2014
Сообщений: 916
|
|
| 06.10.2015, 15:24 [ТС] | |
|
UltraPenguin, услышал вас сейчас почитаю, по поводу ссылок, будет сделано и переделано
![]() Добавлено через 1 минуту А по поводу критики вы не думайте, что так меняю решения, фраза новичек это отмазка будем честны, лучше сразу буду учиться делать правильно, переучиваться сложнее. Добавлено через 2 минуты Преподователь в университете кстати начал поднимать тему, чистого и правильного написания кода с возможным рефакторингом, я думаю к его советам тоже стоит прислушиваться посерьезнее.
0
|
|
| 06.10.2015, 15:26 | |
|
Сам-то я не супер-кодер, но в добавление к предыдущим:
- хардкод размеров - объекту добавить свойство существования, чтобы удалять было легче - блоки в стандартный или самописный контейнер - обработчики событий (столкновение с блоком, падом, проигрыш)
1
|
|
|
Падаван С++
447 / 261 / 89
Регистрация: 11.11.2014
Сообщений: 916
|
|
| 06.10.2015, 15:46 [ТС] | |
|
Enno, по первому пункту чуть поподробнее, по поводу второго предлагаете сделать свойство bool, к примеру и по нему искать какой обьект удалять ? Если правильно понял, то отличная идея
, по поводу контейнера тоже чуть чуть поподробнее, ну или я еще такого не знаю и буду учит тогда, обработчики событий, я так понял этот сумбур который происходит в классе Field, а именно в методе BallTick вынести как группу маленьких методов ?Добавлено через 4 минуты Обработчики проигрыша/выйгрыша сейчас накидаю
0
|
|
| 06.10.2015, 17:11 | |||||
|
Добавлено через 4 минуты Можно кстати сделать разные блоки, с разным количеством "жизней", а метод проверки отскока сделать параметризированным, вроде IsBumped(Object& ball, int bump_type). Во втором параметре указывать надо ли удалять блок при отскоке, а в блоке указывать число жизней. Число жизней показывать цветом можно или текстурой.
1
|
|||||
|
Падаван С++
447 / 261 / 89
Регистрация: 11.11.2014
Сообщений: 916
|
|
| 06.10.2015, 17:14 [ТС] | |
|
Enno, Угу попробуем доделать такое, чуть позже залью код
0
|
|
| 06.10.2015, 17:14 | |
|
Также можно определить виртуальную функцию IsBumped для класса Object, а в производных классах переопределять её. например для круга будет одна формула, а для прямоугольника другая. Плюс все блоки можно объявить наследником класса Object и рассматривать их как один большой композитный и мутирующий от ударов Object.
0
|
|
|
Падаван С++
447 / 261 / 89
Регистрация: 11.11.2014
Сообщений: 916
|
|
| 06.10.2015, 18:09 [ТС] | |
|
Enno, блин столько хороших идей, буду пробовать все реализовать, что вы сказали, если появяться вопросы напишу, и результаты буду сюда заливать
0
|
|
|
233 / 99 / 27
Регистрация: 20.03.2014
Сообщений: 304
|
||||||
| 06.10.2015, 18:49 | ||||||
Сообщение было отмечено obivan как решение
Решение
1) Не используйте "магических цифр". Любую константу старайтесь именовать. Облегчает чтение и понимание кода.
2) Классы на то и классы, что должны аккумулировать внутри себя логику поведения объекта и предоставлять интерфейс в виде функций для воздействия на объект. Поэтому я перенес некоторые переменные и логику из Field в нужные классы. 3) Про правило 1 класс - 2 файла не забываем. Так же сделаете сами. Может что-то уже забыл... если вспомню дополню. Что я сделал: отрефакторил код архитектурно. Что я не сделал: не менял логику работы и вычислений (вроде бы). Кое-что, помеченное TODO, я специально оставил для ваших рук. Вот вам пластилин для дальнейшего творчества:
1
|
||||||
|
Падаван С++
447 / 261 / 89
Регистрация: 11.11.2014
Сообщений: 916
|
|
| 06.10.2015, 19:08 [ТС] | |
|
UltraPenguin, Пока есть желание и рвение, буду продолжать делать, по выше указанным пунктам, сегодня засяду и наверное завтра и после завтра попробую все реализовать, еще хочу добавить менюшку, но это я все сам, я вам выложу обязательно на суд
Огромное спасибо, вы очень помогаете, хотя это я для души делаю ![]() Добавлено через 3 минуты Еще накидаю пример загрузки разных уровней, появилась тут идейка, но надо пока самому разобраться, вообщем не пропадайте далеко
0
|
|
|
233 / 99 / 27
Регистрация: 20.03.2014
Сообщений: 304
|
|
| 06.10.2015, 19:22 | |
|
0
|
|
|
Падаван С++
447 / 261 / 89
Регистрация: 11.11.2014
Сообщений: 916
|
|||||||||||
| 06.10.2015, 19:25 [ТС] | |||||||||||
|
Kerry_Jr, Если память не изменят в си при обявлении переменной мы пишем
0
|
|||||||||||
|
|
|
| 06.10.2015, 20:11 | |
|
obivan, я это прекрасно знаю, поэтому и спросил, зачем в С++ использовать устаревшие (для С++) вещи.
0
|
|
| 06.10.2015, 20:11 | |
|
Помогаю со студенческими работами здесь
17
[C++] Арканоид Арканоид Арканоид
Арканоид с OpenGL Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
|
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение.
И на уровне агентов добавится между грибами или бактериями взаимодействий.
До того я пробовал подход через многомерные массивы,. . .
|
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Налог на собак: https:/ / **********/ gallery/ V06K53e
Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf
Пост отсюда. . .
|
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop?
Ниже её машинный перевод.
После долгих разбирательств я наконец-то вернула себе. . .
|
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод
Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод.
Thinkpad X220 Tablet —. . .
|
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|