|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
16.11.2023, 19:35 | #1 |
Форумчанин
Регистрация: 16.02.2013
Сообщений: 169
|
фигура не падает в тетрисе
Фигура появляется и смещается на один пиксел.На следующей итерации фигура снова оказывается наверху.Не понятно почему фигура не падает.Также почему-то,смещается вбок экран.Об этом в предыдущей теме.
|
17.11.2023, 09:58 | #2 |
Участник клуба
Регистрация: 03.06.2009
Сообщений: 1,834
|
так, на следующей итерации вы позицию фигуры должны менять и прорисовывать её заново.
а если экран смещается, то вы, выходит, ему новые координаты предаёте, а не фигуре...
Программирование - это единственный способ заставить компьютер делать то, что тебе хочется, а не то, что приходится.
|
17.11.2023, 17:43 | #3 |
Форумчанин
Регистрация: 16.02.2013
Сообщений: 169
|
У меня фигура падала , до того как внес кое какие-то изменения,а экран все равно сдвигался.То есть это не связанные вещи.Опубликовал код,где может быть ошибка?
Код:
Последний раз редактировалось BDA; 17.11.2023 в 17:47. |
17.11.2023, 18:02 | #4 |
Форумчанин
Регистрация: 16.02.2013
Сообщений: 169
|
Фигуру я смещаю в основном цикле
Код:
Вот текст функции Move(); Код:
В этой функции вызываю функцию Calccoord(). Которая добавляет к координатам xx=x+i ; yy=y+j; Код:
Последний раз редактировалось BDA; 17.11.2023 в 18:41. |
18.11.2023, 21:31 | #5 |
Участник клуба
Регистрация: 03.06.2009
Сообщений: 1,834
|
а убери-ка из игры фигуру и всё, что с ней связано (уничтожение-сжигание полной строки). пусть будет чистое поле. и какова будет реакция на клавиши A, S, D? если и тогда экран будет смещаться, копай дальше - смотри процедуру прорисовки поля.
Программирование - это единственный способ заставить компьютер делать то, что тебе хочется, а не то, что приходится.
|
21.11.2023, 00:19 | #6 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,342
|
SetCursorPos меняет положение курсора мыши, а не курсора в консоли. TScreen.SetEnd "портит" последний символ экрана. Предлагаю такие замены:
Код:
UPD. Чуть причесанный вариант, в который можно поиграть: Код:
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
Последний раз редактировалось BDA; 22.11.2023 в 05:19. |
03.01.2024, 17:23 | #7 |
Форумчанин
Регистрация: 16.02.2013
Сообщений: 169
|
Все работает.Но если сделать figure.Move(0,5),то фигуры падают не впритык.При увеличении скорости
программа не работает.Как сделать , чтобы фигуры попадали друг на друга.Подозреваю , что дело в том, что при вызове Pos(oldX,oldY) передаются координаты на 4 больше. Другой вопрос void Clear() { memset(scr, '.', sizeof(scr)); } void Show() { SetEnd(); cout << scr[0]; как заполняется весь массив scr точками , ведь memset заполняется не в цикле.И как выводится scr[0].Ведь выводится вроде бы первый элемент. |
04.01.2024, 20:01 | #8 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,342
|
Потому что текущий TFigure::Move работает только для dy 0 или 1, а при 5 он пытается передвинуть фигуру сразу на 5 клеток, а если это невозможно, то останавливается. Вот измененная версия с Game Over и любым dy.
Код:
Тип src[0] это char[], поэтому при печати считается указателем на нультерминированную строку.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
|
08.01.2024, 21:08 | #9 |
Форумчанин
Регистрация: 16.02.2013
Сообщений: 169
|
Сделал переход на следующий уровень.Выдается ошибка в
screen.Put(buf, scr_height / 2, scr_width / 2 - 9); необъявленный идентификатор в функции NewFigure.Почему не воспринимает screen в этой функции. Код:
Последний раз редактировалось BDA; 09.01.2024 в 02:46. |
09.01.2024, 03:07 | #10 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,342
|
Потому что screen это приватное поле класса TGame, о котором метод класса TFigure ничего не знает и не имеет доступа. Можно конечно передать ссылку на screen по аналогии с field, но лучше перенести логику уровней в TGame. Ну или отказаться от ООП, засунув всю логику в один класс, а другие классы/структуры использовать только для красивых имен полей.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Game Over в Тетрисе. Delphi 7 | Divia | Общие вопросы Delphi | 2 | 06.12.2021 09:50 |
Алгоритм вращения фигуры в тетрисе | Joose | Помощь студентам | 11 | 14.07.2013 19:34 |
таблица рекордов в тетрисе! | Юлия11 | C++ Builder | 10 | 12.06.2013 10:34 |
GraphABC фигура | dosha | Помощь студентам | 6 | 11.03.2013 19:31 |
фигура-грани | lex1398 | Помощь студентам | 2 | 28.08.2010 09:54 |