1. Apache16.03.2025 в 03:04от
  2. D1zo16.03.2025 в 01:11от
Загрузка...

Нужна помощь в Delphi

Тема в разделе "С/С++/Pascal/Delphi", создана пользователем Blacknecro, 13.04.2014.

  1. Blacknecro

    Blacknecro

    Статус:
    Оффлайн
    Регистрация:
    31.03.14
    Сообщения:
    63
    Репутация:
    5 +/-
    Доброго времени суток.
    Нужна ваша помощь в делфи для курсача, как сделать так чтобы 3 картинки двигались рандомно и останавливались на координате 600.
    Я вроде всё написал, но они начинают двигаться через раз.
     
  2. Rikki Six

    Rikki Six

    Статус:
    Оффлайн
    Регистрация:
    13.04.14
    Сообщения:
    45
    Репутация:
    33 +/-
    многопоточность лучше будет добавить, имхо.
     
  3. Blacknecro

    Blacknecro

    Статус:
    Оффлайн
    Регистрация:
    31.03.14
    Сообщения:
    63
    Репутация:
    5 +/-
    а как её добавить?
     
  4. Rikki Six

    Rikki Six

    Статус:
    Оффлайн
    Регистрация:
    13.04.14
    Сообщения:
    45
    Репутация:
    33 +/-
    юзай книги, так просто невозможно написать.
    возможно, конечно, но ты не поймешь:smile:
     
  5. Nimo

    Nimo

    Статус:
    Оффлайн
    Регистрация:
    06.01.13
    Сообщения:
    48
    Репутация:
    7 +/-
    Забудь о много поточности, она тебе не нужна. Кидай исходник, глянем.
     
  6. Blacknecro

    Blacknecro

    Статус:
    Оффлайн
    Регистрация:
    31.03.14
    Сообщения:
    63
    Репутация:
    5 +/-
    Через 40 мин кину, я в магазине сейчас.
     
  7. Blacknecro

    Blacknecro

    Статус:
    Оффлайн
    Регистрация:
    31.03.14
    Сообщения:
    63
    Репутация:
    5 +/-
    unit Unit4;

    interface

    uses
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    Dialogs, ExtCtrls, StdCtrls, jpeg;

    type
    TForm4 = class(TForm)
    Label1: TLabel;
    Image1: TImage;
    Image2: TImage;
    Image3: TImage;
    Timer1: TTimer;
    procedure FormActivate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    private
    { Private declarations }
    public
    { Public declarations }
    end;

    var
    Form4: TForm4;
    x,dx,y,i:integer;

    implementation

    {$R *.dfm}

    procedure TForm4.FormActivate(Sender: TObject);
    begin
    x:=600;
    y:=10;
    dx:=2;
    timer1.Interval:=1;
    end;

    procedure TForm4.Timer1Timer(Sender: TObject);
    begin
    randomize;
    i:=random(8)-4;
    form4.Image1.Left:=round((form4.Image1.Left+dx+form4.Image1.Left+i+form4.Image1.Left+dx)/3);
    i:=random(8)-4;
    form4.Image3.Left:=round((form4.Image3.Left+dx+form4.Image3.Left+i+form4.Image3.Left+dx)/3);
    i:=random(8)-4;
    form4.Image2.Left:=round((form4.Image2.Left+dx+form4.Image2.Left+i+form4.Image2.Left+dx)/3);
    if image3.Left>x then
    begin
    label1.Caption:='3';
    timer1.enabled:=false;
    end;
    if image2.Left>x then
    begin
    label1.Caption:='2';
    timer1.enabled:=false;
    end;
    if image1.Left>x then
    begin
    label1.Caption:='1';
    timer1.enabled:=false;
    end;
    end;

    end.
     
    Последнее редактирование: 14.04.2014
  8. Nimo

    Nimo

    Статус:
    Оффлайн
    Регистрация:
    06.01.13
    Сообщения:
    48
    Репутация:
    7 +/-
    Спасибо за ваш кусок кода, но было бы лучше, если бы вы скинули файл проекта с ресурсами, нежели юнит.

    Как вариант, пару вопросов.
    1. Зачем рандомайзить каждый раз? В общем, его делают один раз в самом начале программы.
    2. Я совершенно не понял каким образом вы хотите двигать картинки? Опишите как должно быть по тз.
     
    Последнее редактирование: 14.04.2014
  9. Blacknecro

    Blacknecro

    Статус:
    Оффлайн
    Регистрация:
    31.03.14
    Сообщения:
    63
    Репутация:
    5 +/-
  10. Nimo

    Nimo

    Статус:
    Оффлайн
    Регистрация:
    06.01.13
    Сообщения:
    48
    Репутация:
    7 +/-
    Замените свой юнит 4 на мой.
    unit Unit4;

    interface

    uses
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    Dialogs, ExtCtrls, StdCtrls, jpeg;

    type
    TForm4 = class(TForm)
    Label1: TLabel;
    Image1: TImage;
    Image2: TImage;
    Image3: TImage;
    Timer1: TTimer;
    procedure FormActivate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    private
    { Private declarations }
    public
    { Public declarations }
    end;

    var
    Form4: TForm4;
    x,dx,y,i:integer;

    implementation

    {$R *.dfm}

    procedure TForm4.FormActivate(Sender: TObject);
    begin
    x:=600;
    y:=10;
    dx:=2;
    timer1.Interval:=1;
    timer1.Enabled := true;
    randomize;
    end;

    procedure TForm4.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    begin
    Application.Terminate;
    end;

    procedure TForm4.Timer1Timer(Sender: TObject);
    begin
    i:=random(8)-4;
    form4.Image1.Left:=round((form4.Image1.Left+dx+form4.Image1.Left+i+form4.Image1.Left+dx)/3);
    i:=random(8)-4;
    form4.Image3.Left:=round((form4.Image3.Left+dx+form4.Image3.Left+i+form4.Image3.Left+dx)/3);
    i:=random(8)-4;
    form4.Image2.Left:=round((form4.Image2.Left+dx+form4.Image2.Left+i+form4.Image2.Left+dx)/3);
    if image3.Left>x then
    begin
    label1.Caption:='3';
    timer1.enabled:=false;
    end;
    if image2.Left>x then
    begin
    label1.Caption:='2';
    timer1.enabled:=false;
    end;
    if image1.Left>x then
    begin
    label1.Caption:='1';
    timer1.enabled:=false;
    end;
    end;

    end.

    И так, разбор полетов.

    1. Не убивали программу при закрытии 4 формы.
    2. И да, ошибка скорее всего в рандомайзе.

    Добавлено. 23:50
    Перепроверьте, подправил юнит.
     
    Последнее редактирование: 14.04.2014
  11. Blacknecro

    Blacknecro

    Статус:
    Оффлайн
    Регистрация:
    31.03.14
    Сообщения:
    63
    Репутация:
    5 +/-
    всё равно работает через раз, но чаще
    может два-три раза запуститься но потом всё равно перестанет работать
     
    Последнее редактирование: 14.04.2014
  12. Nimo

    Nimo

    Статус:
    Оффлайн
    Регистрация:
    06.01.13
    Сообщения:
    48
    Репутация:
    7 +/-
    Интересно, после того как я подправил 10 минут назад,у меня больше ни разу не залипало.
    Вы заменили второй раз? Просто я потом отредактировал.
     
  13. Blacknecro

    Blacknecro

    Статус:
    Оффлайн
    Регистрация:
    31.03.14
    Сообщения:
    63
    Репутация:
    5 +/-
    а всё заменил, теперь всё работает, огромное спасибо!)