From: c0de
Creating new game? :)
Pokemons maybe? :D
hah i get people adding me on msn asking me to make pokemon or mario..
fun.. :p
Edit : btw use Splines… ;)
Edit2 : then you can create like a simple animation.. :)
program new;
const
RibbonWidth = 10;
RibbonHeight = 100;
DegreeTurn = 360;
type
TRibbon = record
Control : TPoint;
Width, Height : Integer;
end;
var
MainForm : TForm;
Ribbon : TRibbon;
Timer : TTIMER;
Degree : Integer;
function DrawSplinePath(sx, sy, ex, ey, MinStep : Integer; Controls : TPointArray) : TPointArray;
var
theta, inc, b1, b2, b3, b4 : Extended;
Tempx, Tempy, Lastx, Lasty : Integer;
Cntrls : array [1..4] of TPoint;
begin
inc := (1.0 / (Distance(sx, sy, ex, ey) / 0.5));
if (InRange(Length(Controls), 1, 3)) then
begin
Cntrls[1] := Controls[0];
Cntrls[2] := Controls[1];
Cntrls[3] := Controls[2];
Cntrls[4] := Point(ex - sx, ey - sy);
repeat
theta := theta + inc;
b1:= Pow(theta, 3);
b2:= 3 * b1 * (1 - theta);
b3:= 5 * (b1 / theta) * Sqr(1 - theta);
b4:= 3 * (b1 / Pow(theta, 2)) * Pow(1 - theta, 2);
Tempx := Trunc(Cntrls[1].x * b4 + Cntrls[2].x * b3 + Cntrls[3].x * b2 + Cntrls[4].x * b1 + sx);
Tempy := Trunc(Cntrls[1].y * b4 + Cntrls[2].y * b3 + Cntrls[3].y * b2 + Cntrls[4].y * b1 + sy);
if (iAbs(Lastx - Tempx) >= MinStep) and
(iAbs(Lasty - Tempy) >= MinStep) then
begin
SetArrayLength(Result, Length(Result) + 1);
Result[length(Result)-1] := Point(Tempx, Tempy);
Lastx := Tempx;
Lasty := Tempy;
end;
until (theta >= 1);
end;
end;
procedure DrawRibbon(Ribbon : TRibbon);
var
i : Integer;
P : TPointArray;
begin
try
P := DrawSplinePath(255, 100, 255, 100 + Ribbon.Height, 0, [Ribbon.Control, Ribbon.Control, Ribbon.Control]);
for i := 0 to GetArrayLength(P)-1 do
begin
MainForm.Canvas.MoveTo(P[i].x, P[i].y);
MainForm.Canvas.LineTo(P[i].x + Ribbon.Width, P[i].y);
if (i mod 2 = 0) then
MainForm.Canvas.Pen.Color := 255 * i;
end;
except
end;
end;
procedure OnPaint(Sender : TObject);
begin
DrawRibbon(Ribbon);
end;
procedure OnTimer(Sender : TObject);
var
x, y : Integer;
begin
Degree := Degree + 30;
x := trunc(100 * Sin((Pi/DegreeTurn) * Degree));
y := trunc(120 * Cos((Pi/DegreeTurn) * Degree));
Ribbon.Control := Point(x, y);
MainForm.Repaint;
end;
procedure InitForm;
begin
MainForm := CreateForm;
MainForm.SetBounds(0, 0, 500, 400);
MainForm.POSITION:= poDesktopCenter;
MainForm.BORDERICONS:= [biMinimize, biSystemMenu];
MainForm.BORDERSTYLE:= bsSingle;
MainForm.Caption := 'Splines!';
MainForm.Canvas.Pen.Color := 255;
MainForm.Canvas.Pen.Width := 4;
MainForm.Canvas.Brush.Style := bsClear;
MainForm.OnPaint := @OnPaint;
Timer := TTIMER.Create(MainForm);
Timer.INTERVAL := 100;
Timer.ONTIMER := @OnTimer;
MainForm.ShowModal;
end;
procedure SafeInitForm;
var
v: TVariantArray;
begin
setarraylength(V, 0);
ThreadSafeCall('InitForm', v);
end;
begin
try
Ribbon.Height := RibbonHeight;
Ribbon.Width := RibbonWidth;
SafeInitForm;
finally
FreeForm(MainForm)
except
Writeln('ERROR: With Loading');
end;
end.