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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.04.2010, 17:56   #1
aiktz
Форумчанин
 
Регистрация: 10.03.2009
Сообщений: 104
По умолчанию песочные часы в Delphi

обращаюсь к вам с просьбой мне помочь.....нужно организовать падение песчинок в часах, чтобы внизу увеличивалась горка, а вверху уменьшалась.....у меня проблема с верхом....не знаю как сделать, чтобы ненужная часть песчинок изчезала...

Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
label 10;
 var i,R:integer;
 y:real;
begin
canvas.MoveTo(150,100);
canvas.LineTo(350,100);

canvas.MoveTo(150,100);
canvas.LineTo(245,250);

canvas.MoveTo(350,100);
canvas.LineTo(250,250);

canvas.MoveTo(150,400);
canvas.LineTo(350,400);

canvas.MoveTo(150,400);
canvas.LineTo(245,250);

canvas.MoveTo(350,400);
canvas.LineTo(250,250);


Canvas.Pen.Style:=psSolid;
Canvas.Brush.Style :=bsSolid;
Canvas.Brush.Color :=clyellow;
Canvas.Pen.Color :=clyellow;

canvas.MoveTo(162,110);
canvas.LineTo(338,110);
canvas.LineTo(247,248);
canvas.LineTo(162,110);

Canvas.FloodFill(247,120,clyellow,fsBorder);



 Canvas.Pen.Style:=psSolid;
Canvas.Brush.Style :=bsSolid;
Canvas.Brush.Color :=clyellow;
Canvas.Pen.Color :=clyellow;

canvas.MoveTo(210,396);
canvas.Lineto(290,396);

canvas.LineTo(246,370);
canvas.LineTo(210,396);
 Canvas.FloodFill(247,380,clyellow,fsBorder);


 //песчинки
R:=2;
10:
Canvas.Pen.Color :=clyellow;
for i:=0 to 10 do
Canvas.Ellipse(247-R,250+12*i-R,247+R,250+12*i+R);
for i:=1 to 10000000 do
y:=Sin(5);
Canvas.Pen.Color :=clwhite;
for i:=0 to 10 do
Canvas.Ellipse(247-R,250+12*i-R,247+R,250+12*i+R);

Canvas.Pen.Color :=clyellow;
for i:=0 to 10 do
Canvas.Ellipse(247-R,255+12*i-R,247+R,255+12*i+R);
for i:=1 to 10000000 do
y:=Sin(5);
Canvas.Pen.Color :=clwhite;
for i:=0 to 10 do
Canvas.Ellipse(247-R,255+12*i-R,247+R,255+12*i+R);





//треугольник верхний
Canvas.Pen.Color :=clyellow;
for i:=0 to 10 do
canvas.MoveTo(162,110);
canvas.LineTo(338,110);
canvas.LineTo(247,248);
canvas.LineTo(162,110);
for i:=1 to 10000000 do
y:=Sin(5);
Canvas.Pen.Color :=clwhite;
for i:=0 to 10 do
canvas.MoveTo(162,110);
canvas.LineTo(338,110);
canvas.LineTo(247,248);
canvas.LineTo(162,110);
Canvas.FloodFill(247,120,clwhite,fsBorder);


Canvas.Pen.Color :=clyellow;
for i:=0 to 10 do
canvas.MoveTo(175,130);
canvas.LineTo(320,130);
canvas.LineTo(247,248);
canvas.LineTo(175,130);
Canvas.FloodFill(247,112,clyellow,fsBorder);
for i:=1 to 10000000 do
y:=Sin(5);
Canvas.Pen.Color :=clwhite;
for i:=0 to 10 do
canvas.MoveTo(175,130);
canvas.LineTo(320,130);
canvas.LineTo(247,248);
canvas.LineTo(175,130);


Canvas.Pen.Color :=clyellow;
for i:=0 to 10 do
canvas.MoveTo(185,150);
canvas.LineTo(310,150);
canvas.LineTo(247,248);
canvas.LineTo(185,150);
{Canvas.FloodFill(175,390,clyellow,fsBorder); }
for i:=1 to 10000000 do
y:=Sin(5);
Canvas.Pen.Color :=clwhite;
for i:=0 to 10 do
canvas.MoveTo(185,150);
canvas.LineTo(310,150);
canvas.LineTo(247,248);
canvas.LineTo(185,150);


//треугольник нижний
Canvas.Pen.Color :=clyellow;
for i:=0 to 10 do
canvas.MoveTo(210,396);
canvas.Lineto(290,396);
canvas.LineTo(246,370);
canvas.LineTo(210,396);
for i:=1 to 10000000 do
y:=Sin(5);
Canvas.Pen.Color :=clwhite;
for i:=0 to 10 do
canvas.MoveTo(210,396);
canvas.Lineto(290,396);
canvas.LineTo(246,370);
canvas.LineTo(210,396);


Canvas.Pen.Color :=clyellow;
for i:=0 to 10 do
canvas.MoveTo(180,396);
canvas.Lineto(320,396);
canvas.LineTo(243,360);
canvas.LineTo(180,396);
Canvas.FloodFill(195,390,clyellow,fsBorder);
for i:=1 to 10000000 do
y:=Sin(5);
Canvas.Pen.Color :=clwhite;
for i:=0 to 10 do
canvas.MoveTo(180,396);
canvas.Lineto(320,396);
canvas.LineTo(250,360);
canvas.LineTo(180,396);


Canvas.Pen.Color :=clyellow;
for i:=0 to 10 do
canvas.MoveTo(160,396);
canvas.Lineto(340,396);
canvas.LineTo(254,350);
canvas.LineTo(160,396);
Canvas.FloodFill(175,390,clyellow,fsBorder);
for i:=1 to 10000000 do
y:=Sin(5);
Canvas.Pen.Color :=clwhite;
for i:=0 to 10 do
canvas.MoveTo(160,396);
canvas.Lineto(340,396);
canvas.LineTo(254,350);
canvas.LineTo(160,396);

 goto 10;

end;
end.
aiktz вне форума Ответить с цитированием
Старый 24.04.2010, 03:43   #2
Ntlegend
Форумчанин
 
Аватар для Ntlegend
 
Регистрация: 12.05.2007
Сообщений: 373
По умолчанию

коль уж ты рисуешь на канве - предлагаю рисовать попиксельно (немного гиморно будет придумать алгоритм равномерного распределения песка слева и справа.. но это только на первый взгляд.. есть много вариантов..)

а дальше по истечению времени n у тебя внизу прибавилось n песчинок, соответственно столько же (n песчинок) убралось сверху.. когда n = размеру верхнего ряда верхнего треугольника - то можнО Сразу убрать ряд.. вот и запоминай, сколько песчинок у тебя упало внИз.. когда это число будет = числу верхнего ряда - то просто убери ряд.. оБнули счетчик.. и снова сверяй.. пока сверху есть ряды..
Перемен! - требуют наши сердца. Перемен! - требуют наши глаза.
В нашем смехе и в наших слезах, И в пульсации вен:
"Перемен!Мы ждем перемен!"

Последний раз редактировалось mihali4; 01.11.2010 в 21:45.
Ntlegend вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Цифровые часы Dayvil Паскаль, Turbo Pascal, PascalABC.NET 5 06.11.2009 16:15
Часы Bingam Vici Свободное общение 5 18.05.2009 14:50
Часы на Ассемблере Andre1723 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 10.01.2009 17:00