Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.07.2013, 01:19   #1
Rikki-Tikki-Tav
Новичок
Джуниор
 
Регистрация: 06.07.2013
Сообщений: 1
Восклицание Светофор на Лазарусе

Задание: смоделировать работу светофора. Изобразить светофор в виде трех окружностей на черном фоне, способных менять цвет от красного (верхняя окружность), до зеленого (нижняя окружность). Сигналы светофора меняются с небольшой задержкой.

Реализовать движение автомобиля по отношению к светофору. Сделать встречную полосу с отдельным светофором. Когда горит зеленый одного светофора, у другого должен быть красный.

У меня написан даже небольшой код, но много чего не сделано. Даже движение не реализовано:

Код:
unit sem1;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls,
  StdCtrls;
 
type
 
  { TfmMain }
 
  TfmMain = class(TForm)
    btGo: TButton;
    plsemafor: TPanel;
    shRed: TShape;
    shYellow: TShape;
    shGreen: TShape;
    Timer1: TTimer;
    btRun: TToggleBox;
    procedure btGoClick(Sender: TObject);
    procedure btRunClick(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
 
  private
 
  public
 
  end;
 
var
  fmMain: TfmMain;
  state: integer = 0;
  times: array[1..3] of integer = (4000,1000, 4000);
 
implementation
 
{$R *.lfm}
 
{ TfmMain }
 
 
procedure TfmMain.btRunClick(Sender: TObject);
begin
  Timer1.Interval := 1;            // установка начального интервала
  Timer1.Enabled := btRun.Checked; // включение либо выключение таймера по кнопке
end;
 
procedure TfmMain.btGoClick(Sender: TObject);
begin
  ShowMessage('Здесь должна быть проверка правильности'#13#10+
  'перехода на сигнал светофора');
end;
 
procedure TfmMain.Timer1Timer(Sender: TObject);
begin
   inc(state);
   if state > 3 then state := 1;
   case state of
    1: begin
         shRed.Brush.Color := clRed;
         shYellow.Brush.Color:=clGray;
         shGreen.Brush.Color := clGray;
         Timer1.Interval := times[state];
       end;
    2: begin
         shRed.Brush.Color := clGray;
         shYellow.Brush.Color := clYellow;
         shGreen.Brush.Color := clGray;
         Timer1.Interval := times[state];
       end;
    3: begin
         shGreen.Brush.Color := clLime;
         shYellow.Brush.Color := clGray;
         shRed.Brush.Color := clGray;
         Timer1.Interval := times[state];
       end;
  end;
end;
 
end.


________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE]
(это кнопочка на панели форматирования с решёточкой #)
Не забывайте об этом!

Модератор.

Последний раз редактировалось Serge_Bliznykov; 06.07.2013 в 09:34.
Rikki-Tikki-Tav вне форума Ответить с цитированием
Старый 06.07.2013, 09:43   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

ну, в принципе - нормально (я бы, конечно, не менял интервал срабатывания таймера, а отсчитывал нужное время горения каждого цвета светофора внутри таймера (таймер поставил бы интервал небольшой, чтобы срабатывал достаточно часто, а внутри проверял - пора менять сигнал светофора или нет.). Но ваш вариант решения вполне имеет право на жизнь!
Только движение автомобиля я бы в вашем случае повесил на дополнительный таймер.
Киньте на форму ещё один таймер и в нём уже управляйте автомобилем.

p.s. если Вы выложите в архиве полные исходники проекта (нет вашей формы, в частности), то вероятность получить помощь увеличивается.

p.p.s. задавайте конкретные вопросы - что именно у Вас не получается. Пока я не вижу, в чём у Вас трудности...

успехов!
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
задача в лазарусе Invok Помощь студентам 1 14.04.2012 16:37
Ошибочка в лазарусе Invok Помощь студентам 4 12.04.2012 22:05
написать 2 программы в лазарусе Евгения18 Помощь студентам 0 14.12.2011 20:58
Сделать в Лазарусе Ne1StoM Помощь студентам 5 18.11.2011 11:20
Проект на лазарусе! makklovskiy Помощь студентам 6 14.01.2010 17:24