Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
1 / 1 / 4
Регистрация: 07.10.2012
Сообщений: 123
1

Как сделать, чтобы "Робот Петька" не заходил на остальные на форме?

16.12.2012, 18:28. Показов 1529. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Мне говорили про функции, но я так и не понял что за функции и как ими пользоваться. Что можно прописать в программном коде для кнопок Вправо, Влево, Вниз, Вверх? Всю бошку уже сломал.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
procedure TForm1.Button3Click(Sender: TObject);
begin
button1.Top:=button1.Top+1;
if (button1.Top>471) then
begin
button1.Top:=471;
end;
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
button1.Left:=button1.Left+1;
if (button1.left>649) then
begin
button1.Left:=649;
end;
end;
procedure TForm1.Button5Click(Sender: TObject);
begin
button1.Left:=button1.Left-1;
if button1.Left<0 then
begin
button1.left:=0;
end;
end;
procedure TForm1.SpeedButton1Click(Sender: TObject);
var
CH,CW:integer;
begin
randomize;
CH:=random(ClientHeight-speedbutton1.Height);
CW:=random(ClientWidth-speedbutton1.Width);
if (CH<0) or (CW<0) then
begin
CH:=CH+speedbutton1.Height;
CW:=CW+speedbutton1.Width;
speedbutton1.Top:=CH;
speedbutton1.Left:=CW;
end
else
speedbutton1.Top:=CH;
speedbutton1.Left:=CW;
end;
procedure TForm1.SpeedButton2Click(Sender: TObject);
begin
shape1.width:=shape1.width + 1;
shape1.height:=shape1.height + 1;
end;
procedure TForm1.SpeedButton3Click(Sender: TObject);
begin
shape1.width:=shape1.width - 1;
shape1.height:=shape1.height - 1;
end;
Миниатюры
Как сделать, чтобы "Робот Петька" не заходил на остальные на форме?  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.12.2012, 18:28
Ответы с готовыми решениями:

Что можно сделать, чтобы робот почаще заходил?
Вопрос не про конкретный сайт. Удостоверился, что если в их каталоге то чаще. Что ещё влияет, кроме...

Как сделать так чтобы робот нашел нужную комбинацию игнорируя остальные слова
Прошу помощи. Как сделать так чтобы робот нашел нужную комбинацию игнорируя остальные слова. Как...

«Робот Петька»
3. «Робот Петька». Это – управляемая панель. Ее положение на форме изменяется при щелчках на...

Как сделать чтобы текст не заходил на другой блок?
Как сделать чтобы не зависимо сколько текста в блоке, что бы блок растягивался за текстом. То-есть...

Как сделать так чтобы персонаж был в приорите, так чтобы он не заходил за траву?
Ниже приложил скрин

2
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
16.12.2012, 19:53 2
Смотри:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
 
type
  TForm1 = class(TForm)
    btnRobot: TButton;
    btnUp: TButton;
    btnLeft: TButton;
    btnDown: TButton;
    btnRight: TButton;
    Button6: TButton; // Это так, просто разбросанные кнопки для теста
    Button7: TButton;
    Button8: TButton;
    btnExit: TButton;
    procedure btnExitClick(Sender: TObject);
    procedure btnUpClick(Sender: TObject);
    procedure btnDownClick(Sender: TObject);
    procedure btnLeftClick(Sender: TObject);
    procedure btnRightClick(Sender: TObject);
  private
    { Private declarations }
    function CheckRobotMove(DeltaX, DeltaY : Integer) : Boolean;
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
const Step = 2;
 
procedure TForm1.btnDownClick(Sender: TObject);
begin
   if CheckRobotMove(0, Step) then
      btnRobot.Top := btnRobot.Top + Step;
end;
 
procedure TForm1.btnExitClick(Sender: TObject);
begin
   Close;
end;
 
procedure TForm1.btnLeftClick(Sender: TObject);
begin
   if CheckRobotMove(-Step, 0) then
      btnRobot.Left := btnRobot.Left - Step;
end;
 
procedure TForm1.btnRightClick(Sender: TObject);
begin
   if CheckRobotMove(Step, 0) then
      btnRobot.Left := btnRobot.Left + Step;
end;
 
procedure TForm1.btnUpClick(Sender: TObject);
begin
   if CheckRobotMove(-Step, 0) then
      btnRobot.Top := btnRobot.Top - Step;
end;
 
function TForm1.CheckRobotMove(DeltaX, DeltaY : Integer): Boolean;
var
   NewBounds, Foo : TRect;
   i : Integer;
begin
   Result := False;
   NewBounds := btnRobot.BoundsRect;
   OffsetRect(NewBounds, DeltaX, DeltaY);
 
   // Сначала проверим, не выходим ли за границы формы
   if not PtInRect(Self.ClientRect, NewBounds.TopLeft) or
      not PtInRect(Self.ClientRect, NewBounds.BottomRight) then Exit;
 
   for i := 0 to Self.ControlCount - 1 do // А потом - смотрим, не наедем ли на другой контрол
   begin
      if Controls[i] <> btnRobot then // Самого с собой сравнивать не будем
      begin
         if IntersectRect(Foo, NewBounds, Controls[i].BoundsRect) then Exit;
      end;
   end;
   Result := True; // Вернем True, если всё нормально и можно двигать робота
end;
 
end.
Вложения
Тип файла: zip robot.zip (244.6 Кб, 23 просмотров)
0
1 / 1 / 4
Регистрация: 07.10.2012
Сообщений: 123
16.12.2012, 23:34  [ТС] 3
Цитата Сообщение от UI Посмотреть сообщение
Смотри:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
 
type
  TForm1 = class(TForm)
    btnRobot: TButton;
    btnUp: TButton;
    btnLeft: TButton;
    btnDown: TButton;
    btnRight: TButton;
    Button6: TButton; // Это так, просто разбросанные кнопки для теста
    Button7: TButton;
    Button8: TButton;
    btnExit: TButton;
    procedure btnExitClick(Sender: TObject);
    procedure btnUpClick(Sender: TObject);
    procedure btnDownClick(Sender: TObject);
    procedure btnLeftClick(Sender: TObject);
    procedure btnRightClick(Sender: TObject);
  private
    { Private declarations }
    function CheckRobotMove(DeltaX, DeltaY : Integer) : Boolean;
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
const Step = 2;
 
procedure TForm1.btnDownClick(Sender: TObject);
begin
   if CheckRobotMove(0, Step) then
      btnRobot.Top := btnRobot.Top + Step;
end;
 
procedure TForm1.btnExitClick(Sender: TObject);
begin
   Close;
end;
 
procedure TForm1.btnLeftClick(Sender: TObject);
begin
   if CheckRobotMove(-Step, 0) then
      btnRobot.Left := btnRobot.Left - Step;
end;
 
procedure TForm1.btnRightClick(Sender: TObject);
begin
   if CheckRobotMove(Step, 0) then
      btnRobot.Left := btnRobot.Left + Step;
end;
 
procedure TForm1.btnUpClick(Sender: TObject);
begin
   if CheckRobotMove(-Step, 0) then
      btnRobot.Top := btnRobot.Top - Step;
end;
 
function TForm1.CheckRobotMove(DeltaX, DeltaY : Integer): Boolean;
var
   NewBounds, Foo : TRect;
   i : Integer;
begin
   Result := False;
   NewBounds := btnRobot.BoundsRect;
   OffsetRect(NewBounds, DeltaX, DeltaY);
 
   // Сначала проверим, не выходим ли за границы формы
   if not PtInRect(Self.ClientRect, NewBounds.TopLeft) or
      not PtInRect(Self.ClientRect, NewBounds.BottomRight) then Exit;
 
   for i := 0 to Self.ControlCount - 1 do // А потом - смотрим, не наедем ли на другой контрол
   begin
      if Controls[i] <> btnRobot then // Самого с собой сравнивать не будем
      begin
         if IntersectRect(Foo, NewBounds, Controls[i].BoundsRect) then Exit;
      end;
   end;
   Result := True; // Вернем True, если всё нормально и можно двигать робота
end;
 
end.
Спасибо!!!
Только можете объяснить эти сроки: if CheckRobotMove(0, Step) then...; function CheckRobotMove(DeltaX, DeltaY : Integer) : Boolean; для чего эта процедура function TForm1.CheckRobotMove(DeltaX, DeltaY : Integer): Boolean; if not PtInRect(Self.ClientRect, NewBounds.TopLeft) or
not PtInRect(Self.ClientRect, NewBounds.BottomRight) then Exit (что значит PtInRect, Self.ClientRect, NewBounds.BottomRight); if IntersectRect(Foo, NewBounds, Controls[i].BoundsRect) then Exit; ???
А то нужно будет мне это объяснить, а как не знаю.
0
16.12.2012, 23:34
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.12.2012, 23:34
Помогаю со студенческими работами здесь

Как сделать так чтобы после регистрации в Membership пользователь автоматически не заходил в систему
Как сделать так чтобы после регистрации в Membership пользователь автоматически не заходил в систему

Робот заходил...
Был у меня на сайте робот Яндекса, через день смотрю на кэш страницы - а там старый текст. Когда...

Как сделать чтобы при нажатии на кнопку "PlayWarcraft" заходил на мой сервер через IP adress
ссылка https://code.google.com/p/wc3launcher/ ЛАунчер для сервера Как сделать чтобы при...

Как сделать чтобы при нажатии кнопки S робот спустился вниз на 32 пикселей?
Как сделать чтобы при нажатии кнопки S робот спустился на 32 пикселей и поставил на прошлое место...

Как мне сделать чтобы m отображалось в форме как t, и увеличение происходило в такой же форме?
Доброго времени суток. помогите решить проблему. в приведенном ниже коде происходит добавление...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru