Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Canvas Männschen Problem bitte um Hilfe (https://www.delphipraxis.net/70540-canvas-maennschen-problem-bitte-um-hilfe.html)

Gnaaman 31. Mai 2006 18:11


Canvas Männschen Problem bitte um Hilfe
 
Hallo,
Ich habe ein kleines Problem bei mienem Programm!
Ich soll für die Schule ein Männchen schreiben welches nach links und rechts laufen kann und sich an einer bestimmten stelle hinlegen bzw. auch wieder aufstehen kann!
So laufen kann mein Männchen mittlerweile nur weiss ich nicht wie ich es zum hinlegen/aufstehen bekomme!
Ich bin schon die ganze Zet am überlegen wie ich es zeichnen muss damit damit es 1. einigermaßen natürlich aussieht und 2. auch an einer bestimmten stelle diese Funktionen ausführt!

Ich bin echt über jede Hilfe dankbar den ich bin hier mittlerweile echt am verzweifeln!
Und sollte noch jmd. verbesserung haben bin ich natürlich auch dort für alles offen....

danke schon mal im vorraus!





Delphi-Quellcode:
unit Unit1;

interface

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

type
    TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }

  end;

type
 TMann = class
 xpos,xend,xrich,xchange : integer ;

 constructor create(Mstart , Mende, Richtung :integer ) ;
 procedure norm ;
 procedure laufen ;

end;

var
  Form1: TForm1;
  Mann : TMann ;
  i : integer ;  
           
implementation

{$R *.dfm}

procedure TMann.Norm ;
 begin
  Form1.Canvas.Ellipse(xpos-10,510,xpos+10,530);
  Form1.Canvas.moveto(xpos,530);
  Form1.canvas.LineTo(xpos,560);
 end ;

constructor TMann.create (Mstart , Mende , Richtung :integer ) ;
 begin
  xpos := Mstart ; xend := Mende ; xrich := Richtung ;
 end;

procedure TMann.laufen ;
 begin
  randomize ;
  if xpos > xend then xchange := xpos - xend ;
  if xpos < xend then xchange := xend - xpos ;
  for i := 0 to xchange do
   begin
    //Normale Position!
    xpos := xpos + 9*xrich ;
    sleep(100) ;
    Form1.Refresh ;
    Norm ;
    Form1.Canvas.MoveTo(xpos,560);
    Form1.canvas.LineTo(xpos+12*xrich+Random(4)*xrich,600);
    Form1.Canvas.MoveTo(xpos,560);
    Form1.canvas.LineTo(xpos-12*xrich+Random(4)*xrich,600);
    Form1.Canvas.moveto(xpos,540);
    Form1.canvas.LineTo(xpos+10*xrich,565);
    Form1.Canvas.moveto(xpos,540);
    Form1.canvas.LineTo(xpos-10*xrich,565);
    //Rechterarm1
    xpos := xpos + 9*xrich ;
    sleep(100)  ;
    Form1.Refresh ;
    Norm ;
    Form1.Canvas.MoveTo(xpos,560);
    Form1.canvas.LineTo(xpos-12*xrich,600);
    Form1.Canvas.moveto(xpos,560) ;
    Form1.Canvas.LineTo(xpos+12*xrich,578);
    Form1.canvas.MoveTo(xpos+12*xrich,578);
    Form1.canvas.LineTo(xpos+Random(3)*xrich,600+Random(3));
    Form1.Canvas.moveto(xpos,540);
    Form1.canvas.LineTo(xpos+6*xrich,552);
    Form1.canvas.MoveTo(xpos+6*xrich,552);
    Form1.canvas.LineTo(xpos+16*xrich,549);
    Form1.Canvas.moveto(xpos,540);
    Form1.canvas.LineTo(xpos-13*xrich,565);
    //Rechterarm2
    xpos := xpos + 9*xrich ;
    sleep(100) ;
    Form1.Refresh ;
    Norm ;
    Form1.Canvas.MoveTo(xpos,560);
    Form1.canvas.LineTo(xpos+12*xrich+Random(3)*xrich,600+Random(3));
    Form1.Canvas.MoveTo(xpos,560);
    Form1.canvas.LineTo(xpos-10*xrich,578);
    Form1.Canvas.MoveTo(xpos-10*xrich,578);
    Form1.canvas.LineTo(xpos-28*xrich+Random(3)*xrich,588+Random(3));
    Form1.Canvas.moveto(xpos,540);
    Form1.canvas.LineTo(xpos+10*xrich,565);
    Form1.Canvas.moveto(xpos,540);
    Form1.canvas.LineTo(xpos-8*xrich,552);
    Form1.canvas.MoveTo(xpos-8*xrich,552);
    Form1.canvas.LineTo(xpos-12*xrich,555);
   end;
  end;

procedure TForm1.Button1Click(Sender: TObject);
 begin
  Mann := TMann.create(800,800-29,-1);
  Mann.laufen ;
 end;

procedure TForm1.FormCreate(Sender: TObject);
 begin
  Mann := TMann.create(0,0,0);
 end;

procedure TForm1.Button2Click(Sender: TObject);
 begin
  Mann := TMann.create(0,29,1);
  Mann.laufen ;
 end;
end.

shmia 31. Mai 2006 18:29

Re: Canvas Männschen Problem bitte um Hilfe
 
Man kann es natürlich auch ganz anderst machen.
Nimm einen Bildeditor und zeichne dein Männchen in allen Stellungen.
Alle BMP-Dateien müssen die gleiche Äuflösung (z.B. 64*64) haben.
Alle Bildchen werden in eine Imageliste eingefügt. (vorher richtige Auflösung der ImageList einstellen)

Soll das Männchen laufen, brauchst du nur das richtige Bildchen aus der Liste
auf den Canvas zeichnen.

Gnaaman 31. Mai 2006 18:53

Re: Canvas Männschen Problem bitte um Hilfe
 
ja ich weiss so wollte ich es anfangs auch machen nur leider darf ich das nicht :-/ ...
sonz wäre es ja aber auch zu einfach!

also irgendwer ne ahnung? wollte es gerne möglichst früh fertig kriegen damit ich mich weiter auf meine klausuren vorbereiten kann... ;)

semo 31. Mai 2006 19:17

Re: Canvas Männschen Problem bitte um Hilfe
 
Zitat:

Ich soll für die Schule ein Männchen schreiben welches nach links und rechts laufen kann und sich an einer bestimmten stelle hinlegen bzw. auch wieder aufstehen kann!
*räusper*
definiere "bestimmte Stelle"
Meinst du damit die linke und rechte Seite des Formulars?
und soll sich dein Männchen auf Tastendruck hinlegen und wieder aufstehen? Oder auch an einer bestimmten Stelle des Formulars (z.Bsp. der Mitte).

Gnaaman 31. Mai 2006 20:09

Re: Canvas Männschen Problem bitte um Hilfe
 
danke für die hilfe..es geht darum das man dem männchen eine bestimmte stelle auf dem formular zuweist wo es aufsteht und sich hinlegt.... z.b.: mit hilfe einer variable welche die genauen pixeldaten definiert!
so könnte das männchen dann überall aufstehen und sich hinlegen!
das mnäänchen soll somit hinterher in ein komplettes prigramm eingebunden werden...deswegen auch die vereinfachung mit der klasse!

semo 31. Mai 2006 20:15

Re: Canvas Männschen Problem bitte um Hilfe
 
also gibts du im constructor deiner klasse einen TPoint an und die dauer die er liegen bleiben soll.
du hast nen timer, meinetwegen auf 500 ms eingestellt. dieser zeichnet alle 500 ms dein formular neu.
im onpaint des formulars wird das männchen jeweils gezeichnet, dabei musst du die laufrichtung (links/rechts berücksichtigen).

Gnaaman 31. Mai 2006 20:19

Re: Canvas Männschen Problem bitte um Hilfe
 
mhmm... was ist den ein TPoint? hab noch nie was davon gehört wiewürde das genau aussehen?

semo 31. Mai 2006 20:21

Re: Canvas Männschen Problem bitte um Hilfe
 
siehe hilfedatei von Delphi :-)

ein TPoint ist eine Koordinate, bestehend aus einem x und einem y-wert :)

semo 31. Mai 2006 20:35

Re: Canvas Männschen Problem bitte um Hilfe
 
fangen wir mal ganz klein an:
Delphi-Quellcode:
const
  iKopfdurchmesser = 10;
  iKoerperHoehe   = 50;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  x := 0;
  y := Form1.Height-2*iKopfdurchmesser-iKoerperHoehe;
end;

procedure TForm1.FormPaint(Sender: TObject);
begin
  Form1.Canvas.Ellipse( x-iKopfdurchmesser,
                        y-2*iKopfdurchmesser-iKoerperHoehe,
                        x+iKopfdurchmesser,
                        y-iKoerperHoehe);
  Form1.Canvas.moveto(x,y);
  Form1.canvas.LineTo(x,y-iKoerperHoehe);
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Inc(x);
  Form1.Repaint;
end;
danach kann man dann mal berücksichtigen ob er nun an die linke seite des formulars anschlägt oder an die rechte und dann muss man die laufrichtung wechseln

Gnaaman 31. Mai 2006 21:51

Re: Canvas Männschen Problem bitte um Hilfe
 
also laufen tut es wie gesagt schon... nur hinlegen und aufstehen nicht weil ich nicht weiss wie ich das zeichnen soll und wie gesagt wo er sich hinlegt..aber das scheint ja mit tpoint zu gehen...

aber naja ich weiss einfach nicht wie das männchen sich hinlegen soll..ich kriege es einfach nicht hin und solangsam verliere ich auch die lust und geduld am programmieren aber es mus halt fertig werden...

es scheint ja nicht schwer zu sein aber naja es will halt nicht klappen :(

Gnaaman 1. Jun 2006 13:59

Re: Canvas Männschen Problem bitte um Hilfe
 
niemand eine ahnung wie man das männchen zumindest zeichnen könnte? den rest hab ich jetz glaub ich shcon ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:57 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz