Informatik Material Portal Portfolio Präsentation Grafik Tabellenkalkulation Informatik56 9 10 11 12 13 Messen, Steuern, Regeln Linux Theorie Didaktik Open Source Spiele Wettbewerbe Netzbetreuung intern Literatur Links Energie corewar UNIX/Linux
Pfad: Startseite / Fächer / Informatik
Autor: be
21.09.2005 10:52
438

Raumschiff - Lösung

Der manuell geschriebene Quelltext ist blau hervorgehoben.

unit mRaumschiff;

interface

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

type
  TForm1 = class(TForm)
    Image1: TImage;
    btNeu: TButton;
    Label1: TLabel;
    edFaktor: TEdit;
    procedure FormCreate(Sender: TObject);
    procedure Image1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure btNeuClick(Sender: TObject);
  private
    { Private-Deklarationen }
    punkteX, punkteY: Array[1..300] of Real;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  Randomize;
  Image1.Canvas.Rectangle(0,0,Image1.Width,Image1.Height);
end;

procedure TForm1.btNeuClick(Sender: TObject);
var i: Integer;
begin
  with Image1.Canvas do
  begin
    Brush.Color := clWhite;
    Rectangle(0,0,Image1.Width,Image1.Height);
    Brush.Color := clBlack;
    for i:=1 to 300 do
    begin
      punkteX[i] := Random(Image1.Width);
      punkteY[i] := Random(Image1.Height);
      Ellipse(Round(punkteX[i])-2,Round(punkteY[i])-2,
              Round(punkteX[i])+2,Round(punkteY[i])+2)
    end;
  end;
end;

procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var i: Integer;
    faktor: Real;
begin
  faktor := StrToFloat(edFaktor.Text);
  with Image1.Canvas do
  begin
    Brush.Color := clWhite;
    Rectangle(0,0,Image1.Width,Image1.Height);
    Brush.Color := clBlack;
    for i:=1 to 300 do
    begin
      punkteX[i] := punkteX[i] + (punkteX[i]-X)*faktor;
      punkteY[i] := punkteY[i] + (punkteY[i]-Y)*faktor;
      if (punkteX[i]<0) or (punkteX[i]>Image1.Width)
         or (punkteY[i]<0) or (punkteY[i]>Image1.Width) then
      begin
        punkteX[i] := Random(Image1.Width);
        punkteY[i] := Random(Image1.Height);
      end;
      Ellipse(Round(punkteX[i])-2,Round(punkteY[i])-2,
              Round(punkteX[i])+2,Round(punkteY[i])+2)
    end;
  end;
end;

end.