Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
STBOL
1 / 1 / 0
Регистрация: 02.03.2013
Сообщений: 86
#1

Как создать фигуры для тетриса? - C++

05.08.2014, 22:31. Просмотров 819. Ответов 11
Метки нет (Все метки)

Привет всем! Захотел написать простенькую игру и решил начать с тетриса. Пишу в visual studio 2013 c++. Как и всегда появляются проблемы:
Нарисовал текстурки для фигур, но я не знаю как из текстур сделать фигуры.

P.s.
Текстуры прикрепил к посту.
Изображения
 
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.08.2014, 22:31
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как создать фигуры для тетриса? (C++):

инклуды для написания 2 мерного тетриса - C++
хочу начать учить с++ с написания чего-нибудь веселенького, радующего глаз, решил начать с тетриса Вопрос: какие заголовочные файлы нужны...

Hаписать игру гонки для тетриса (Visual Studio) - C++
(буду благодарен язык с++ )

Вводить название фигуры, выводить формулу для вычисления площади этой фигуры - C++
Вводить название фигуры (треугольник, квадрат, ромб, прямоугольник) выводить формулу для вычисления площади этой фигуры.

Главный цикл тетриса - C++
Не могу разобраться как снизить скорость итерации, не убивая при этом фпс. void TestApp::UpdateF(float deltaTime) { ...

С чего начать создания графического тетриса - C++
Подскажите пожалуйста, хочу создать тетрис похожий как на изображении, с чего мне нужно начать? До этого создавал только небольшие...

программа в виде тетриса(нарды, шашки) или вращения планет по орбите - C++
Мне нужна граффическая программа в виде тетриса(нарды, шашки) или вращения планет по орбите. Кому не сложно или есть определенные...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
STBOL
1 / 1 / 0
Регистрация: 02.03.2013
Сообщений: 86
05.08.2014, 22:35  [ТС] #2
Пишу в Windows forms clr. Не использую никаких графических библиотек.
-=ЮрА=-
Заблокирован
Автор FAQ
05.08.2014, 22:36 #3
STBOL, зачем из текстур?Нарисуй для начала квадратами, получится примерно так как на миниатюре. Текстуры и прочее накладывают когда есть рабочий опробованный алгоритм. Азы по GDI графике можешь найти здесь
Как рисовать элементарные геометрические фигуры?
Миниатюры
Как создать фигуры для тетриса?  
STBOL
1 / 1 / 0
Регистрация: 02.03.2013
Сообщений: 86
05.08.2014, 22:55  [ТС] #4
-=ЮрА=-, Спасибо, но похоже тут без основ winApi будет трудновато разобраться. Придется все таки прочитать книги Педзольда...

Если разговор зашел о winApi то, есть вопрос: Книга Педзольда довольно старая и там он пишет чуть ли не про первый windows с графической оболочкой, так вот изменений в winApi с тех пор нет и можно продолжать читать его?
MrCold
854 / 752 / 71
Регистрация: 11.01.2012
Сообщений: 1,942
05.08.2014, 23:07 #5
тут работа с GDI+. В Windows forms это пространство имен System.Drawing ( и др)
Оно там по умолчанию подключено.
-=ЮрА=-
Заблокирован
Автор FAQ
05.08.2014, 23:36 #6
Цитата Сообщение от STBOL Посмотреть сообщение
Если разговор зашел о winApi то, есть вопрос: Книга Педзольда довольно старая и там он пишет чуть ли не про первый windows с графической оболочкой, так вот изменений в winApi с тех пор нет и можно продолжать читать его?
- касательно GDI ничего не менялось уже долгое время. За это время да, появились SVG GDI+ и многие другие графические интерфейсы которые позволяют делать то что GDI не может. НО я бі рекомендовал сначала познать GDI чтобі в дальнейшем понимать "откуда растут ноги" большинства графических оболочек.
STBOL
1 / 1 / 0
Регистрация: 02.03.2013
Сообщений: 86
08.08.2014, 19:34  [ТС] #7
Если рисовать с GDI, то я совсем не представляю как обратиться к нарисованному объекту. Если спуск можно реализовать перерисовкой, но при этом будут стираться другие объекты.
-=ЮрА=-
Заблокирован
Автор FAQ
08.08.2014, 19:49 #8
Цитата Сообщение от STBOL Посмотреть сообщение
Если рисовать с GDI, то я совсем не представляю как обратиться к нарисованному объекту. Если спуск можно реализовать перерисовкой, но при этом будут стираться другие объекты.
- а кто сказал что нужно обарщаться к нарисованному?Заводишь целочисленную матрицу и в ней устанавливаешь 1 в занятых и ноль в незанятых клетках.
STBOL
1 / 1 / 0
Регистрация: 02.03.2013
Сообщений: 86
08.08.2014, 20:18  [ТС] #9
-=ЮрА=-, Ого! Я почему-то и не подумал об этом, спасибо!
Иными словами нужен цикл, который будет проверять каждую клетку при каждом тике.
-=ЮрА=-
Заблокирован
Автор FAQ
08.08.2014, 21:02 #10
Цитата Сообщение от STBOL Посмотреть сообщение
-=ЮрА=-, Ого! Я почему-то и не подумал об этом, спасибо!
Иными словами нужен цикл, который будет проверять каждую клетку при каждом тике.
- для отрисовки да нужен цикл, прохода по всему полю.
Цитата Сообщение от STBOL Посмотреть сообщение
-=ЮрА=-, Ого!
- поверь на самом деле тетрис очень элементарен, в принципе как пакман. Ты про цвет ещё не забудь(занято не занято подходит для 2-цветной версии. Для многоцветной версии можешь идти двумя путями либо делять все на структурах(т.е матрица из структур в которой одно поле отвечает за занятый/не занятый квадратик а второе за цвет), либо же завести ,что при константном размере поля на мой вгляд проще, доп матрицу цвета.
STBOL
1 / 1 / 0
Регистрация: 02.03.2013
Сообщений: 86
08.08.2014, 21:09  [ТС] #11
-=ЮрА=-, Да, я тоже решил сделать матрицу для цвета.
_Ivana
3060 / 1747 / 151
Регистрация: 01.03.2013
Сообщений: 4,929
Записей в блоге: 2
09.08.2014, 02:33 #12
Спасибо участникам темы за дельные рекомендации и примеры кода! Сейчас впервые в жизни решил попробовать создать оконное приложение в среде С++ Вижуал Студии, создал пустой проект, почитал немного интернета и все работает
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
.............
    case WM_LBUTTONDOWN:
        PM = MAKEPOINTS(lParam);
        x2 = PM.x;
        y2 = PM.y;
        InvalidateRgn(hWnd, NULL, FALSE);
        UpdateWindow(hWnd);
        break;
    case WM_PAINT:
        hdc = BeginPaint(hWnd, &ps);
        hPen1 = CreatePen(PS_SOLID, 1, RGB(0, 0, 0));
        holdPen = SelectObject(hdc, hPen1);
        MoveToEx(hdc, x1, y1, NULL);
        LineTo(hdc, x2, y2);
        x1 = x2;
        y1 = y2;
        SelectObject(hdc, holdPen);
        DeleteObject(hPen1);
        EndPaint(hWnd, &ps);
        break;
..............
правда у меня x1,y1,x2,y2 - глобальные переменные, не знаю где их еще можно хранить, чтобы они были снова видны при перерисовке окна функцией CALLBACK WndProc...

Добавлено через 7 минут
Цитата Сообщение от STBOL Посмотреть сообщение
Если спуск можно реализовать перерисовкой, но при этом будут стираться другие объекты.
Какой Пензольд - полчаса интернета и волшебные ответы найдены :
раз и два
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.08.2014, 02:33
Привет! Вот еще темы с ответами:

Программа вычисления местонахождения точки относительно фигуры (лежит ли точка внутри, на контуре или вне фигуры) - C++
Нужно написать программу вычисления местонахождения точки относительно фигуры(лежит ли данная точка внутри неё, на контуре или вне фигуры)....

Как можно бы создать метод для ввода размерности (т.е. для ввода private переменных n,m)? - C++
Как можно бы создать метод для ввода размерности (т.е. для ввода private переменных n,m)? ( что только я не пробывал: то переменные...

Класс для моделирования шахматной фигуры - C++
Разработайте класс для моделирования шахматной фигуры, позволяющий хранить вместе с экземпляром объекта его координаты на доске, цвет...

Программа для прорисовки фигуры-прямоугольника - C++
горю! срочно нужна помощь,нужно написать программу, а я в с++ ну ни бум-бум задание такое: написать прогу кот прорисовывает...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
09.08.2014, 02:33
Ответ Создать тему
Опции темы

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