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

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

Войти
Регистрация
Восстановить пароль
 
Bretbas
188 / 47 / 7
Регистрация: 05.08.2013
Сообщений: 743
Завершенные тесты: 1
#1

Тетрис на mvc - C++

22.06.2014, 22:34. Просмотров 1027. Ответов 17
Метки нет (Все метки)

Здрасти евриван) Как Вы? Все у Вас в порядке?) Думаю да) А я опять к Вам со своими проблемами( Наверное уже достал Вас хи-хи) Ладно, сразу к теме

Итак, хочу реализовать Тетрис. Когда-то давно я его писал, и в принципе все меня устраивало, пока не прочитал про рефакторинг, паттерны, каркасы и тд. Я понял, что код мой - это ужас!)
Решил заняться плотно каркасом MVC и реализовал несколько приложений на нем, в частности, игру "ЗМЕЙКА" (скоро выложу ее сюда, для Вашей оценки). И вот пришло время Тетриса.
Все шло гладко, тупо следуя каркасу MVC, где то отходя от него, где-то нет, но принцип не нарушал. И вот тут начались трудности.
Я выкладываю Вам два проекта, первый OldTetris, где описал мой старый тетрис, и NewTetris, где следовательно MVC-шный тетрис. Точнее в новом проекте я выкладываю только тупо падение фигур и все, чтобы не загружать процесс объяснения моих трудностей. Я думаю этого достаточно.
Итак, взгляните, в проекте OldTetris, когда я нажимаю клавиши(зажимаю) - влево, вправо, то у меня сдвиг идет очень быстро. Это я добивался тем, что создавал новый поток, который руководил смещением координаты y(падение фигуры вниз) а в основном потоке уже отслеживал нажатие клавиш.
Вопрос: Как мне добиться такого же в моем новом проекте NewTetris? Сейчас, если Вы запустите NewTetris проект, то увидите, что при нажатии - влево, вправо, фигуры идет тупо по диагонали влево или вправо. Не очень красиво согласитесь? Более красивее было в OldTetris. Но я не знаю как
создать похожее именно в новом проекте - если создаю новый поток, так же как и в OldTetris, то происходил мигание какое-то, если по другому покручу - нарушается концепция MVC. Короче как не крутил, ничего у меня не вышло(

Поэтому я обращаюсь к Вам, Уважаемые Форумчане) Я думаю Вы мне поможете организовать такое движение фигуры влево и вправо, как я хочу и как было у меня в прошлом проекте. Конечно если Вы поняли о чем Я))
Спасибо)
Вложения
Тип файла: 7z NewTetris.7z (548.7 Кб, 34 просмотров)
Тип файла: 7z OldTetris.7z (619.2 Кб, 23 просмотров)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.06.2014, 22:34     Тетрис на mvc
Посмотрите здесь:

Оцените тетрис - C++
Написано коряво, но это первый блин. Мне бы очень хотелось его дошлифовать до красивого внешнего и внутреннего содержания. Если участники...

Тетрис и многопоточность - C++
Здравствуйте. Взялся я за тетрис, немного написал, а потом понял, что мне нужны два потока. Вот зачем: у меня игровое поле — двумерный...

Тетрис для начинающих - C++
Всем привет! знаю основы C# но необходимо ознакомиться с C++ и написать тетрис. даже не знаю с чего начать вот туториальчик по...

Тетрис разбор неясностей - C++
Всем доброго времени суток нужна помощь в комментировании желательно как можно подробнее Программы в Visual Studio 2008 всё работает нужны...

Мой первый тетрис - C++
Пишу тетрис ). Подскажите есть ли способ попроще? Например как-то без массива... (мигает). Вот что получается: #include <iostream> ...

Тетрис с цветными фигурами - C++
Помогите написать тетрис с цветными фигурами и что бы после каждых 100 очков выдавало информацию о моем месте обучения(чтобы я мог сам...

Тетрис в командной строке - C++
Возможно ли написать тетрис прямо в командной строке?Если да то как вывести квадрат который в тетрисе основа всех фигур)

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт С++
6552 / 3972 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
23.06.2014, 02:10     Тетрис на mvc #2
Old tetris
Тетрис на mvc

Перемещать фигуры в другом потоке это бред.
New tetris норм
Bretbas
188 / 47 / 7
Регистрация: 05.08.2013
Сообщений: 743
Завершенные тесты: 1
23.06.2014, 22:37  [ТС]     Тетрис на mvc #3
Jupiter, я понимаю,что движение фигуры в новом потоке, это бред. Но как мне осуществить такое же быстрое движение фигуры влево или вправо как в старом тетрисе?без нового потока не получается(
Bretbas
188 / 47 / 7
Регистрация: 05.08.2013
Сообщений: 743
Завершенные тесты: 1
26.06.2014, 23:30  [ТС]     Тетрис на mvc #4
ну что,кто нибудь ответит?)
DrOffset
6929 / 4122 / 942
Регистрация: 30.01.2014
Сообщений: 6,915
26.06.2014, 23:57     Тетрис на mvc #5
Bretbas, Конечно нужно проверять, но я бы попробовал реализовать что-то вроде double buffering для консоли, чтобы избежать мигания.
Сделать массив, который будет представлять весь нужный экран, сначала отражать изменения в этом массиве, а потом разом отрисовывать его. Тогда по сути становятся не нужны функции наподобие SetConsoleCursorPos, которые главным образом и создают мигание.
Bretbas
188 / 47 / 7
Регистрация: 05.08.2013
Сообщений: 743
Завершенные тесты: 1
27.06.2014, 00:33  [ТС]     Тетрис на mvc #6
DrOffset, знаем эту фичу) но пока рано) я пока пишу игрушки в текстовом режиме,потом когда буду переходить на графический режим,будем изучать)
мне не то что мигание нужно убрать,его то я уберу,мне нужно сделать так,чтобы при зажатие кнопок влево или вправо,фигура перемещалась быстрее,чем вниз) Если взглянешь на проект OldTetris,то увидешь,что я это реализовал,но реализовал с помощью второго потока(во втором потоке у меня изменяется координата y-вниз,а в главном потоке по нажатию клавиш влево или вправо,изменяется координата x) из за этого создается эффект,что фигура двигается по зажатию клавиш вправо или влево быстрее.Вот что мне нужно реализовать в NewTetris
DrOffset
6929 / 4122 / 942
Регистрация: 30.01.2014
Сообщений: 6,915
27.06.2014, 03:31     Тетрис на mvc #7
Цитата Сообщение от Bretbas Посмотреть сообщение
DrOffset, знаем эту фичу) но пока рано) я пока пишу игрушки в текстовом режиме
Ты не понял. Это не фича. Это технология. Пофиг где ее применять. Это идиома. Принцип. Подход, если хочешь. Я и предлагаю тебе ее использовать именно в текстовом режиме.
Прочитай еще раз мое сообщение.

По поводу обработки событий. Я думаю нужно сделать так, как сделано в windows api. Очередь сообщений, события попадают туда: события нажатия клавиш, события обновления консоли и события таймера. По таймеру будет осуществляться перерисовка, для отображения падения фигурки. Обработчики событий вправо и влево будут двигать координаты, а пробела - переворачивать.
Насчет второго потока. Я не думаю, что это такая уж и плохая идея. Только во второй поток я бы вынес как раз отслеживание нажатий, а не отрисовку. Этот второй поток клал бы в очередь сообщений основного потока сообщения о нажатиях клавиш. А основной поток, обрабатывая все эти сообщения, выполнял бы сдвиг, перерисовку и переворот фигурок. Таймер же можно не сочинять, их на выбор в win api достаточно, см. например функцию timeSetEvent.
Но на самом деле в windows есть способ отлова клавиш гораздо прямее: см. функцию SetWindowsHookEx. Через нее регистрируешь callback, который и будет ставить события о нажатиях в твою очередь сообщений (его естественно нужно будет написать самому). Второй поток не нужен и дело в шляпе.
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
27.06.2014, 04:18     Тетрис на mvc #8
Bretbas, что-то твои тетрисы, у меня, не хотят нормально работать. Старый зависает при нажатии на любую стрелку, новый вообще не реагирует на клавиши.
DrOffset
6929 / 4122 / 942
Регистрация: 30.01.2014
Сообщений: 6,915
27.06.2014, 04:42     Тетрис на mvc #9
alsav22, а у него там не стрелки, а WASD раскладка, а поворот на пробел
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
27.06.2014, 04:50     Тетрис на mvc #10
Цитата Сообщение от DrOffset Посмотреть сообщение
WASD раскладка, а поворот на пробел
Попробовал WASD, не реагирует, только поворот (пробел) работает. Даже если на каких-то и работает, то зависания, при нажатии на стрелки, не должно быть.
Bretbas
188 / 47 / 7
Регистрация: 05.08.2013
Сообщений: 743
Завершенные тесты: 1
27.06.2014, 05:00  [ТС]     Тетрис на mvc #11
попробуй перейти на английскую расскладку)это недоработка
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
27.06.2014, 06:23     Тетрис на mvc #12
Цитата Сообщение от Bretbas Посмотреть сообщение
попробуй перейти на английскую расскладку
Заработало (на английской). Странно, вроде бы пробовал до этого раскладку менять. Зависание, при нажатии стрелок, тоже недоработка?
Bretbas
188 / 47 / 7
Регистрация: 05.08.2013
Сообщений: 743
Завершенные тесты: 1
28.06.2014, 01:10  [ТС]     Тетрис на mvc #13
не понимаю про какое зависание ты говоришь. Может это из за того,что перерисовка модели фигуры у меня идет так же и при изменении координаты x? Тогда убери операцию notify() в методе set_x_pos(int) в классе модели фигуры.

Добавлено через 9 минут
DrOffset, блина,не хочу я пока переходить на твою идею( хочу реализовать своим подходом) Просто мне тогда придется менять не только тетрис,если менять подход( мне нужно всего лишь скоростное передвижение фигуры влево или вправо при ЗАЖАТИИ клавиш стрелок лево и право
DrOffset
6929 / 4122 / 942
Регистрация: 30.01.2014
Сообщений: 6,915
28.06.2014, 01:48     Тетрис на mvc #14
Bretbas, хук на перехват нажатий попробуй для начала реализовать.
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
28.06.2014, 01:50     Тетрис на mvc #15
Цитата Сообщение от Bretbas Посмотреть сообщение
не понимаю про какое зависание ты говоришь.
Обыкновенное. При нажатии на любую стрелку появляется мигающий курсор. Если после этого нажать на любую клавишу управления движением ('a', 'd'), то результат на скрине. Jupiter, во втором посте, на то же указывал.
Цитата Сообщение от Bretbas Посмотреть сообщение
Тогда убери операцию notify() в методе set_x_pos(int) в классе модели фигуры.
Оно мне надо? Это мой код или твой?
Миниатюры
Тетрис на mvc  
Bretbas
188 / 47 / 7
Регистрация: 05.08.2013
Сообщений: 743
Завершенные тесты: 1
28.06.2014, 02:04  [ТС]     Тетрис на mvc #16
alsav22, вообще хрен знает оО
у меня почему то все ровно
DrOffset, ладно,попробуем...я наверное кстати выложу на днях свои проектики)

Добавлено через 3 минуты
alsav22, это старый проект,писал его давненько...тяжело щас разбирать. Про notify() ,это я говорил про NewTetris
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
28.06.2014, 02:31     Тетрис на mvc #17
Цитата Сообщение от Bretbas Посмотреть сообщение
вообще хрен знает
Если собрать release и запустить, то начальную картинку не выводит (start и пр.), просто мигающий курсор.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.06.2014, 00:21     Тетрис на mvc
Еще ссылки по теме:

Проверка нажатия клавиши (тетрис) - C++
Всем привет. Пишу тетрис. Как параллельно со всем прочим проверять, не была ли нажата определенная клавиша? Слышал о функции...

Поворот фигуры в игре тетрис. - C++
Здравствуйте, пытаюсь написать тетрис, но вот не знаю как крутить фигуры, можете чем то помочь? Слышал про матрицу поворотов только не...

Написал тетрис. Прокомментируйте код пожалуйста ) - C++
Программа полностью готова. Все как в тетрисе работает. Немного мигает, не знаю как вывод массива сделать по другому. Прокомментируйте код...

Неизвестно почему нерабочий тетрис в 400 строк - C++
Да да, я не добавлял функций управления, жду когда заработает физика объектов :( Хидер #ifndef TETRIS_H #define TETRIS_H ...

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


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

Или воспользуйтесь поиском по форуму:
Bretbas
188 / 47 / 7
Регистрация: 05.08.2013
Сообщений: 743
Завершенные тесты: 1
29.06.2014, 00:21  [ТС]     Тетрис на mvc #18
переходите на новую тему,друзья)

http://www.cyberforum.ru/cpp-beginne...ml#post6376221
Yandex
Объявления
29.06.2014, 00:21     Тетрис на mvc
Ответ Создать тему
Опции темы

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