Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Пробую написать Тетрис!


Автор: MacTep 20.2.2004, 23:20
Помогите, пожалуйста, с таким вопросом. Пишу тетрис: надо сделать так, чтобы во время падения фигуры пользователь мог ее еще и двигать. Подскажите, плиз, как сделать якобы "многозадачность" - и падение через какой-то период времени фигурки и возможность пользователя вмешаться в это падение. smile.gif

Автор: dm9 20.2.2004, 23:35
Язык?
Если Delphi, то проще всего поставить таймер (думаю, ту занешь, как это делается) и через одинаковый промежуток времени помещать фигуру чуть вниз. И ловить клавиши. Что-то нажато - изменяем координаты и перерисовываем картинку.

Если BorlandPascal / TMTPascal etc., то тогда так:
Код
repeat
  repeat
     //Двигаем фигуру через одинаковые промежутки времени
  until KeyPressed;
  w := ReadKey;
  case w of
  ...
  end;
until false;


Можно подобным способом писать и в Delphi, но я не думаю, что ты настолько хорошо знаешь WinAPI.

Автор: MacTep 15.12.2006, 12:22
Вернулся снова к тетрису. Только теперь на Дельфи. 
По таймеру. smile Как по таймеру? Я ставлю, у меня получается, что за время таймера (допустим, за 1 секунду) фигура смещается. все гуд. smile Но вот и вращать ее и все остальное я могу только один раз за ту самую секунду.... Как сделать вращение независимым от времени сдвига фигуры на одну ступень вниз?

Автор: x77 15.12.2006, 14:16
надо просто обрабатывать событие сразу, а не ждать таймера. я делал так:

Код

procedure TFormMain.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  case Key of
    VK_RETURN: begin
      sbPause.Down := FALSE;
      fTetris.Play;
    end;
    VK_SPACE: sbPause.Click;
    VK_LEFT: fTetris.FigureLeft;
    VK_RIGHT: fTetris.FigureRight;
    VK_DOWN: fTetris.Drop;
    VK_UP: fTetris.Rotate;
  end;
end;


эти процедуры сразу делают с фигурой всё, что надо (двигают, бросают), а по таймеру просто обсчитывается переход вниз и возможен ли он.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)