![]() |
Strichmenchen soll laufen
Liste der Anhänge anzeigen (Anzahl: 1)
Nabend,
ich habe ![]() Heute habe ich versucht ein Strichmenchen zu programmieren das läuft, jedoch habe ich schon Probleme mit dem Strich (vom Kopf nach unten). Immer wen sich das dingen bewegen soll dreht sich der Strich mit ! Ich habe es dann mit dem Befehl "break" versucht doch dann wollte nicht mal der Kopf seine Position ändern ! Ich habe dann dem Mittelstrich eine eigene Schleife verpasst, doch irgendwie wollte das nicht so richtig ! Kann mir einer den code für den Mittelstrich geben den ich bin echt am verzwefeln ! Was mache ich falsch ? Ich hänge vorsichthalber mSum an. Mein Code:
Delphi-Quellcode:
program Menchen;
uses mSum, Windows; var derBildschirm : Bildschirm; meinStift : Stift; meineMaus : Maus; Koordinaten : Integer; begin derBildschirm := Bildschirm.init; meinStift := Stift.init; meineMaus := Maus.init; for Koordinaten:= 200 to 300 do begin with meinstift do begin hoch; bewegeBis(Koordinaten,400); runter; zeichneKreis(25); hoch; bewegeBis(Koordinaten,425); dreheUm(-90); runter; bewegeUm(75); warte(10); repeat until meineMaus.istGedrueckt; with derBildschirm do begin loescheAlles; end; end; end; meinStift.gibFrei; derBildschirm.gibFrei; meineMaus.gibFrei; end. |
Re: Strichmenchen soll laufen
Zitat:
...:cat:... |
Re: Strichmenchen soll laufen
Zitat:
Er wollte ein Auto fahren lassen und bei mir hats nicht funktioniert ! Man ich habe mich schon so gefreut als ich gesehen habe das einer auf meinen Thread geantwortet hat.. :( Falls mir hier niemand hilft muss ich mich wohl auf meinen blöden Lehrer verlassen :cry: |
Re: Strichmenchen soll laufen
Warum willst du dir das leben so umständlich machen?
Ich verstehs immer noch nicht, so schwer ist eine Grafikapi doch auch nicht! Edit: Zudem ich mal zu deinem bisherigen Programmcode nicht soviel sagen möchte! |
Re: Strichmenchen soll laufen
Zitat:
Unseren konnte ich davon überzeugen das ganze ohne Mausmalen zu machen. --- @Maxxer: Korrigiere mich, wenn ich falsch liege, aber irgendwie sieht mir das ganze doch zimlich nach ner Hausaufgebe aus. |
Re: Strichmenchen soll laufen
Liste der Anhänge anzeigen (Anzahl: 1)
Hi Maxxer,
das mit dem drehen ist so eine Sache, die Unit mSum ist daran schult das es nicht klappt. Wenn du in einer For- Schleife einen Winkel mit zB. dreheUm(15) angibst:
Delphi-Quellcode:
so ist dann das Ergebnis:
for Wert := 1 to 3 do
begin dreheUm(15); end;
Code:
leider fehlt in der Unit mSum eine Funktion um den Drehwinkel wieder zurückzusetzen. zB. so:
Winkel = 15
Winkel = 15+15 Winkel = 15+15+15
Delphi-Quellcode:
das Ergebnis wäre dann so:
for Wert := 1 to 3 do
begin dreheUm(15); DrehWinkelZuruecksetzen; // Winkel auf 0° zurücksetzen dreheUm(15); dreheUm(15); end;
Code:
Ich habe Dir das mal anhand deines Auto Beispieles verdeutlicht. Nun rotiert die Carrosserie nicht mehr.
Winkel = 15
Winkel = 0 Winkel = 15 Winkel = 15+15 ... Wenn Du ernsthaft (oder als Hobby) programmieren willst solltest du dir die Grundlagen zu Delphi ansehen ![]() PS.: bezeichne bitte nicht deinen lehrer als dumm denn der hat seinen lehrstoff und nicht immer den absoluten durchblick es sei denn er heisst ulrich borghoff denn der hat die unit msum geschrieben :wink: MfG. |
Re: Strichmenchen soll laufen
Moin moin,
Zitat:
da mit
Delphi-Quellcode:
der Winkel zurückgesetzt wird...
//..
dreheUm(15); // zurücksetzen dreheUm(-15); //.. |
Re: Strichmenchen soll laufen
Zitat:
Hausaufgaben ? Ne, ich bin erst in der 11 und programmiere erst mit Delphi erst seit ein paar wochen ! Mir war halt langweilig und ich wollte auch schon etwas mehr können als die anderen bei mir im Kurs ! Zitat:
dann heist es so viel für mich wie "ich kann alles !". Beispiel: wir sollten ein Briefumschlag Programmieren, dann ein Haus. 2 Stunden später hat er uns erst dann die Befehle dafür erklärt, was sagst du nun ? Muss er nicht zuerst die Befehle erklären und dann sollten wir Programmieren, so ist es doch viel logischer, oder nicht ?! PS: danke für das Auto ! |
Re: Strichmenchen soll laufen
Zitat:
Zitat:
|
Re: Strichmenchen soll laufen
Zitat:
Ein setzen der Koordinaten des Stiften ist ja auch vorhanden mit bewegeBis(PosX, PosY), nur das zurücksetzen des Winkels fehlt und es gibt keine Möglichkeit diesen auf Null zu setzen. Da es sich um eine "MiniProgrammierSprache" handelt sollte so ein Befehl nicht fehlen. @Maxxer ich hoffe du has verstanden warum im Autobeispiel zwei Stifte verwendet werden, leider habe ich vergessen die Procedure AutoBody zu entfernen. (hatte dei falsche Datei in das Zip-File gepackt) Die Procedure macht nichts anderes als das Codestückchen aus dem Haupttei "auszulagern" so sollte es "normal" aussehen:
Code:
Bei deinem Strichmänchen handelt es sich um ein ähnliches Problem, du musst auch hier zwei Stifte verwenden. einen für den Körper und einen (oder auch zwei) für die Beine damit sich der Körper bei den Beinanimationen nicht mitdreht.
[b]begin[/b]
[color=#0000A0]//Initialisierung[/color] meinBildschirm := Bildschirm.init; meinBuntstift := Buntstift.init; meinBuntstift2 := Buntstift.init; meineMaus := Maus.init; [color=#0000A0]//AutoBody[/color] [b]for [/b]Koordinaten := 250 [b]to[/b] 600 [b]do[/b] [b]begin[/b] [b]with [/b]meinBuntstift2 [b]do[/b] [b]begin[/b] [color=#0000A0]// Auto[/color] DrehWinkelZuruecksetzen; [color=#0000A0]// * neu * //[/color] hoch; bewegeBis(Koordinaten - 200, 550); runter; bewegeUm(600); dreheUm(90); [color=red][b]...[/b][/color] bewegeUm(125); dreheUm(90); bewegeUm(75); [b]end[/b]; [color=#0000A0]//Aktionsteil[/color] [b]with [/b]meinBuntstift [b]do[/b] [b]begin[/b] [color=#0000A0]// Räder[/color] [color=red][b]...[/b][/color] |
Re: Strichmenchen soll laufen
Zitat:
Zitat:
@turboPASCAL Danke das du mir mir erklärt hast wozu man mehrere Stifte braucht, den ich wöre einfach nicht draufgekommen ! Dein Auto ist cool ^^ ! Habe jetzt 2 Freistunden, vielleicht werd ich mir mal jetzt das ganze anschauen ! EDIT: Eine frage hätte ich noch, worin besteht der Uterschied zwischen "Stift" und "Buntstift" ? Kann der eine mehr als der andere ? Und wie kann ich einen Text schreiben ? Den ich schaffe es einfach nicht ! :( |
Re: Strichmenchen soll laufen
Zitat:
|
Re: Strichmenchen soll laufen
Hm...
Ich wollte gerade das Menchen machen, mit dem Befehl "DrehWinkelZuruecksetzen;" aber Delphi sagt Error !(Undeclared indentifier: 'DrehWinkelZuruecksetzen') Ich verstehe das nicht :( Aber der Befehl ist ja in dem Auto mit drin und da sagt Delphi nüx ! :gruebel:
Delphi-Quellcode:
for Koordinaten:= 200 to 300 do
begin // Mittelstrich with meinBuntstift2 do begin DrehWinkelZuruecksetzen; hoch; bewegeBis(Koordinaten,425); runter; dreheUm(-90); bewegeUm(75); with meinstift do begin // Kopf hoch; bewegeBis(Koordinaten,400); runter; zeichneKreis(25); warte(10); |
Re: Strichmenchen soll laufen
Das ist ja auch kein Befehl -.-
Man wollte dir nur zeigen wo der Fehler liegt und das es so eine procedure geben müsste damit es funktioniert ;) |
Re: Strichmenchen soll laufen
Zitat:
Gleich erstma wieder in die Schule (1std English) und dann werd ich mich mal damit etwas intensiver befassen. Ich hoffe das ich es dann hinbekomme :mrgreen: |
Re: Strichmenchen soll laufen
Moin moin,
Zitat:
Delphi-Quellcode:
setze ich den Winkel wieder auf 0 zurück, egal welchen Wert Winkel hat...
dreheUm(-winkel);
z.B.
Delphi-Quellcode:
macht genau das selbe wie dein DrehWinkelZuruecksetzen;
// ..
with meinBuntstift2 do begin // Auto //DrehWinkelZuruecksetzen; // * neu * // dreheUm(-Winkel); hoch; bewegeBis(Koordinaten - 200, 550); runter; // .. |
Re: Strichmenchen soll laufen
Zitat:
Delphi-Quellcode:
:gruebel: ...mach das doch bitte mal an hand dieses Beispieles: :wink:
procedure Stift.dreheUm(pWinkel: Zahl);
begin derTastaturpuffer.check; zWinkel:=zWinkel+pWinkel; repeat if zWinkel>=360 then zWinkel:=zWinkel-360; until zWinkel<360; end; [edit=turboPASCAL]Beispiel entfernt[/edit] |
Re: Strichmenchen soll laufen
Zitat:
Delphi-Quellcode:
Winkel ist eine funktion (aus der Klasse Stift, haste vll. übersehen?), die mir den aktuellen Wert von zWinkel zurückliefert.
program Test_;
// .. //Initialisierung myBildschirm := Bildschirm.init; myStift := Stift.init; for x := 250 to 600 do begin with myStift do begin // // Neu ;-) dreheUm(-Winkel); // .. Wenn ich den Wert negiere, bekomme ich immer den aktuellen Wert von zWinkel mit entgegengesetztem Vorzeichen. z.B.: angenommen: zWinkel := -90 dann gibt mir die funktion -Winkel = --90 zurück (oder auch gleich 90) und -90 + 90 = 0 Kann es leider nicht besser erklären, aber probier es aus... |
Re: Strichmenchen soll laufen
Zitat:
Zitat:
Zitat:
Delphi-Quellcode:
dreheUm(-Winkel); // = DrehWinkelZuruecksetzen
|
Re: Strichmenchen soll laufen
Also, wen ich es richtig verstande habe,
muss ich immer den Winkel rurücksetzen [z.B.dreheUm(-90);] !? Aber wen ich vorhabe etwas größeres mit vielen Linien zu zeichnen, wie sieht es da aus ? Muss ich da auch immer dann den Winkel zurücksetzen ? Beim Strichmenchen wars ja nicht so viel
Delphi-Quellcode:
program Menchen;
uses mSum, Windows; var derBildschirm : Bildschirm; meinStift : Stift; meinBuntstift8 : Buntstift; meinBuntstift7 : Buntstift; meinBuntstift6 : Buntstift; meinBuntstift5 : Buntstift; meinBuntstift4 : Buntstift; meinBuntstift3 : Buntstift; meinBuntstift2 : Buntstift; meinBuntstift : Buntstift; meineMaus : Maus; Koordinaten : Integer; procedure Mittelstrich(Koordinaten: Integer); begin with meinBuntstift do begin hoch; bewegeBis(Koordinaten,425); dreheUm(-90); runter; bewegeUm(75); dreheUm(90); end; end; procedure Beinlinks(Koordinaten: Integer); begin with meinBuntstift2 do begin hoch; bewegeBis(Koordinaten,500); dreheUm(-45); runter; bewegeUm(50); dreheUm(45); end; end; procedure Beinrechts(Koordinaten: Integer); begin with meinBuntstift3 do begin hoch; bewegeBis(Koordinaten,500); dreheUm(-135); runter; bewegeUm(50); dreheUm(135); end; end; procedure Armlinks(Koordinaten: Integer); begin with meinBuntstift4 do begin hoch; bewegeBis(Koordinaten,450); dreheUm(-135); runter; bewegeUm(40); dreheUm(135); end; end; procedure Armrechts(Koordinaten: Integer); begin with meinBuntstift5 do begin hoch; bewegeBis(Koordinaten,450); dreheUm(-45); runter; bewegeUm(40); dreheUm(45); end; end; procedure Augelinks(Koordinaten: Integer); begin with meinBuntstift6 do begin hoch; bewegeBis(Koordinaten-12.5,400); runter; zeichneKreis(4); end; end; procedure Augerechts(Koordinaten: Integer); begin with meinBuntstift7 do begin hoch; bewegeBis(Koordinaten+12.5,400); runter; zeichneKreis(4); end; end; procedure Mund(Koordinaten: Integer); begin with meinBuntstift8 do begin hoch; bewegeBis(Koordinaten-7,412); runter; bewegeUm(14); end; end; begin derBildschirm := Bildschirm.init; meinStift := Stift.init; meinBuntstift8 := Buntstift.init; meinBuntstift7 := Buntstift.init; meinBuntstift6 := Buntstift.init; meinBuntstift5 := Buntstift.init; meinBuntstift4 := Buntstift.init; meinBuntstift3 := Buntstift.init; meinBuntstift2 := Buntstift.init; meinBuntstift := Buntstift.init; meineMaus := Maus.init; for Koordinaten:= 200 to 400 do begin Mittelstrich(Koordinaten); Beinlinks(Koordinaten); Beinrechts(Koordinaten); Armlinks(Koordinaten); Armrechts(Koordinaten); Augelinks(Koordinaten); Augerechts(Koordinaten); Mund(Koordinaten); with meinstift do begin // Kopf hoch; bewegeBis(Koordinaten,400); runter; zeichneKreis(25); warte(10); repeat until meineMaus.istGedrueckt; with derBildschirm do begin loescheAlles; end; end; end; meinBuntstift5.gibFrei; meinBuntstift4.gibFrei; meinBuntstift3.gibFrei; meinBuntstift.gibFrei; meinBuntstift2.gibFrei; meinStift.gibFrei; derBildschirm.gibFrei; meineMaus.gibFrei; end. |
Re: Strichmenchen soll laufen
Liste der Anhänge anzeigen (Anzahl: 1)
Du brauchst nicht für jedes Körpertei einen neuen Stift, nur für die die du bewegen möchtest.
Jeder Stift bzw. Buntstift speichert seine aktuellen Eindtellungen hat zB. Buntstift1 den wert Gruen kann Buntstift2 den Wert Blau haben, das geiche gilt für den Winkel. Du musst für die Teile die nicht bewegt werden sollen einen eigenen Stift/Buntstift anlegen und nach dem zeichnen den aktuellen Winkel des Stiftes auf null zurücksetzen damit diese sich nicht bewegen. hier wird der Winkel 10x um 10° gedreht | Ergebnis der Winkel ist nach der For-Schleife 100°
Delphi-Quellcode:
hier wird der Winkel 10x auf 0° gesetzt und dann um 10° gedreht | Ergebnis der Winkel ist nach der For-Schleife 10°
for i:= 1 to 10 do
begin meinBuntstift.dreheUm(10); end;
Delphi-Quellcode:
PS.: die Unit mSuM ist leider kein guter Einstieg in das Programmiern, da dort auf OOP zugegriffen wird. Wenn man als Einsteiger darauf zurückgreift bekommt man nicht besonders gut die Grundlagen zum Programmiern vermittelt.
for i:= 1 to 10 do
begin meinBuntstift.dreheUm(-meinBuntstift.Winkel); meinBuntstift.dreheUm(10); end; Wichtig sind erst einmal Projektstrucktur/Blöcke (program, {uses}, Begin..End), Variablen, Schleifen und If-Abfragen und Dann OOP ![]() ![]() ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:08 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