Кто поможет-пузырь выкачу! :)
От: Dinozavric  
Дата: 29.03.04 13:11
Оценка: :)))
Народ, нужно сделать прогу, которая имитирует стыковку двух космических кораблей. Управление только "Назад-вперед курсором", что как бы больше-меньше подача газа...

Две точечки, одна вот так подлетает к другой... если скорость большая. то должна выскочить ошибка -типа какстрофа... удачно- поздравление.

Если кто подскажет — спаибо! Кто сделает — пузырь выкачу! Спасибо! (Питер)
Re: Кто поможет-пузырь выкачу! :)
От: Satrapp Россия  
Дата: 29.03.04 14:20
Оценка: :))
Здравствуйте, Dinozavric, Вы писали:

D>Народ, нужно сделать прогу, которая имитирует стыковку двух космических кораблей. Управление только "Назад-вперед курсором", что как бы больше-меньше подача газа...


D>Две точечки, одна вот так подлетает к другой... если скорость большая. то должна выскочить ошибка -типа какстрофа... удачно- поздравление.


D>Если кто подскажет — спаибо! Кто сделает — пузырь выкачу! Спасибо! (Питер)

Управление типа "назад-вперед курсом" придется самому делать, а ракеты получай
procedure TForm1.Button1Click(Sender: TObject);
var
  myRocket1    : TRect;
  myRocket2    : TRect;
  bBaBah       : boolean;
  nSleep       : integer;
begin
  with myRocket1 do
  begin
    Left := 50;
    Top := 50;
    Right := 70;
    Bottom := 60;
  end;
  with myRocket2 do
  begin
    Left := 150;
    Top := 40;
    Right := 200;
    Bottom := 70;
  end;
  Canvas.Brush.Color := clRed;
  Canvas.Rectangle(myRocket1);
  Canvas.Brush.Color := clBlack;
  Canvas.Rectangle(myRocket2);
  bBaBah := false;
  Randomize;
  while not bBaBah do
  begin
    nSleep := Random(499) + 1;
    Label1.Caption := 'Current speed is about ' + IntToStr(Round(1000/nSleep)) + ' pixel/sec';
    Sleep(nSleep);
    Inc(myRocket1.Left);
    Inc(myRocket1.Right);
    Dec(myRocket2.Left);
    Dec(myRocket2.Right);
    Form1.Repaint;
    Canvas.Brush.Color := clRed;
    Canvas.Rectangle(myRocket1);
    Canvas.Brush.Color := clBlack;
    Canvas.Rectangle(myRocket2);
    bBaBah := (myRocket1.Right = myRocket2.Left);
    Application.ProcessMessages;
  end;
  ShowMessage('Ba-bah!!!');
end;
... << RSDN@Home 1.1.0 stable >>
Re[2]: Кто поможет-пузырь выкачу! :)
От: Dimonka Верблюд  
Дата: 29.03.04 14:22
Оценка: :)
Здравствуйте, Satrapp, Вы писали:
...
плохо спроектировал.
тут кругом ругают название метода Button1Click
Re: Кто поможет-пузырь выкачу! :)
От: Demiurg  
Дата: 29.03.04 15:20
Оценка:
Здравствуйте, Dinozavric, Вы писали:

Писал такую на первом курсе на еще досовском Си... Даже вспоминать не хочется, ибо не то что писал с нуля, а делал дословный перевод с досовского же паскаля...
Re: Кто поможет-пузырь выкачу! :)
От: Dinozavric  
Дата: 29.03.04 15:58
Оценка:
Спасибо!
Re[2]: Кто поможет-пузырь выкачу! :)
От: Arioch  
Дата: 30.03.04 02:53
Оценка:
Hello, Satrapp!

S> Управление типа "назад-вперед курсом" придется самому делать


А что тамделать?

Кладем на форму TActionList
Заваодим в нем два действия, вперед/назад.
Ставим им HotKey
И запоминаем последнее нажатие в глобальной переменой.

Твою процедуру. кладем в поток или на таймер, и добавляем в нее проверку на
клавишу — если нажато, то уменьшаем/увеличиваем скорость и очищаем
переменную.

Так работал старый DOSовский Arcanoid 2
--
[tip] Fix for Outlook Express quoting: http://Arioch.nm.ru/FL/Fidolook_SL.png
E-mail is faked because of spam. the_Arioch@NM.falseDomain.ru
Posted via RSDN NNTP Server 1.8 beta
Re[3]: Кто поможет-пузырь выкачу! :)
От: Dinozavric  
Дата: 30.03.04 05:55
Оценка:
Спасибо! Просто я ф делфи.... Я даже не понимаю, "кладем процедуру" Купил книжку по делфи, сейчас почитываю.

Мужики, а где в Питере мне эту прогу сделать могут? Или помочь сделать? Просто Вам надоест на мои глупые посты отвечать

Если есть ещё советы — Вы не представляете, как я им рад!

Спасибо всем за отзывчивость!
Re: Кто поможет-пузырь выкачу! :)
От: akasoft Россия  
Дата: 30.03.04 18:03
Оценка:
Здравствуйте, Dinozavric, Вы писали:

D>Две точечки, одна вот так подлетает к другой... если скорость большая. то должна выскочить ошибка -типа какстрофа... удачно- поздравление.


Гмы... Теперь ясно, чего у нас ничего на Марс сесть не может...
... << RSDN@Home 1.1.3 beta 2 >>
Re: Сама прога
От: Dinozavric  
Дата: 30.03.04 21:29
Оценка:
А Вы не могли бы мне поподробнее сказать, как мне её по этапам писать. Только без приколов, типа сначала книжку читаешь, потом ещё что-то

Концепция: ОКНО ПРИВЕТСВИЯ с меню ХЕЛП СТЫКОВКА- стыковка — пошла тема хелп- как с прогой работать

2 точечки... вот вперед-назад

Очен надеюсь. Сам могу в ответ покатать на спортивном самолёте... или тот же пузырь Или сайт сделать простенький

Спасибо!
Re[4]: Кто поможет-пузырь выкачу! :)
От: Arioch  
Дата: 30.03.04 21:45
Оценка:
Hello, Dinozavric!

D> Я даже не понимаю, "кладем процедуру"

Просто как предложил Сатрап, ты нажал на кнопку, процедура побежала, и пока
не добежит до конца, форма ни на что не реагирует, включая нажатия на
кнопки.

Из этого дава выхода:
1) положить твою процедуру внутрь OnExecute отдельного потока (TvgThread,
TjvThread) или как мтеод Execute стандартного TThread (статьи по потокам в
Delphi на многих сайтах етсь — Яндекс в помощь).
Когда надо форму обновить, либо используешь tThread.Synchronize, либо (я бы
так делал) делаешь окну PostMessage (myMessage), а в окне его
перехватываешь — это тоже описано в статьях, в хелпе Дельфи, и есть
использовано в VCL, RxLib и т.д. — можно посмаотрет ьи сделать так же.

2) процедуру разбить, чтобы она не циклом бегала, а выполняла один
единственный шаг.
Тогда на форму кидаем TTimer, и из его ЩтУчусгеу вызываем процедуру.
--
[tip] Fix for Outlook Express quoting: http://Arioch.nm.ru/FL/Fidolook_SL.png
E-mail is faked because of spam. the_Arioch@NM.falseDomain.ru
Posted via RSDN NNTP Server 1.8 beta
Re[2]: Сама прога
От: Arioch  
Дата: 31.03.04 06:38
Оценка:
Hello, Dinozavric!

D> А Вы не могли бы мне поподробнее сказать, как мне её по этапам писать.


Что, блин, сессия что-ли ?

http://arioch.nm.ru/sflight

ОБЯЗАТЕЛЬНО прочитай исходники и разберись. Особенно, если сдавать
собираешься преподам.

Написано на Delphi 5 Update 1
+ RxLib ( http://rx.DelphiPlus.org )
+ RxLib updates ( http://polesoft.da.ru )
+ Русификация VCL ( http://polesoft.da.ru )
+ Collapsible Panel (
http://www.torry.net/vcl/panels/panelswitheffects/collapsepanel.zip )
+ psvShine ( http://members.chello.be/ws36637/ )

Упаковано www.7-zip.org

--
[tip] Fix for Outlook Express quoting: http://Arioch.nm.ru/FL/Fidolook_SL.png
E-mail is faked because of spam. the_Arioch@NM.falseDomain.ru
Posted via RSDN NNTP Server 1.8 beta
Re[5]: Кто поможет-пузырь выкачу! :)
От: Satrapp Россия  
Дата: 31.03.04 06:39
Оценка:
Здравствуйте, Arioch, Вы писали:

A>Hello, Dinozavric!


D>> Я даже не понимаю, "кладем процедуру"

A>Просто как предложил Сатрап, ты нажал на кнопку, процедура побежала, и пока
A>не добежит до конца, форма ни на что не реагирует, включая нажатия на
A>кнопки.
Позволю себе не согласиться с этим утверждением Именно для этих целей там и стоит ProcessMessages...
Если на форму кинуть пару кнопок "+" и "-" и расширить область видимости nSleep (закомментировав дополнительно строчки
Randomize;
...
nSleep := Random(499) + 1;

ну и добавив ненулевую инициализацию nSleep), то в обработчиках этих кнопок можно управлять скоростью... Правда при этом все будет жутко тормозить, но все же... Для учебных целей, имхо, сойдет
... << RSDN@Home 1.1.0 stable >>
Re[6]: Кто поможет-пузырь выкачу! :)
От: Dinozavric  
Дата: 31.03.04 06:56
Оценка:
Так а как эта прога в ощих чертах выглядит?
Re[7]: Кто поможет-пузырь выкачу! :)
От: Satrapp Россия  
Дата: 31.03.04 07:12
Оценка:
Здравствуйте, Dinozavric, Вы писали:

D>Так а как эта прога в ощих чертах выглядит?

В общих чертах так: кидаешь на форму Label и 3 кнопки. Первая отвечает за запуск, вторая — за уменьшение скорости, третья — за увеличение скорости. Вот примерный код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  nSleep: integer;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  myRocket1    : TRect;
  myRocket2    : TRect;
  bBaBah       : boolean;
//  nSleep       : integer;
begin
  nSleep := 100;
  with myRocket1 do
  begin
    Left := 50;
    Top := 50;
    Right := 70;
    Bottom := 60;
  end;
  with myRocket2 do
  begin
    Left := 150;
    Top := 40;
    Right := 200;
    Bottom := 70;
  end;
  Canvas.Brush.Color := clRed;
  Canvas.Rectangle(myRocket1);
  Canvas.Brush.Color := clBlack;
  Canvas.Rectangle(myRocket2);
  bBaBah := false;
//  Randomize;
  while not bBaBah do
  begin
//    nSleep := Random(499) + 1;
    Label1.Caption := 'Current speed is about ' + IntToStr(Round(1000/nSleep)) + ' pixel/sec';
    Sleep(nSleep);
    Inc(myRocket1.Left);
    Inc(myRocket1.Right);
    Dec(myRocket2.Left);
    Dec(myRocket2.Right);
    Form1.Repaint;
    Canvas.Brush.Color := clRed;
    Canvas.Rectangle(myRocket1);
    Canvas.Brush.Color := clBlack;
    Canvas.Rectangle(myRocket2);
    bBaBah := (myRocket1.Right = myRocket2.Left);
    Application.ProcessMessages;
  end;
  ShowMessage('Ba-bah!!!');
end;


procedure TForm1.Button2Click(Sender: TObject);
begin
  nSleep := nSleep + 50;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  if nSleep > 50 then
    nSleep := nSleep - 50;
end;

end.
... << RSDN@Home 1.1.0 stable >>
Re[3]: Спасибо!
От: Dinozavric  
Дата: 31.03.04 07:21
Оценка:
Спасибо огромное! Точно... сессия! Выбирай: покатать тебя на самолёте или пузырь? www.aeroclub.com.ru
Re[3]: Сама прога
От: Dinozavric  
Дата: 31.03.04 09:23
Оценка:
Слушай, а какую версию делфи ставть тогда лучше мне? И ещё, если я это ЕХЕ-шник в делфи открою, там я твоих замечательных жуков на ракету заменить смогу, и хелп написать? Или для этого ПАСовский исходник нужен?
Re[3]: Сама прога
От: Dinozavric  
Дата: 31.03.04 17:12
Оценка:
А че за приколы такие? Коппирайты вылезают... И как мне её изменить-то? После моих ихменений она не запускантся... это типа подстава такая?
Re[4]: Сама прога
От: Leonid Troyanovsky  
Дата: 31.03.04 17:30
Оценка:
Здравствуйте, Dinozavric, Вы писали:

D>А че за приколы такие? Коппирайты вылезают... И как мне её изменить-то? После моих ихменений она не запускантся... это типа подстава такая?


Возможно, что нет уверенности, что твой пузырь (самолет) настоящий
--
С уважением, LVT
Re[5]: Сама прога
От: Dinozavric  
Дата: 31.03.04 17:39
Оценка:
ну вы блин даете... ну и на том спасибо!
Re[3]: Сама прога
От: Dinozavric  
Дата: 31.03.04 19:58
Оценка:
Дмитрий, дай исходник плз...
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.