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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.07.2013, 10:55   #1
Joose
Пользователь
 
Регистрация: 16.10.2011
Сообщений: 67
По умолчанию Алгоритм вращения фигуры в тетрисе

Всем привет. Возникла проблема при разработке данного алгоритма. Имеется массив 4*4, забитый единицами и нулями, в зависимости от наличия/отсутствия там занятой ячейки. Нужно составить общий алгоритм поворота, который будет работать для любой фигуры. Сам понял только что y_new == x_old, где y_new - номер строки, в которую будет перемещена данная ячейка, а x_old - номер столбца, в котором эта ячейка находилась до поворота. Но как вычислять координату x_new (номер столбца, где будет находиться ячейка после поворота) я так и не понял. Поворот осуществляю по часовой стрелке. Всю голову уже сломал. Помогите разобраться, пожалуйста.
Joose вне форума Ответить с цитированием
Старый 10.07.2013, 11:02   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

http://coderlife.ru/progr/povorot-ma...-gradusov.html
waleri вне форума Ответить с цитированием
Старый 10.07.2013, 11:48   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

ссылочка безусловно хорошая. Но зачем заморачиваться, когда в данном случае можно взять дополнительный массив, переписать туда элементы "с поворотом", после этого скопировать полученные данные в исходный массив.
делов на пару-другую строчек кода...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 10.07.2013, 13:05   #4
Luuzuk
Форумчанин
 
Аватар для Luuzuk
 
Регистрация: 18.01.2012
Сообщений: 975
По умолчанию

Соглашусь с Serge_Bliznykov. Кроме того, массивы с фигурами в разных положениях можно рассчитать и заполнить ручками, чтобы избавиться от лишних вычислений во время выполнения программы)
p.s. да, я знаю что это ловля блох и совершенно непринципиально в условиях современных вычислительных мощностей
Благодарить в репутацию. Проклинать — туда же
Luuzuk вне форума Ответить с цитированием
Старый 10.07.2013, 14:17   #5
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Цитата:
да, я знаю что это ловля блох и совершенно непринципиально в условиях современных вычислительных мощностей
А по-моему - наоборот. Из пренебрежения вот такими мелочами, в комплексе можно получить очень тормознутую программу, независимо от количества этих самых мощностей...
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 10.07.2013, 14:46   #6
Luuzuk
Форумчанин
 
Аватар для Luuzuk
 
Регистрация: 18.01.2012
Сообщений: 975
По умолчанию

Цитата:
Из пренебрежения вот такими мелочами, в комплексе можно получить очень тормознутую программу
В целом - да, поэтому предварительные вычисления есть добро) Достаточно вспомнить первые трехмерные творения idSoftware
В контексте стандартного двухмерного тетриса - маловероятно, если только для воспитания общей культуры программирования.
Благодарить в репутацию. Проклинать — туда же
Luuzuk вне форума Ответить с цитированием
Старый 10.07.2013, 15:02   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Кроме того, массивы с фигурами в разных положениях можно рассчитать и заполнить ручками, чтобы избавиться от лишних вычислений во время выполнения программы
65536 способов расположения 1 и 0 в массиве 4x4. Хотелось бы посмотреть на расчет ручками Да и держать где-то такое количество комбинаций накладно
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 10.07.2013, 15:16   #8
Luuzuk
Форумчанин
 
Аватар для Luuzuk
 
Регистрация: 18.01.2012
Сообщений: 975
По умолчанию

Цитата:
65536 способов расположения 1 и 0 в массиве 4x4. Хотелось бы посмотреть на расчет ручками Да и держать где-то такое количество комбинаций накладно
В классическом тетрисе существует 7 фигур

Каждая фигура может поворачиваться на угол, кратный 90 градусам (особо циничные игры не учитываем)). Итого имеем 7*4=28 вариантов.
Учитывая симметричность некоторых фигур, можем сократить это количество до 19 (квадрат, например, остается квадратом, как его ни поворачивай)
Вопрос: зачем вычислять ручками остальные 65517 вариантов?
Благодарить в репутацию. Проклинать — туда же
Luuzuk вне форума Ответить с цитированием
Старый 10.07.2013, 15:19   #9
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Вопрос: зачем вычислять ручками остальные 65517 вариантов?
Тоды да. Но прежде всего обратил внимание на
Цитата:
Имеется массив 4*4, забитый единицами и нулями
без привязки к тетрису
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 11.07.2013, 22:23   #10
SotaDrop
 
Регистрация: 17.06.2013
Сообщений: 3
По умолчанию

Зачем умножать сущьности...
void newcub:: RollCubik(){ //-- вращение кубика
int pl=mcub[0][0];
mcub[0][0]=mcub[2][0];
mcub[2][0]=mcub[2][2];
mcub[2][2]=mcub[0][2];
mcub[0][2]=pl;

pl=mcub[0][1];
mcub[0][1]=mcub[1][0];
mcub[1][0]=mcub[2][1];
mcub[2][1]=mcub[1][2];
mcub[1][2]=pl;
}

для 3 на 3... очень даже просто.
чуть сложней для 4 на 4
SotaDrop вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
таблица рекордов в тетрисе! Юлия11 C++ Builder 10 12.06.2013 10:34
Движение одной фигуры,вслед изменения высоты другой фигуры. 7vlad37 Microsoft Office Excel 3 21.07.2011 18:01
Не работает алгоритм вращения точки. 616th Помощь студентам 4 06.02.2011 23:31
Алгоритм поиска углов фигуры на изображении Kalrh Помощь студентам 1 19.01.2011 20:02
Вращения закрашиваемого октаэдра kast333 Паскаль, Turbo Pascal, PascalABC.NET 0 10.07.2009 21:53