|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
03.12.2009, 23:33 | #1 | |
Пользователь
Регистрация: 28.04.2009
Сообщений: 31
|
Делаю тетрис на делфи немогу решить проблему
Дорогие программисты, буквально несколько часов назад столкнулся с проблемой -
Делаю тетрис. Есть массив 28 на 12 клеток, в этот массив пишу фигуры. Обозначаю клетки принадлежащие фигуре единицами. Сделал коллизию по X и Y. В таймере поставил прорисовку занятых клеток, и сдвиг по Y до тех пор пока не наступит коллизия. Когда происходит коллизия по Y его значение сбрасывается и создаётся новая фигурка. Решил сгладить движение фигур появилась ошибка. Я добавил новую переменную YL и начал прибавлять ей значение от 1 до 20 то есть когда таймер тикает увеличивается сначала YL и если достигает 20 то YL сбрасывается и к основной координате (то есть Y) прибавляется единица. По задумке всё хорошо вот только на практике, все клетки со значением 1 стали двигаться от 1 до 20 пикселей. Я решил это обойти переименовав фигурки другой цифровой. Вроде всё просто когда коллизия по Y истинна (то есть фигурке некуда больше падать) обозначить все её клетки цифрой 2. И графически цифру 2 отображать по другому (без использования переменной YL). Всё просто! ага не тут-то было, когда я ставлю в своей программе выполнение чего либо после ложности коллизии всё хорошо но когда коллизия истинна и я пытаюсь переписать (записать, затереть) фигурку в программе вылетает ошибка. Цитата:
Код:
Выкладываю исходник и почти рабочий Exe, с двумя текстурками, управление стрелками вверх вправо и влево, стрелку вниз не нажимать она была для тестов.
Чтобы наделать ошибок надо для начала уметь хоть что то делать!
Последний раз редактировалось Gigabit; 04.12.2009 в 10:01. |
|
04.12.2009, 15:10 | #2 |
Форумчянин
Форумчанин
Регистрация: 05.04.2009
Сообщений: 446
|
такая ошибка возникает, например, когда что-пишешь за границами массива
Nobody expects Spanish Inquisition!
|
04.12.2009, 15:41 | #3 |
Пользователь
Регистрация: 28.04.2009
Сообщений: 31
|
Спасибо Juffin, я не знаю что привело к этой ошибке но я нашёл выход -
Вместо того чтобы лепить фигуру другими цифрами, я просто заменил все единицы массива на 2ки после коллизии, ведь когда коллизия произошла мне фигурка больше ненужна, вот я и перебираю всё поле в тот момент пока новая фигурка ещё не создана! Вот решение, надо было просто поискать другой вариант. Код:
Чтобы наделать ошибок надо для начала уметь хоть что то делать!
|
04.12.2009, 21:43 | #4 | |
Форумчянин
Форумчанин
Регистрация: 05.04.2009
Сообщений: 446
|
Цитата:
Nobody expects Spanish Inquisition!
|
|
05.12.2009, 13:45 | #5 |
Пользователь
Регистрация: 28.04.2009
Сообщений: 31
|
Да я согласен именно это не скажется, но весь механизм отображения уже привел развитие программы в тупик, дело в том что - для того чтоб показать следующий кадр программа выполняет следующие действия.
1 Отображает фон 2 переберает весь массив 3 Отображает части фигур в тех местах где они записаны в массиве 4 Проверяет коллизию Мой старенький компьютер ели как с этим справляется, загрузка ЦП на 100%, и что самое важное программа выполняется медленно, то есть чтоб фигурки двигались с нормальной скоростью интервал таймера должен быть минимальный. Но ведь надо в игре сделать хотя бы 10 уровней на на каждом из которых фигурки должны двигаться быстрей чем на предыдущим. ((((( В одной из своих программ я уже обходил это с помощью сокращения расчётов, в ней любой движущийся Юнит прорисовывался на две клетки вокруг себя, а всё остальное не прорисовывалось. Но моя фантазия на этот раз меня подвела и я никак не могу придумать алгоритм, сокращающий перебор массива. Если у вас буду какие нибудь идеи с удовольствием приму во внимание.
Чтобы наделать ошибок надо для начала уметь хоть что то делать!
|
05.12.2009, 14:10 | #6 |
Пользователь
Регистрация: 28.04.2009
Сообщений: 31
|
Прошу прощения, задал вопрос и нашел ответ воспользовавшись поиском.
Админ удали этот пост пожалуйста.
Чтобы наделать ошибок надо для начала уметь хоть что то делать!
Последний раз редактировалось Gigabit; 05.12.2009 в 17:46. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Помогите решить проблему | nismo | Microsoft Office Excel | 7 | 12.09.2008 08:59 |
Немогу решить задачу | Санячос | Общие вопросы Delphi | 2 | 11.06.2008 15:35 |
помогите решить проблему ... | alexey7 | Microsoft Office Excel | 2 | 16.10.2007 13:25 |