![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Форумчанин
Регистрация: 16.02.2013
Сообщений: 169
|
![]()
Фигура появляется и смещается на один пиксел.На следующей итерации фигура снова оказывается наверху.Не понятно почему фигура не падает.Также почему-то,смещается вбок экран.Об этом в предыдущей теме.
|
![]() |
![]() |
![]() |
#2 |
Участник клуба
Регистрация: 03.06.2009
Сообщений: 1,832
|
![]()
так, на следующей итерации вы позицию фигуры должны менять и прорисовывать её заново.
а если экран смещается, то вы, выходит, ему новые координаты предаёте, а не фигуре...
Программирование - это единственный способ заставить компьютер делать то, что тебе хочется, а не то, что приходится.
|
![]() |
![]() |
![]() |
#3 |
Форумчанин
Регистрация: 16.02.2013
Сообщений: 169
|
![]()
У меня фигура падала , до того как внес кое какие-то изменения,а экран все равно сдвигался.То есть это не связанные вещи.Опубликовал код,где может быть ошибка?
Код:
Последний раз редактировалось BDA; 17.11.2023 в 17:47. |
![]() |
![]() |
![]() |
#4 |
Форумчанин
Регистрация: 16.02.2013
Сообщений: 169
|
![]()
Фигуру я смещаю в основном цикле
Код:
Вот текст функции Move(); Код:
В этой функции вызываю функцию Calccoord(). Которая добавляет к координатам xx=x+i ; yy=y+j; Код:
Последний раз редактировалось BDA; 17.11.2023 в 18:41. |
![]() |
![]() |
![]() |
#5 |
Участник клуба
Регистрация: 03.06.2009
Сообщений: 1,832
|
![]()
а убери-ка из игры фигуру и всё, что с ней связано (уничтожение-сжигание полной строки). пусть будет чистое поле. и какова будет реакция на клавиши A, S, D? если и тогда экран будет смещаться, копай дальше - смотри процедуру прорисовки поля.
Программирование - это единственный способ заставить компьютер делать то, что тебе хочется, а не то, что приходится.
|
![]() |
![]() |
![]() |
#6 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,339
|
![]()
SetCursorPos меняет положение курсора мыши, а не курсора в консоли. TScreen.SetEnd "портит" последний символ экрана. Предлагаю такие замены:
Код:
UPD. Чуть причесанный вариант, в который можно поиграть: Код:
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись
![]() Последний раз редактировалось BDA; 22.11.2023 в 05:19. |
![]() |
![]() |
![]() |
#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].Ведь выводится вроде бы первый элемент. |
![]() |
![]() |
![]() |
#8 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,339
|
![]()
Потому что текущий TFigure::Move работает только для dy 0 или 1, а при 5 он пытается передвинуть фигуру сразу на 5 клеток, а если это невозможно, то останавливается. Вот измененная версия с Game Over и любым dy.
Код:
Тип src[0] это char[], поэтому при печати считается указателем на нультерминированную строку.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись
![]() |
![]() |
![]() |
![]() |
#9 |
Форумчанин
Регистрация: 16.02.2013
Сообщений: 169
|
![]()
Сделал переход на следующий уровень.Выдается ошибка в
screen.Put(buf, scr_height / 2, scr_width / 2 - 9); необъявленный идентификатор в функции NewFigure.Почему не воспринимает screen в этой функции. Код:
Последний раз редактировалось BDA; 09.01.2024 в 02:46. |
![]() |
![]() |
![]() |
#10 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,339
|
![]()
Потому что 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 |