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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.11.2016, 21:13   #1
Zhenya_master
Пользователь
 
Регистрация: 21.05.2016
Сообщений: 51
Вопрос Paintbox и shape

Помогите, пожалуйста.Есть поле paintbox, по которому перемещается квадрат небольшого размера. В самом верху поэйнтбокса передвигается shape, и при столкновении этого квадрата с shape надо смоделировать взрыв и исчезновение shape.
Вот имеющийся код:
Код:
unit Unit1;


interface

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

type
  TForm1 = class(TForm)
    PaintBox1: TPaintBox;
    BitBtn1: TBitBtn;
    BitBtn2: TBitBtn;
    BitBtn3: TBitBtn;
    Timer1: TTimer;
    BitBtn4: TBitBtn;
    Label1: TLabel;
    Timer2: TTimer;
    Shape1: TShape;
    Timer3: TTimer;
    procedure PaintBox1Paint(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Ris(col:integer);
    procedure Timer1Timer(Sender: TObject);
    procedure BitBtn2Click(Sender: TObject);
    procedure BitBtn3Click(Sender: TObject);
    procedure BitBtn4Click(Sender: TObject);
    procedure FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure PaintBox1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure Timer2Timer(Sender: TObject);
    procedure Timer3Timer(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation
var x,y,Xm,Ym,r,g,b,h:integer;
{$R *.DFM}

procedure TForm1.Ris(col:integer);
begin
    PaintBox1.Canvas.Brush.Color:=col;
    PaintBox1.Canvas.FillRect(Rect(x-5,y-5,x+5,y+5));
end;

procedure TForm1.PaintBox1Paint(Sender: TObject);
begin
 With PaintBox1 do
 begin
  With Canvas do
  begin
    Brush.Color:=clNavy;
    FillRect(Rect(0,0,Width,Height));

    Ris(clRed);
  end;
 end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  x:=PaintBox1.Width div 2;
  y:=PaintBox1.Height div 2;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
  var gor,ver:integer;
begin
     Ris(clNavy);
     gor:=Random(50)-25;
     ver:=Random(50)-25;
     x:=x+gor;
     if x<5 then x:=5;
     if x>PaintBox1.Width-5 then x:=PaintBox1.Width-5;
     y:=y+ver;
     if y<5 then y:=5;
     if y>PaintBox1.Height-5 then y:=PaintBox1.Height-5;
     Ris(clRed);
end;

procedure TForm1.BitBtn2Click(Sender: TObject);
begin
  Timer1.Enabled:=True;
end;

procedure TForm1.BitBtn3Click(Sender: TObject);
begin
   Timer1.Enabled:=False;
   Timer3.Enabled:=False;
end;

procedure TForm1.BitBtn4Click(Sender: TObject);
begin
  BitBtn1.Enabled:=False;
  BitBtn2.Enabled:=False;
  BitBtn3.Enabled:=False;
  BitBtn4.Enabled:=False;
  Timer1.Enabled:=False;
  Timer2.Enabled:=False;
  Label1.Caption:='<Esc> - âûõîä.';
 Timer3.Enabled:=True;
 r:=0;
 g:=0;
 b:=5;
 h:=5;
end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  Ris(clNavy);
  case key of
   37:if x>10 then x:=x-5;
   38:if y>10 then y:=y-5;
   39:if x<PaintBox1.Width-10 then x:=x+5;
   40:if y<PaintBox1.Height-10 then y:=y+5;
   27:begin
        BitBtn1.Enabled:=True;
        BitBtn2.Enabled:=True;
        BitBtn3.Enabled:=True;
        BitBtn4.Enabled:=True;
        Label1.Caption:='';
      end;
  end;
  Ris(clRed);
end;

procedure TForm1.PaintBox1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  Xm:=X;Ym:=Y;
  Timer2.Enabled:=True;
end;

procedure TForm1.Timer2Timer(Sender: TObject);
begin
   if (abs(x-Xm)<=5) and (abs(y-Ym)<=5) then
     Timer2.Enabled:=False;
   Ris(clNavy);
   if (abs(x-Xm)>5)then
     if x<Xm then x:=x+5 else x:=x-5;
   if (abs(y-Ym)>5)then
     if y<Ym then y:=y+5 else y:=y-5;
   Ris(clRed);
end;

procedure TForm1.Timer3Timer(Sender: TObject);
begin
if Shape1.Left>Width-80 then
  Shape1.Left:=Shape1.Left-h else begin
  if Shape1.Left>Width-10 then
    Shape1.Left:=Shape1.Left+h;
end;
 end;
end.

Последний раз редактировалось Zhenya_master; 22.11.2016 в 21:15.
Zhenya_master вне форума Ответить с цитированием
Старый 22.11.2016, 23:38   #2
kropotkina-alice
Форумчанин
 
Аватар для kropotkina-alice
 
Регистрация: 27.10.2014
Сообщений: 594
По умолчанию

Посмотрите тут:
http://kladovka.net.ru/index.cgi?pid=dir&rid=15
Может, что полезное почерпнете?
Арканоид там самый первый
kropotkina-alice вне форума Ответить с цитированием
Старый 23.11.2016, 19:01   #3
Zhenya_master
Пользователь
 
Регистрация: 21.05.2016
Сообщений: 51
По умолчанию

Цитата:
Сообщение от kropotkina-alice Посмотреть сообщение
Посмотрите тут:
http://kladovka.net.ru/index.cgi?pid=dir&rid=15
Может, что полезное почерпнете?
Арканоид там самый первый
Спасибо, конечно, но та программа вообще не работает.
Zhenya_master вне форума Ответить с цитированием
Старый 23.11.2016, 19:20   #4
kropotkina-alice
Форумчанин
 
Аватар для kropotkina-alice
 
Регистрация: 27.10.2014
Сообщений: 594
По умолчанию

Вопрос первый:
А вы библиотеку DelphiX устанавливали?
И второй:
Вам нужна скомпилированная чужая программа или вы хотите разобраться в исходниках, чтобы кое-что оттуда использовать в своей программе?
Я полагала, что вам нужны исходники...
kropotkina-alice вне форума Ответить с цитированием
Старый 23.11.2016, 19:26   #5
Zhenya_master
Пользователь
 
Регистрация: 21.05.2016
Сообщений: 51
По умолчанию

Цитата:
Сообщение от kropotkina-alice Посмотреть сообщение
Вопрос первый:
А вы библиотеку DelphiX устанавливали?
И второй:
Вам нужна скомпилированная чужая программа или вы хотите разобраться в исходниках, чтобы кое-что оттуда использовать в своей программе?
Я полагала, что вам нужны исходники...
Увы, такой библиотеки у меня нет.
Просто я по-своему разбираюсь в таких исходниках. Я кое-что убираю, чтобы посмотреть результат(что изменилось) и таким образом понимаю, что к чему относится. Возможно, так не совсем корректно делать, но по-другому я не умею.
Zhenya_master вне форума Ответить с цитированием
Старый 23.11.2016, 19:29   #6
kropotkina-alice
Форумчанин
 
Аватар для kropotkina-alice
 
Регистрация: 27.10.2014
Сообщений: 594
По умолчанию

Цитата:
Сообщение от Zhenya_master Посмотреть сообщение
Увы, такой библиотеки у меня нет
http://abc-it.narod.ru/DELPHIX.htm
Или вот тут:
http://www.delphigfx.narod.ru/2d/013/2d_13.htm
Или вот вам вытащенная оттуда готовая ссылка:
http://www.delphigfx.narod.ru/lib/delphix.rar

Последний раз редактировалось kropotkina-alice; 23.11.2016 в 19:37.
kropotkina-alice вне форума Ответить с цитированием
Старый 23.11.2016, 19:39   #7
Zhenya_master
Пользователь
 
Регистрация: 21.05.2016
Сообщений: 51
По умолчанию

Цитата:
Сообщение от kropotkina-alice Посмотреть сообщение
http://abc-it.narod.ru/DELPHIX.htm
Или вот тут:
http://www.delphigfx.narod.ru/2d/013/2d_13.htm
Или вот вам вытащенная оттуда готовая ссылка:
http://www.delphigfx.narod.ru/lib/delphix.rar
Спасибо, сейчас скачаю и установлю.
Zhenya_master вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Shape в группе. Как понять в VBA, что выделена не просто группа, но и Shape (объект на группе)? DBEER Microsoft Office Word 7 15.02.2016 10:26
Компонент Shape Asira Помощь студентам 1 29.05.2010 00:18
Shape driga Компоненты Delphi 4 03.04.2010 12:22
Pascal цикл с Shape.Left and Shape.Top BanzoO Помощь студентам 1 13.12.2009 21:47
Компоненты Shape Serega251 Общие вопросы Delphi 4 16.04.2009 14:11