Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.09.2014, 12:26   #121
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Цитата:
Сообщение от 8Observer8 Посмотреть сообщение
Давайте правда "отделим логику от GUI", как говорит waleri. Пусть у нас будет какой-то абстрактный отрисовщик и не важно, что это: GDI, DirectX, OpenGL, символы консоли, какие-то средства рисования в консоле и т.д. Этот отрисовщик (рендер) рисует элементы, зная их координаты.

Самый простой вариант тетриса - это строительные блоки из четырёх элементов.

Для начала так набросал:

1) Создаём класс Square, объект которого будет хранить свои координаты
2) Придумываем названия для строительных блоков:

- Крючок
- Зигзаг
- Блок
- Стержень

3) Создаём соответствующие классы для строительных блоков. Каждый объект этих классов будет хранить массив своих квадратов и цвет.

Названия классов строительных блоков:

- Hook
- Zigzag
- Block
- Bar

P.S. Может вместо "Hook" другое название?. Остальные, по-моему, хорошие.
Не хочу обижать, но у вас, весьма смутное представление об ОП. Какие классы, какие блоки (в с, даже такого понятия нет). Всё решается в размерности матрицы. Функции, в данном аспекте, нужны лишь для того, чтобы обеспечить "читабельность" программы. Я, специально не стал приводить алгоритм, в надежде на то, что используя заготовку, ктото заинетересуется. Вы же, опять всё по верхам.
Я привёл код. Где Вашь код, отречённый от среды программирования?
В общем, Вы просто - пустозвон.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 23.09.2014, 13:03   #122
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Цитата:
Сообщение от Smitt&Wesson Посмотреть сообщение
в с, даже такого понятия нет
Причём здесь Си? Тема называется "простой тетрис на С++" Вы неадекватный человек, я уже давно это заметил. И всё остальное, что вы пишите это бред.
8Observer8 вне форума Ответить с цитированием
Старый 23.09.2014, 13:12   #123
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Цитата:
Сообщение от 8Observer8 Посмотреть сообщение
Причём здесь Си? Тема называется "простой тетрис на С++" Вы неадекватный человек, я уже давно это заметил. И всё остальное, что вы пишите это бред.
Вам 20, может чуть больше. 90% из моих сверстников, уже в тех краях, откуда не возвращаются. Бред, это Вы. Будь я на месте модераторов, давно бы Вас забанил. Вы, любую, сколь-нибудь серьёзную тему, пытаетесь ввести в холивар или в позицию "какой я хороший, а все остальные - дерьмо".
В Общем, здесь форум программистов, а не д***в.

Модеры, забаньте чела на недельку, мож поумнеет?

8Observer8, мой ИМХО. Если нечего сказать, лучше не говори.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder

Последний раз редактировалось Smitt&Wesson; 23.09.2014 в 13:16.
Smitt&Wesson вне форума Ответить с цитированием
Старый 23.09.2014, 14:11   #124
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Цитата:
3) Создаём соответствующие классы для строительных блоков. Каждый объект этих классов будет хранить массив своих квадратов и цвет.
Зачем давать названия им?

Не плоди сущности без необходимости.

Smitt&Wesson
Цитата:
или в позицию "какой я хороший, а все остальные - дерьмо".
Да че прикопались к обсерверу. Учится он. Ну... на форуме много таких людей. Ненадо их банить. Я в теме развлекался вообще.
А ты чето злой седня. Расслабься, пиваса бахни что-ли? (прописал как форумный психиатр)

8Observer8
Чем будет Hook отличаться от Bar в плане поведения? - если ничем, то не нужен еще один класс. Ненадо их множить.

Последний раз редактировалось rrrFer; 23.09.2014 в 14:17.
rrrFer вне форума Ответить с цитированием
Старый 23.09.2014, 14:23   #125
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Цитата:
Сообщение от rrrFer Посмотреть сообщение
ЗДа че прикопались к обсерверу. Учится он. Ну... на форуме много таких людей. Ненадо их банить. Я в теме развлекался вообще.
Я, в принципе. Чела направили, нет, он свою линию гнёт. Предложил, дать код, он опять в холивар....
Цитата:
А ты чето злой седня. Расслабься, пиваса бахни что-ли? (прописал как форумный психиатр)О не злой, поросто ты нас не знаешь. И ещё не знаешь, какие мы - "Злые".
Закон гор....

8Observer8
Чем будет Hook отличаться от Bar в плане поведения? - если ничем, то не нужен еще один класс. Ненадо их множить.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 23.09.2014, 15:38   #126
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Цитата:
Сообщение от 8Observer8 Посмотреть сообщение
Давайте правда "отделим логику от GUI", как говорит waleri. Пусть у нас будет какой-то абстрактный отрисовщик и не важно, что это: GDI, DirectX, OpenGL, символы консоли, какие-то средства рисования в консоле и т.д. Этот отрисовщик (рендер) рисует элементы, зная их координаты.

Самый простой вариант тетриса - это строительные блоки из четырёх элементов.

Для начала так набросал:

1) Создаём класс Square, объект которого будет хранить свои координаты
2) Придумываем названия для строительных блоков:

- Крючок
- Зигзаг
- Блок
- Стержень

3) Создаём соответствующие классы для строительных блоков. Каждый объект этих классов будет хранить массив своих квадратов и цвет.

Названия классов строительных блоков:

- Hook
- Zigzag
- Block
- Bar

P.S. Может вместо "Hook" другое название?. Остальные, по-моему, хорошие.
А ведь никто меня не поправил! С таким подходом главная проблема в том, что фигуры то обрезаются, когда линия заполнилась. Хотя можно сделать чтобы у фигур удалялись квадраты из массивов.

Цитата:
Чем будет Hook отличаться от Bar в плане поведения?
Тем что у них по-разному будут пересчитываться координаты при повороте. Вот, кстати, функцию для пересчёта координат при провороте я ещё не продумывал. Позже напишу, что надумал.

P.S. Сразу скажу, что просто времени не хватает сесть и сделать, поэтому просто пытаюсь пока продумать архитектуру независимую от отрисовщика. Пытаюсь понять в правильном ли направлении думаю. И выслушать мнения профи.

Последний раз редактировалось 8Observer8; 23.09.2014 в 15:40.
8Observer8 вне форума Ответить с цитированием
Старый 23.09.2014, 16:07   #127
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

Цитата:
Сообщение от 8Observer8 Посмотреть сообщение
Тем что у них по-разному будут пересчитываться координаты при повороте.
Зачем? Для этого есть матрица трансформации, она одна и применяется ко всем координатам, так что даже в этом отличий не будет.
Даже если не пользоваться матрицей нужно только поменять местами Х и У координаты и/или поменять полярность.

Ref:
http://en.wikipedia.org/wiki/Transfo...atrix#Rotation
waleri вне форума Ответить с цитированием
Старый 23.09.2014, 16:43   #128
ACE Valery
Сама себе режиссер
Старожил
 
Аватар для ACE Valery
 
Регистрация: 27.04.2007
Сообщений: 3,365
По умолчанию

Smitt&Wesson, 8Observer8, без переходов на личности, ок?

Smitt&Wesson, вам особое предупреждение. Не мешайте людям учиться и ошибаться. Тем более, что ваши претензии к алгоритму 8Observer8'а не обоснованы. У каждого свой подход к решению задачи, и он не обязательно должен быть таким, как ваш.
Если я вас напрягаю или раздражаю, вы всегда можете забиться в угол и поплакать
ACE Valery вне форума Ответить с цитированием
Старый 23.09.2014, 16:47   #129
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Обсервер

Цитата:
А ведь никто меня не поправил! С таким подходом главная проблема в том, что фигуры то обрезаются, когда линия заполнилась. Хотя можно сделать чтобы у фигур удалялись квадраты из массивов.
Я не понял что за подход ты там предлагаешь. Я тебе написал что он в корне ущербен. Аргументы привел вроде бы, но не все, потому что ты не написал ничего по делу.

Цитата:
Тем что у них по-разному будут пересчитываться координаты при повороте. Вот, кстати, функцию для пересчёта координат при провороте я ещё не продумывал. Позже напишу, что надумал.
Я ваще не понял что ты там собрался пересчитывать и какие именно координаты ты будешь хранить внутри фигуры. Лично я бы хранил координаты фигуры, а внутри фигуры хранил бы маленький двумерный массив.

Поворот фигуры - это поворот массива на 90 градусов. Левый столбец становится последней строкой, второй столбец - предпоследней строкой и т.п.

Это делается ЕДИНООБРАЗНО для любой фигуры. Поясни еще раз чем в плане поведения будут фигуры отличаться.

Цитата:
Вот, кстати, функцию для пересчёта координат при провороте я ещё не продумывал.
Я тебе уже предлагал сначала юнит-тесты написать. Заметь, что я там набросок тестов делал, а для поворота - не делал. Не так это просто, ось фигуры должна стоять на месте. Перемещать и фращать ты должен фигуру, а не клетки ее. И это еще один аргумент в пользу квадрата 4х4.

Реализацией можно заняться позже, тем более что ничего сложного в ней нет. Это же делают студенты каждый год: http://www.programmersforum.ru/showthread.php?t=38626

waleri

Цитата:
Зачем? Для этого есть матрица трансформации, она одна и применяется ко всем координатам, так что даже в этом отличий не будет.
Эм. Вы про афинные преобразования? - зачем оно тут? - все же проще или я не прав?

ACE Valery
Чмок в щечку

Последний раз редактировалось rrrFer; 23.09.2014 в 16:51.
rrrFer вне форума Ответить с цитированием
Старый 23.09.2014, 17:44   #130
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

Цитата:
Сообщение от rrrFer Посмотреть сообщение
Эм. Вы про афинные преобразования? - зачем оно тут? - все же проще или я не прав?
Проще, потому что у нас частный случай - только ротация и только на фиксированные углы синус/косинус для которых 1, 0 или -1.
Суть замечания была в том, что алгоритм одинаков для всех фигур.
waleri вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C тетрис Цукер Помощь студентам 0 21.11.2011 22:53
Тетрис на си фыф123 Помощь студентам 1 22.06.2011 10:48
Тетрис Александр123456 Общие вопросы C/C++ 1 02.12.2010 23:15
Тетрис k1r1ch Gamedev - cоздание игр: Unity, OpenGL, DirectX 2 02.01.2010 12:20
массив и тетрис sid Паскаль, Turbo Pascal, PascalABC.NET 2 04.04.2007 14:41