Форум программистов, компьютерный форум, киберфорум
Наши страницы
Бета-тестирование
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
infobos
Строитель
455 / 72 / 4
Регистрация: 18.06.2010
Сообщений: 499
1

Игра Кубик Рубик для Windows

09.08.2017, 09:14. Просмотров 1885. Ответов 64
Метки нет (Все метки)

Опишу свой путь развития:
Я программист уже более 10 лет. Серьезно к трехмерной графике начал присматриваться в январе 2017 года.
В январе 2017 года начал изучать DirectX, OpenGL, C++, ООП подтянул.
Подтолкнуло меня изучать реалистичную трехмерную графику для своих будущих проектов, а именно хочу сделать помощник по расчету инженерных коммуникаций.

При изучении начал осознавать, что это оказалось достаточно сложным процессом, и перед этим решил получить небольшой опыт и поставил себе цель сделать две игрушки:
1. Игра лабиринт: Игра Лабиринт 3D (вторая часть) – генерация уникального большого лабиринта (4 уровня сложности)
2. Игра Кубик Рубик (эта тема посвящена тестированию этой игры)

Из всего опыта подметил больше всего – это умение правильно писать код. Так чтобы проекты писались очень быстро. Я в играх не использовал и пока не собираюсь вообще использовать подключаемые библиотеки типа GLUT. Можно без GLUTa делать приложения. Конечно не обошелся от помощи других профессионалов в этой сфере. Приходилось вставлять готовые открытые алгоритмы в программный код.

В общем, приложение должно работать на Windows7,8,10. Буду признателен, если проверите работу на windowsXP. Хотя ХP похоже уже не пользуется спросом.

Если получите ошибки в программе просьба: Прислать скриншот, указать операционную систему и видеокарту.

Управление в игре Кубик Рубик:

Вращение всего кубика: Удерживаете правую кнопку мыши и двигаете мышку по экрану. Причем двигать можно не только верх, вниз и по диагонали. Но можно и вокруг кубика и вы увидите, что-то новое в управлении… Такое управление я не видел в играх других производителей игр. Это была моя идея сделать такое движение. И мне помог ее сделать один опытный программист. Не знаю, только стоит его рекламировать или нет.
Вращение части кубика: Удерживайте левую кнопку мыши и двигайте мышку в ту сторону, в которую хотите, чтобы вращался механизм. Прицелились мышкой в нужный квадратик, и далее удерживайте левую кнопку мыши и двигайте в ту строну, в которую хотите, чтобы он повернулся.
Клавиша 1: Запутать кубик
Клавиша 2: Собрать кубик

Кстати игру написал на Visual Studio 2012 приложение win32 С++. Голый WinAPI+OpenGL, без всяких помощников вроде GLUTа. Использованы стандартные библиотеки <gl\gl.h> <gl\glu.h>, которые не нуждаются в подкреплении современных ОС Windows. Также потому что функции из этой библиотеки грузятся с драйверами видеокарты. Поэтому приложение должно запускать без проблем.

Возможно, что со старыми видеокартами будут проблемы из-за отсутствия функций. Хотя использовал в рисовании glBegin()glEnd(), чтобы максимально заставить работать на всех ПК. Может случайно захватил другие функции, просто не проверял код и не убирал лишнее.
5
Миниатюры
Игра Кубик Рубик для Windows  
Вложения
Тип файла: rar KubikRubik.rar (75.8 Кб, 38 просмотров)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.08.2017, 09:14
Ответы с готовыми решениями:

Кубик-рубик
Решил написать программу по сборке кубика рубика для ленивых, идея состоит в...

Дорисовать кубик рубик
Господа требуется через canvas на форме нарисовать кубик рубик Лицевую часть...

Кубик Рубик в OpenGL - вращение
Недавно начал осваивать OpenGL, попытался сделать кубик рубика, но столкнулся с...

Кубик-рубик: реализовать управление мышью
Есть рабочая программа Кубик Рубика, помогите обработать управление мышью,...

Кубик рубик с разными цветами+подпись
в Pascal Срочно нужно, заранее спасибо!!

64
fever brain
oh my god
1339 / 698 / 149
Регистрация: 05.01.2016
Сообщений: 2,107
Записей в блоге: 7
11.08.2017, 20:16 41
Да вообщето число комбинаций для кубика-рубика предельно
и их можно хранить гдето в памяти к примеру таким способом вращая стороны: 1>2>6>2
причем даже не важно какой именно стороне в конце концов будут принадлежать цвета
лижбы каждая сторона была полностью закрашенна одним цветом
к примеру полностью все варианты это огромное число которое шесть раз нужно возвести степень 9 (9 клеток тоесть)
в условии сборки ведь не сказанно чтобы именно красная сторона была соседом с зеленой или желтой
это значит еще часть комбинаций не учитывается... както так тоесть для полного просчета нужно много памяти и ресурсов компа, для других способов просчета потребуются формулы (алгоритмы) нахождения эвристический подход
1
DenNik
Непрофессионал
2028 / 1552 / 308
Регистрация: 26.07.2011
Сообщений: 8,203
11.08.2017, 20:20 42
Цитата Сообщение от infobos Посмотреть сообщение
Вернее миллиарды комбинаций кубика сократить до значимых формул
хех!
https://ru.wikipedia.org/wiki/%D0%9A...B8%D0%BA%D0%B0
Число всех достижимых различных состояний кубика Рубика 3x3x3 равно

(8! × 38−1) × (12! × 212−1)/2 = 43 252 003 274 489 856 000. Это число не учитывает то, что ориентация центральных квадратов может быть разной. С учётом ориентации центральных квадратов количество состояний возрастает в 46/2 = 2048 раз, а именно до 88 580 102 706 155 225 088 000 состояний. Однако при сборке кубика ориентацию центральных квадратов обычно не учитывают, поскольку на большинстве кубиков нет пометок, которые позволяли бы её отслеживать.
и как же ты собираешься сокращать?
2
infobos
Строитель
455 / 72 / 4
Регистрация: 18.06.2010
Сообщений: 499
11.08.2017, 20:26  [ТС] 43
Цитата Сообщение от DenNik Посмотреть сообщение
и как же ты собираешься сокращать?
Да ладно проехали... Очень большие цифры. Я примерно накидал задачи, что нужно делать. Как? это уже надо думать.
Просто, наверняка какие-то операции будут приводить к одинаковой запутанности. Эту одинаковость нужно сокращать путем удаления.
0
fever brain
oh my god
1339 / 698 / 149
Регистрация: 05.01.2016
Сообщений: 2,107
Записей в блоге: 7
11.08.2017, 20:29 44
Цитата Сообщение от infobos Посмотреть сообщение
Да ладно проехали
Реализация нормальная, мне нравится

Но как игра, я б в нее не играл, я не вижу всех сторон, потомучто не могу его повертеть только
его три стороны вижу
1
infobos
Строитель
455 / 72 / 4
Регистрация: 18.06.2010
Сообщений: 499
11.08.2017, 20:31  [ТС] 45
Цитата Сообщение от fever brain Посмотреть сообщение
Но как игра, я б в нее не играл, я не вижу всех сторон потомучто не могу его повертеть только
его три стороны вижу
Управление смотри в первом сообщении. Можно вращать кубик и видеть другие стороны.
1
fever brain
oh my god
1339 / 698 / 149
Регистрация: 05.01.2016
Сообщений: 2,107
Записей в блоге: 7
11.08.2017, 20:35 46
Цитата Сообщение от infobos Посмотреть сообщение
Управление смотри в первом сообщении
В управлении разобрался, стало удобнее )) в расскраске какие-то недоделки почемуто нет сплошного цвета
если исправить то это будет вполне нормальная игрушка )
1
Миниатюры
Игра Кубик Рубик для Windows  
Evg
Эксперт CАвтор FAQ
19636 / 7328 / 551
Регистрация: 30.03.2009
Сообщений: 20,491
Записей в блоге: 30
11.08.2017, 20:37 47
Цитата Сообщение от fever brain Посмотреть сообщение
в расскраске какие-то недоделки почемуто нет сплошного цвета
Ты скриншот покажи
1
fever brain
oh my god
1339 / 698 / 149
Регистрация: 05.01.2016
Сообщений: 2,107
Записей в блоге: 7
11.08.2017, 20:40 48
Цитата Сообщение от Evg Посмотреть сообщение
Ты скриншот покажи
Добавил скриншот смотри выше
вот еще:
1
Миниатюры
Игра Кубик Рубик для Windows  
Evg
Эксперт CАвтор FAQ
19636 / 7328 / 551
Регистрация: 30.03.2009
Сообщений: 20,491
Записей в блоге: 30
11.08.2017, 20:43 49
И укажи модель видеокарты, ТС'у это для анализа пригодится
Ну и на всякий случай опиши, как ты этого добился. У меня, например, такого нет. Так что это возможно только на твоём компе такой дефект, а потому для исправления подобных проблем нужна максимально полная информация о том, что имеется на твоей стороне. ТС, думается, уточнит, что именно надо
1
fever brain
oh my god
1339 / 698 / 149
Регистрация: 05.01.2016
Сообщений: 2,107
Записей в блоге: 7
11.08.2017, 20:49 50
Скрин из диспетчера устройств пойдет ?
1
Миниатюры
Игра Кубик Рубик для Windows  
Evg
Эксперт CАвтор FAQ
19636 / 7328 / 551
Регистрация: 30.03.2009
Сообщений: 20,491
Записей в блоге: 30
11.08.2017, 22:47 51
Лучше напиши модель процессора и материнки. У тебя встроенная видеокарта, но по такому скриншоту не понять, во что конкретно он встроен (хотя может специалисты и так поймут). В любом случае название конкретной модели позволит точно понять, какую версию OpenGL (или чего там) поддерживает железо, а это в свою очередь позволит понять природу косяка
1
infobos
Строитель
455 / 72 / 4
Регистрация: 18.06.2010
Сообщений: 499
12.08.2017, 06:46  [ТС] 52
Цитата Сообщение от fever brain Посмотреть сообщение
в расскраске какие-то недоделки почемуто нет сплошного цвета
Мне кажется это из-за чувствительнсти буфера глубины. Наверно ваша видеокарта имеет меньше делений "буфера глубины" и рассчитывает близко расположенные полигоны в одну плоскость.
Точно знаю, что такие эффекты появляются, когда два полигона совпадают в плоскости, либо находятся рядом. Не раз наблюдал в разных 3D приложениях эту ряб. А также у себя не раз воспроизводил (рисовал разные полигоны в одной плоскости).

В игре кубик рубик: На черный полигон сверху на расстоянии 0.001f ложится полигон определенного цвета(цветной полигон).
Приготовил файлы для определения порога чувствительности вашей карты:

KubikRubik00001.exe На моей видеокарте маленько начинается ряб при расстоянии в 10 раз меньше: 0.0001f
KubikRubik000001.exe (100% рябь) при расстоянии в 100 раз меньше: 0.00001f
KubikRubik4.exe Было 0.001f
KubikRubik0002.exe = расстояние 0.002f
KubikRubik0004.exe = расстояние 0.004f
KubikRubik0008.exe = расстояние 0.008f
KubikRubik0016.exe = расстояние 0.016f

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

Прикрепил несколько файлов в один архив: chekrabitsa.rar
0
Миниатюры
Игра Кубик Рубик для Windows  
Вложения
Тип файла: rar chekrabitsa.rar (480.5 Кб, 4 просмотров)
infobos
Строитель
455 / 72 / 4
Регистрация: 18.06.2010
Сообщений: 499
12.08.2017, 07:09  [ТС] 53
Нашел ошибку в программе: В цветоиндексном методе рисовался полигон с отклонениями и не давал возможности произвести команду поворота. Также сделал отклонение расстояние 0.004f.
Прикрепил: KubikRubik5.rar
0
Вложения
Тип файла: rar KubikRubik5.rar (65.1 Кб, 13 просмотров)
fever brain
oh my god
1339 / 698 / 149
Регистрация: 05.01.2016
Сообщений: 2,107
Записей в блоге: 7
13.08.2017, 01:38 54
Одна из версий сработала корректно
KubikRubik0016.exe
1
Миниатюры
Игра Кубик Рубик для Windows  
fever brain
oh my god
1339 / 698 / 149
Регистрация: 05.01.2016
Сообщений: 2,107
Записей в блоге: 7
13.08.2017, 02:31 55
---<Стёр дублированное сообщ.>
1
infobos
Строитель
455 / 72 / 4
Регистрация: 18.06.2010
Сообщений: 499
13.08.2017, 06:28  [ТС] 56
В вашем случае понятно теперь, как решать такую проблему:
1. Рисовать так, чтобы не было близкорасположенных полигонов по плоскости.
2. Возможно нужно масштаб цыфр менять: Работать не 0.001-0.002, а увеличить рабочие цифры до 1.0-2.0. Например расстояние делать миллимитровым для всего проекта рисования. И не уходить к цыфрам меньше единицы.
3. Для будущих проектов вводить поправочный коэффициент для всех цыфровых значений, чтобы корректировать масштаб рисования.
4. Возможно, что-то с переменными типами происходит. Они конвертируются в видекарту с другими значениями(с потерями в точности).
Сейчас нет мотивации корректировать этот проект под нужный масштаб цыфр и рисовать отдельные полигоны в одной плоскости. Потому что это займет много времени.
В будущих проектах учту эти требования.

Добавлено через 5 минут
Из-за этой ряби может цветоиндексный метод страдать. Там тоже есть наложенные полигоны. Просто с экономил алгоритм рисования.
1
Evg
Эксперт CАвтор FAQ
19636 / 7328 / 551
Регистрация: 30.03.2009
Сообщений: 20,491
Записей в блоге: 30
13.08.2017, 10:10 57
Цитата Сообщение от infobos Посмотреть сообщение
4. Возможно, что-то с переменными типами происходит. Они конвертируются в видекарту с другими значениями(с потерями в точности)
Нужно работать с переменными типа float. В языке Си вещественные константы (типа 1.23) по умолчанию имеют тип double, чтобы они были float'ами, надо писать 1.23f. Соответственно, константа типа double может все вычисления свести к вычислениям над double'ами, что может привести к тому, что одно и то же вычисление на CPU и GPU даст разные результаты
1
infobos
Строитель
455 / 72 / 4
Регистрация: 18.06.2010
Сообщений: 499
13.08.2017, 14:51  [ТС] 58
Цитата Сообщение от Evg Посмотреть сообщение
Нужно работать с переменными типа float. В языке Си вещественные константы (типа 1.23) по умолчанию имеют тип double, чтобы они были float'ами, надо писать 1.23f. Соответственно, константа типа double может все вычисления свести к вычислениям над double'ами, что может привести к тому, что одно и то же вычисление на CPU и GPU даст разные результаты
В коде все ок: Используется float и значения с 0.01f
Возможно, что лучше использовать GLfloat для переменных со значениями функций OpenGL. Я этого не делал. Придется делать. Часто в коде видел вставки (GLfloat ). Да и много видел кода, где за место float используется GLfloat. Думаю не зря.
К типам double не пробовал, но скорее всего буду переходить на double. Тоже поставлю на заметку.
Попробую в будущих проектах применить double.
1
Evg
Эксперт CАвтор FAQ
19636 / 7328 / 551
Регистрация: 30.03.2009
Сообщений: 20,491
Записей в блоге: 30
13.08.2017, 22:27 59
Цитата Сообщение от infobos Посмотреть сообщение
Возможно, что лучше использовать GLfloat
Это typedef на float, так что с технической точки зрения разницы нет. Вопрос исключительно из области культуры программирования

Цитата Сообщение от infobos Посмотреть сообщение
К типам double не пробовал, но скорее всего буду переходить на double
Этого, кстати, не надо. На видеокартах double работает медленно, да и нет в нём необходимости при работе с 3д-графикой
1
Fulcrum_013
1541 / 1187 / 138
Регистрация: 14.12.2014
Сообщений: 10,106
Завершенные тесты: 3
14.08.2017, 17:43 60
Цитата Сообщение от Evg Посмотреть сообщение
Этого, кстати, не надо. На видеокартах double работает медленно, да и нет в нём необходимости при работе с 3д-графикой
Зато в работе с 3D объектами необходимость имеется. У человека главная задача из серии CAD, там точности +/- лапоть которую дает float не хватит.
Да и касательно самой графики. Поставьте камеру на расстояние 30 тыс единиц от орижина ГСК. Привяжите к камере несколько визуальных объектов (типа взгляд из кабины). Повертите камеру, подвигайте связку визуалы-камера. Теперь понимаете откуда во всей антинаучных фантастический фильмах про космос возникает офигенная вибрация при движении?
Решений этой проблемы 2 - 1-е и решающее все вопросы - увеличение разрядной сетки хотя бы матриц СК объектов и матриц преобразования СК. 2-е - пляски с бубном в духе сначала перенести орижин в точку камеры потом поворачивать по трассе WorldSpace-CameraSpace-ScreenSpace. второй способ дает в общемто какую то иллюзийю решения при отрисовке, но позиционирование объектов чем дальше от орижина ГСК тем меньше точность позиционирования.

Добавлено через 15 секунд
Цитата Сообщение от Evg Посмотреть сообщение
Этого, кстати, не надо. На видеокартах double работает медленно, да и нет в нём необходимости при работе с 3д-графикой
Зато в работе с 3D объектами необходимость имеется. У человека главная задача из серии CAD, там точности +/- лапоть которую дает float не хватит.
Да и касательно самой графики. Поставьте камеру на расстояние 30 тыс единиц от орижина ГСК. Привяжите к камере несколько визуальных объектов (типа взгляд из кабины). Повертите камеру, подвигайте связку визуалы-камера. Теперь понимаете откуда во всей антинаучных фантастический фильмах про космос возникает офигенная вибрация при движении?
Решений этой проблемы 2 - 1-е и решающее все вопросы - увеличение разрядной сетки хотя бы матриц СК объектов и матриц преобразования СК. 2-е - пляски с бубном в духе сначала перенести орижин в точку камеры потом поворачивать по трассе WorldSpace-CameraSpace-ScreenSpace. второй способ дает в общемто какую то иллюзийю решения при отрисовке, но позиционирование объектов чем дальше от орижина ГСК тем меньше точность позиционирования.

Добавлено через 33 секунды
Цитата Сообщение от Evg Посмотреть сообщение
Этого, кстати, не надо. На видеокартах double работает медленно, да и нет в нём необходимости при работе с 3д-графикой
Зато в работе с 3D объектами необходимость имеется. У человека главная задача из серии CAD, там точности +/- лапоть которую дает float не хватит.
Да и касательно самой графики. Поставьте камеру на расстояние 30 тыс единиц от орижина ГСК. Привяжите к камере несколько визуальных объектов (типа взгляд из кабины). Повертите камеру, подвигайте связку визуалы-камера. Теперь понимаете откуда во всей антинаучных фантастический фильмах про космос возникает офигенная вибрация при движении?
Решений этой проблемы 2 - 1-е и решающее все вопросы - увеличение разрядной сетки хотя бы матриц СК объектов и матриц преобразования СК. 2-е - пляски с бубном в духе сначала перенести орижин в точку камеры потом поворачивать по трассе WorldSpace-CameraSpace-ScreenSpace. второй способ дает в общемто какую то иллюзийю решения при отрисовке, но позиционирование объектов чем дальше от орижина ГСК тем меньше точность позиционирования.
1
14.08.2017, 17:43
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.08.2017, 17:43

Нарисовать кубик рубик с разными цветами
срочно нужны

Как сделан этот кубик рубик?
Как сделан этот кубик рубик? как сделаны эти стрелочки?

Нарисовать "кубик рубик"
помогите сделать задачу через модуль Graph, без анимаций просто нарисовать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru