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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.12.2011, 18:45   #1
SL1M_DOGG
Пользователь
 
Регистрация: 08.06.2009
Сообщений: 96
По умолчанию Танцующий снеговик (delphi)

Вообщем нужно сделать так чтобы снеговик двигался.
Код снеговика:
Код:
unit Unit1;

interface

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

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

var
  Form1: TForm1;
  x,y: integer;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
sndPlaySound('30d.wav', SND_ASYNC); //воспроизведение
canvas.Pen.Color:=clPurple;
canvas.Brush.Color:=clWhite;
canvas.Ellipse(200,200,400,400);  //туловище
canvas.Ellipse( 230,100,370,230);
canvas.Ellipse( 275,50,340,110);


canvas.MoveTo(260,120);    //руки
canvas.LineTo(200,100);
canvas.MoveTo(340,120);
canvas.LineTo(400,100);

canvas.Pen.Color:=clBlack;     //глаза
canvas.Brush.Color:=clBlack;
canvas.Ellipse(280,60,290,70);
canvas.Ellipse(305,60,315,70);

canvas.Pen.Color:=clRed;   //нос
canvas.Brush.Color:=clRed;
canvas.MoveTo(290,75);
canvas.LineTo(250,77);
canvas.MoveTo(290,83);
canvas.LineTo(250, 77);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
sndPlaySound('senatra.wav', SND_ASYNC); //воспроизведение
canvas.Pen.Color:=clPurple;
canvas.Brush.Color:=clWhite;
canvas.Ellipse(200,200,400,400);  //туловище
canvas.Ellipse( 230,100,370,230);
canvas.Ellipse( 275,50,340,110);


canvas.MoveTo(260,120);    //руки
canvas.LineTo(200,100);
canvas.MoveTo(340,120);
canvas.LineTo(400,100);

canvas.Pen.Color:=clBlack;     //глаза
canvas.Brush.Color:=clBlack;
canvas.Ellipse(280,60,290,70);
canvas.Ellipse(305,60,315,70);

canvas.Pen.Color:=clRed;   //нос
canvas.Brush.Color:=clRed;
canvas.MoveTo(290,75);
canvas.LineTo(250,77);
canvas.MoveTo(290,83);
canvas.LineTo(250, 77);
end;

end.
SL1M_DOGG вне форума Ответить с цитированием
Старый 03.12.2011, 22:30   #2
zmey31313
Форумчанин
 
Регистрация: 19.11.2009
Сообщений: 155
Сообщение

Добавь таймера и перерисовывай его.
По всем вопросам связанным с Делфи или Паскаль обращайтесь, чем смогу тем и помогу.
Помог жми на весы!!!
dmi83206389@mail.ru
zmey31313 вне форума Ответить с цитированием
Старый 03.12.2011, 23:34   #3
SL1M_DOGG
Пользователь
 
Регистрация: 08.06.2009
Сообщений: 96
По умолчанию

Цитата:
Добавь таймера и перерисовывай его.
так вот проблема в этом. я не знаю как стирать его и перерисовывать
SL1M_DOGG вне форума Ответить с цитированием
Старый 08.12.2011, 23:51   #4
SL1M_DOGG
Пользователь
 
Регистрация: 08.06.2009
Сообщений: 96
По умолчанию

я попытался для начала подвигать его по горизонтали, но след снеговика остается...
В чем проблема?
Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    procedure FormCreate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  x,y: integer; //координаты опорной точки


implementation

{$R *.dfm}

procedure Insert(x,y: integer);
begin
Form1.canvas.Pen.Color:=clBlack;
Form1.canvas.Brush.Color:=clWhite;
Form1.canvas.Ellipse(x,y+100,x+200,y+300);  //туловище
Form1.canvas.Ellipse( x+30,y,x+170,y+130);
Form1.canvas.Ellipse( x+75,y-50,x+140,y+10);


Form1.canvas.MoveTo(x+60,y+20);    //руки
Form1.canvas.LineTo(x,y);
Form1.canvas.MoveTo(x+140,y+20);
Form1.canvas.LineTo(x+200,y);

Form1.canvas.Pen.Color:=clBlack;     //глаза
Form1.canvas.Brush.Color:=clBlack;
Form1.canvas.Ellipse(x+80,y-40,x+90,y-30);
Form1.canvas.Ellipse(x+105,y-40,x+115,y-30);

Form1.canvas.Pen.Color:=clRed;   //нос
Form1.canvas.Brush.Color:=clRed;
Form1.canvas.MoveTo(x+90,y-25);
Form1.canvas.LineTo(x+50,y-23);
Form1.canvas.MoveTo(x+90,y-17);
Form1.canvas.LineTo(x+50, y-23);
end;



procedure TForm1.FormCreate(Sender: TObject);
begin
Form1.Width := 800;
  Form1.Height := 600;
  x := 200;
  y := 100;
  Timer1.Interval := 50;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
Form1.Canvas.Pen.Color := Form1.Color;
  Insert(x,y);

  // Смещаем координаты опорной точки
  if (Form1.ClientWidth > x) then
    Inc(x,5);
  Insert(x,y);
end;

end.
SL1M_DOGG вне форума Ответить с цитированием
Старый 09.12.2011, 01:13   #5
viron
Форумчанин
 
Аватар для viron
 
Регистрация: 02.12.2011
Сообщений: 110
По умолчанию

Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    procedure FormCreate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }
  public
    Procedure Snegovik(clrTyl, clrNose, clrEye: TColor); // цвет туловища, носа, глаз
  end;

var
  Form1: TForm1;
  x,y: Integer;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  Width:= 800;
  Height:= 600;
  x:= 200;
  y:= 100;
  Timer1.Interval:= 50;
end;

procedure TForm1.Snegovik(clrTyl, clrNose, clrEye: TColor);
begin
  with Canvas do
  begin
    Pen.Color:= clrTyl;
    Brush.Color:= clrTyl;

    Ellipse(x, y+100, x+200, y+300);  // туловище
    Ellipse(x+30, y, x+170, y+130);
    Ellipse(x+75, y-50, x+140, y+10);


    MoveTo(x+60,y+20);    //руки
    LineTo(x,y);
    MoveTo(x+140,y+20);
    LineTo(x+200,y);

    Pen.Color:=clrEye;     //глаза
    Brush.Color:=clrEye;
    Ellipse(x+80,y-40,x+90,y-30);
    Ellipse(x+105,y-40,x+115,y-30);

    Pen.Color:=clrNose;   //нос
    Brush.Color:=clrNose;
    MoveTo(x+90,y-25);
    LineTo(x+50,y-23);
    MoveTo(x+90,y-17);
    LineTo(x+50, y-23);
  end;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  //сначала сотрем снеговик на старом месте
  Snegovik(Color,  Color, Color);

  // передвинем на новое
  x:= x + 5;

  // Чтобы не убегал за форму
  if x > ClientWidth then
    x:= 0;

  // И нарисуем на новом месте
  Snegovik(clYellow, clRed, clMaroon);
end;

end.

Последний раз редактировалось viron; 09.12.2011 в 01:19.
viron вне форума Ответить с цитированием
Старый 09.12.2011, 01:24   #6
Heming
Форумчанин
 
Аватар для Heming
 
Регистрация: 06.07.2010
Сообщений: 105
По умолчанию

ОФФТОП:
Майкл Джексон бы гордился, извените не удержался)
Carpe Diem
Heming вне форума Ответить с цитированием
Старый 09.12.2011, 15:16   #7
SL1M_DOGG
Пользователь
 
Регистрация: 08.06.2009
Сообщений: 96
По умолчанию

Цитата:
ОФФТОП:
Майкл Джексон бы гордился, извените не удержался)
к чему это?
SL1M_DOGG вне форума Ответить с цитированием
Старый 11.12.2011, 22:27   #8
SL1M_DOGG
Пользователь
 
Регистрация: 08.06.2009
Сообщений: 96
По умолчанию

Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    procedure FormCreate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }
  public
    Procedure Snegovik(clrTyl, clrNose, clrEye: TColor); // цвет туловища, носа, глаз
  end;

var
  Form1: TForm1;
  x,y: Integer;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  Width:= 800;
  Height:= 600;
  x:= 200;
  y:= 100;
  Timer1.Interval:= 50;
end;

procedure TForm1.Snegovik(clrTyl, clrNose, clrEye: TColor);
begin
  with Canvas do
  begin
    Pen.Color:= clrTyl;
    Brush.Color:= clrTyl;

    Ellipse(x, y+100, x+200, y+300);  // туловище
    Ellipse(x+30, y, x+170, y+130);
    Ellipse(x+75, y-50, x+140, y+10);


    MoveTo(x+60,y+20);    //руки
    LineTo(x,y);
    MoveTo(x+140,y+20);
    LineTo(x+200,y);

    Pen.Color:=clrEye;     //глаза
    Brush.Color:=clrEye;
    Ellipse(x+80,y-40,x+90,y-30);
    Ellipse(x+105,y-40,x+115,y-30);

    Pen.Color:=clrNose;   //нос
    Brush.Color:=clrNose;
    MoveTo(x+90,y-25);
    LineTo(x+50,y-23);
    MoveTo(x+90,y-17);
    LineTo(x+50, y-23);
  end;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  //сначала сотрем снеговик на старом месте
  Snegovik(Color,  Color, Color);

  // передвинем на новое
  x:= x + 5;

  // Чтобы не убегал за форму
  if x > ClientWidth then
    x:= 0;

  // И нарисуем на новом месте
  Snegovik(clYellow, clRed, clMaroon);
end;

end.
этот код должен работать?
что то не могу разобратся в процедуре построения снеговика
SL1M_DOGG вне форума Ответить с цитированием
Старый 11.12.2011, 22:55   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

SL1M_DOGG, это что, Вы скопировали полностью код из пост #5 (c) viron ?!!!

и зачем это нарушение правил (излишнее цитирование)?!


А вообще, код из пост #5 полностью рабочий (правда, там снеговик не танцует, а просто перемещается по горизонтали, о чём и намекал Heming в своей шутке про Джексона...
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
тающий снеговик Olga2010 Помощь студентам 0 17.05.2011 19:28
снеговик Diks Паскаль, Turbo Pascal, PascalABC.NET 1 27.01.2011 19:48
Pascal abc снеговик nikita_ivanchenko Помощь студентам 2 15.12.2010 20:57
Rad Studio 2011 XE: новое в Delphi, C++ Builder, RadPHP и Delphi Prism savva-paladin Софт 18 02.10.2010 20:24
Как открыть БД, написанную в Delphi если нf другой машине Delphi нет? dagarik БД в Delphi 7 22.10.2007 17:54