![]() |
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. |
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. |
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... ;) |
Re: Canvas Männschen Problem bitte um Hilfe
Zitat:
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). |
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! |
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). |
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?
|
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 :) |
Re: Canvas Männschen Problem bitte um Hilfe
fangen wir mal ganz klein an:
Delphi-Quellcode:
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
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; |
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 :( |
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