Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Auto (https://www.delphipraxis.net/52768-auto.html)

Sierra 3. Sep 2005 12:38


Auto
 
Hi!
Ich wollte in Delphi (Konsolenanwendung) mit dem "Plugin" "mSum" ein Auto programmieren, das fährt.
Leider fangen die Probleme schon bei den Rädern an.
Also eins rollt und das andere macht gar nichts.
Der Quelltext sieht so aus.

Delphi-Quellcode:
program pRad3;

{$APPTYPE CONSOLE}

uses
  mSum;

var
  meinBildschirm: Bildschirm;
  meinBuntstift : Buntstift;
  meineMaus    : Maus;
  Koordinaten  : Integer;
  Koordinate   : Integer;

begin
//Initialisierung
  meinBildschirm:= Bildschirm.init;
  meinBuntstift := Buntstift.init;
  meineMaus    := Maus.init;

//Aktionsteil
for Koordinaten:= 300 to 900 do
      begin
with meinBuntstift do
   begin
  bewegeBis(Koordinaten,350);
  zeichneKreis(50);
  bewegeBis(Koordinaten,350);
  runter;
  dreheUm(-1);
  bewegeUm(50);
  hoch;
  bewegeBis(Koordinaten,350);
  dreheUm(-45);
  runter;
  bewegeUm(50);
  hoch;
  bewegeBis(Koordinaten,350);
  dreheUm(-45);
  runter;
  bewegeUm(50);
  hoch;
  bewegeBis(Koordinaten,350);
  dreheUm(-45);
  runter;
  bewegeUm(50);
  hoch;
  bewegeBis(Koordinaten,350);
  dreheUm(-45);
  runter;
  bewegeUm(50);
  hoch;
  bewegeBis(Koordinaten,350);
  dreheUm(-45);
  runter;
  bewegeUm(50);
  hoch;
  bewegeBis(Koordinaten,350);
  dreheUm(-45);
  runter;
  bewegeUm(50);
  hoch;
  bewegeBis(Koordinaten,350);
  dreheUm(-45);
  runter;
  bewegeUm(50);
warte(10);

for Koordinate:= 500 to 900 do
      begin
with meinBuntstift do
   begin
  bewegeBis(Koordinate,350);
  zeichneKreis(50);
  bewegeBis(Koordinate,350);
  runter;
  dreheUm(-1);
  bewegeUm(50);
  hoch;
  bewegeBis(Koordinate,350);
  dreheUm(-45);
  runter;
  bewegeUm(50);
  hoch;
  bewegeBis(Koordinate,350);
  dreheUm(-45);
  runter;
  bewegeUm(50);
  hoch;
  bewegeBis(Koordinate,350);
  dreheUm(-45);
  runter;
  bewegeUm(50);
  hoch;
  bewegeBis(Koordinate,350);
  dreheUm(-45);
  runter;
  bewegeUm(50);
  hoch;
  bewegeBis(Koordinate,350);
  dreheUm(-45);
  runter;
  bewegeUm(50);
  hoch;
  bewegeBis(Koordinate,350);
  dreheUm(-45);
  runter;
  bewegeUm(50);
  hoch;
  bewegeBis(Koordinate,350);
  dreheUm(-45);
  runter;
  bewegeUm(50);
warte(10);
  with meinBildschirm do
     begin
     loescheAlles;
   end;
     end;
       end;
         end;
           end;
//Aufräumen
  meinBildschirm.gibFrei;
  meinBuntstift.gibFrei;
  meineMaus.gibFrei

end.
Wie bekomme ich jetzt hin, dass sich beide Räder drehen?
Danke für die Hilfe

tigerman33 3. Sep 2005 12:44

Re: Auto
 
Erstmal herzlich willkommen in der Delphi-Praxis!

Dein Code ist aber leider wenig aussagekräftig. Ich sehe da nämlich überhaupt kein Rad, geschweige denn zwei.

Sierra 3. Sep 2005 12:48

Re: Auto
 
Achso, ja sorry.
Also der Teil von

Delphi-Quellcode:
"for Koordinaten:= 300 to 900 do
      begin
with meinBuntstift do"
bis

Delphi-Quellcode:
warte(10);
erzeugt das erste Rad (Also einfach einen Kreis mit Speichen drin).
Der Rest des Textes soll eigentlich ein zweites Rad einfügen.
Die Drehung des Rades funktioniert, indem die Speichen einfach versetzt werden (um 10 Grad).
Das Rad bewegt sich, weil der Mittelpunkt durch den Integer versetzt wird.

tigerman33 3. Sep 2005 12:52

Re: Auto
 
Also ob ich deinen Code richtig verstehe bin ich mir immer noch nicht ganz klar, aber ich glaube dass du erst ein Rad komplett rollen lässt, und dich dann erst um das andere kümmerst, denn die beiden FOR schleifen werden ja nacheinander abgeklappert. Das muss also alles in eine For-Schleife.

Sierra 3. Sep 2005 13:02

Re: Auto
 
Und wie soll das gehen?
Mein Programm macht das so, dass es jeden Strich einzeln zeichnet.
Und wenn ich das in eine FOR Schleife reinmache, kann er ja nicht unterscheiden, was er bei welchem Rad machen soll, oder?
Das Problem besteht ja darin.

Delphi-Quellcode:
for Koordinaten:= 300 to 900 do
Denn dann würde er die Räder gleich verschieben.
Da aber bei einem Auto vorne und Hinten Räder sin, kann es so nicht funktionieren.
Ich muss ja zwei Mittelpunkte festlegen.

tigerman33 3. Sep 2005 14:34

Re: Auto
 
Ich an deiner Stelle würde eine Prozedur schreiben, der du als Parameter den Mittelpunkt übergibst und die dann mit diesem Mittelpunkt ein Rad malt. Das dürft ja nicht so viel Arbeit sein, Copy&Paste halt. Danach würde folgender Code nämlich reichen:

Delphi-Quellcode:
for i := 300 to 900 do begin //oder was für Zahlen halt auch immer
  MaleRad(i);
  MaleRad(i - 200); // Der Abstand zwischen deinen Rädern
  Warte(10);
end;

Sierra 3. Sep 2005 15:20

Re: Auto
 
Und was soll das mit dem MaleRad (ist ein unbekannter Befehl)?
Und wo muss ich das einbauen?

Nils_13 3. Sep 2005 15:56

Re: Auto
 
gibFrei kenne ich auch nicht. Meinst du vlt. Free ?

Sierra 3. Sep 2005 16:17

Re: Auto
 
Ja, normalerweise heisst es free.
Aber da es alles von mSum (Stifte und Mäuse Plugin) stammt, ist es auf Deutsch.

tigerman33 4. Sep 2005 09:53

Re: Auto
 
Natürlich ist MaleRad ein unbekannter Befehl. Das ist ja auch eine Prozedur, die du selber schreiben sollst, um an der übergebenen Stelle ein Rad zu malen. Wie gesagt, den Code dazu hast du ja eigentlich schon komplett geschrieben, jetzt musst du ihn nur noch in eine Prozedur auslagern. Also kopieren&einfügen.

Sierra 4. Sep 2005 11:47

Re: Auto
 
Und wie geht das mit dem in einer Prozedur auslagern?

tigerman33 4. Sep 2005 21:15

Re: Auto
 
Delphi-Quellcode:
procedure XYZ(Parameter: Parametertyp);
begin
...
end;
Weitaus besser kann dir da aber mit Sicherheit die OH weiterhelfen. Lies dir durch was die dazu zu sagen hat. Wenn du dann immer noch Fragen dazu hast, werde ich dir gerne weiterhelfen. :???:

Sierra 5. Sep 2005 11:40

Re: Auto
 
Vielen Dank schonmal, aber ich weiss jetzt leider nicht, was mit

Delphi-Quellcode:
(Parameter: Parametertyp);
gemeint ist.

tigerman33 5. Sep 2005 11:49

Re: Auto
 
Beispiel:

Delphi-Quellcode:
procedure MachWas(Parameter1: integer; Parameter2: string);
begin
  if Parameter1 > 0 then
    if Parameter2 = '' then
      ShowMessage('Eigentlich recht sinnloser Code.');
end;
Jetzt kannst du die Prozedur z.B. so aufrufen:
Delphi-Quellcode:
MachWas(Form1.Left,Form1.Caption);
Das ist genau das gleiche als ob du geschrieben hättest:
Delphi-Quellcode:
if Form1.Left > 0 then
  if Form1.Caption = '' then
    ShowMessage('Eigentlich recht sinnlose Code.');
Nur besser.

Aber wie gesagt, schau mal in die Delphi Online-Hilfe. :wink:

Sierra 5. Sep 2005 12:25

Re: Auto
 
Das Problem ist aber, dass das Programm keine Formularanwendung ist, sondern eine Konsolenanwendung.

tigerman33 5. Sep 2005 14:08

Re: Auto
 
Ja und? Deshalb kannst du doch trotzdem Prozeduren und Funktionen schreiben! Wo ist also das Problem? :gruebel:

Sierra 5. Sep 2005 17:33

Re: Auto
 
Irgendwie bekomme ich das alles nicht hin.
Der meint unter anderem, dass eine Deklaration erwartet wird.
Ich verzweifle hier noch.

Speedmaster 5. Sep 2005 17:57

Re: Auto
 
Mein Lieblingslink: >>Hier<<

tigerman33 5. Sep 2005 19:06

Re: Auto
 
Poste noch mal deinen Code. Den bei dem der Compiler das mit der Deklaration sagt.

Sierra 6. Sep 2005 14:41

Re: Auto
 
Endlich habe ich es geschafft.

Delphi-Quellcode:
program pRad4;

{$APPTYPE CONSOLE} 

uses
  mSum;

var
  meinBildschirm: Bildschirm;
  meinBuntstift : Buntstift;
  meineMaus    : Maus;
  Koordinaten, i  : Integer;

begin
//Initialisierung
  meinBildschirm:= Bildschirm.init;
  meinBuntstift := Buntstift.init;
  meineMaus    := Maus.init;

//Aktionsteil
begin
for Koordinaten:= 200 to 900 do
      begin
with meinBuntstift do
   begin
  bewegeBis(Koordinaten,400);
  zeichneKreis(50);
  bewegeBis(Koordinaten,400);
  runter;
  dreheUm(-1);
  bewegeUm(50);
  hoch;
  bewegeBis(Koordinaten,400);
  dreheUm(-45);
  runter;
  bewegeUm(50);
  hoch;
  bewegeBis(Koordinaten,400);
  dreheUm(-45);
  runter;
  bewegeUm(50);
  hoch;
  bewegeBis(Koordinaten,400);
  dreheUm(-45);
  runter;
  bewegeUm(50);
  hoch;
  bewegeBis(Koordinaten,400);
  dreheUm(-45);
  runter;
  bewegeUm(50);
  hoch;
  bewegeBis(Koordinaten,400);
  dreheUm(-45);
  runter;
  bewegeUm(50);
  hoch;
  bewegeBis(Koordinaten,400);
  dreheUm(-45);
  runter;
  bewegeUm(50);
  hoch;
  bewegeBis(Koordinaten,400);
  dreheUm(-45);
  runter;
  bewegeUm(50);
  hoch;

  bewegeBis(Koordinaten+200,400);
  zeichneKreis(50);
  bewegeBis(Koordinaten+200,400);
  runter;
  dreheUm(-1);
  bewegeUm(50);
  hoch;
  bewegeBis(Koordinaten+200,400);
  dreheUm(-45);
  runter;
  bewegeUm(50);
  hoch;
  bewegeBis(Koordinaten+200,400);
  dreheUm(-45);
  runter;
  bewegeUm(50);
  hoch;
  bewegeBis(Koordinaten+200,400);
  dreheUm(-45);
  runter;
  bewegeUm(50);
  hoch;
  bewegeBis(Koordinaten+200,400);
  dreheUm(-45);
  runter;
  bewegeUm(50);
  hoch;
  bewegeBis(Koordinaten+200,400);
  dreheUm(-45);
  runter;
  bewegeUm(50);
  hoch;
  bewegeBis(Koordinaten+200,400);
  dreheUm(-45);
  runter;
  bewegeUm(50);
  hoch;
  bewegeBis(Koordinaten+200,400);
  dreheUm(-45);
  runter;
  bewegeUm(50);
  hoch;
warte(10);

repeat
until meineMaus.istGedrueckt;

with meinBildschirm do
     begin
     loescheAlles;
   end;
     end;
       end;
         end;
//Aufräumen
  meinBildschirm.gibFrei;
  meinBuntstift.gibFrei;
  meineMaus.gibFrei

end.
Ihr könnt es euch auch direkt downloaden.

Rechtsklick - Speichern unter.

Zum Bewegen der Räder, einfach die Linke Maustaste gedrückt halten.

Wie kann ich denn auch noch ein "Auto" auf die Räder setzen?
Muss das in der gleichen Schleife oder in einer neuen Schleife geschehen?

tigerman33 6. Sep 2005 16:40

Re: Auto
 
Hi,

hat ja wohl doch noch geklappt. :)

Auto muss in die gleiche Schleife.

Maxxer 10. Sep 2005 16:49

Re: Auto
 
Zitat:

Zitat von tigerman33
Hi,

hat ja wohl doch noch geklappt. :)

Auto muss in die gleiche Schleife.

Tag,

ich war so frei und habe mal das Auto dazu gezeichnet !
Jedoch dreht sich das Auto mit und es sieht irgendwie lustig aus.

Jetzt frage ich mich was ich machen muss damit das Auto nur sich dorthin bewegt
und nicht sich dorthin beweg und gleichzeigt dreht.

Delphi-Quellcode:
program Auto;


uses
  mSum;

var
  meinBildschirm: Bildschirm;
  meinBuntstift : Buntstift;
  meineMaus    : Maus;
  Koordinaten  : Integer;

begin
//Initialisierung
  meinBildschirm:= Bildschirm.init;
  meinBuntstift := Buntstift.init;
  meineMaus    := Maus.init;

//Aktionsteil
begin
for Koordinaten:= 300 to 900 do
      begin
with meinBuntstift do
   begin
    // Auto
  hoch;
  bewegeBis(Koordinaten-200,550);
  runter;
  bewegeUm(600);
  dreheUm(90);
  bewegeUm(75);
  dreheUm(90);
  bewegeUm(150);
  dreheUm(-90);
  bewegeUm(80);
  dreheUm(90);
  bewegeUm(325);
  dreheUm(90);
  bewegeUm(80);
  dreheUm(-90);
  bewegeUm(125);
  dreheUm(90);
  bewegeUm(75);

  // Räder
  hoch;
  bewegeBis(Koordinaten,600);
  zeichneKreis(50);
  bewegeBis(Koordinaten,600);
  runter;
  dreheUm(-1);
  bewegeUm(50);
  hoch;
  bewegeBis(Koordinaten,600);
  dreheUm(-45);
  runter;
  bewegeUm(50);
  hoch;
  bewegeBis(Koordinaten,600);
  dreheUm(-45);
  runter;
  bewegeUm(50);
  hoch;
  bewegeBis(Koordinaten,600);
  dreheUm(-45);
  runter;
  bewegeUm(50);
  hoch;
  bewegeBis(Koordinaten,600);
  dreheUm(-45);
  runter;
  bewegeUm(50);
  hoch;
  bewegeBis(Koordinaten,600);
  dreheUm(-45);
  runter;
  bewegeUm(50);
  hoch;
  bewegeBis(Koordinaten,600);
  dreheUm(-45);
  runter;
  bewegeUm(50);
  hoch;
  bewegeBis(Koordinaten,600);
  dreheUm(-45);
  runter;
  bewegeUm(50);
  hoch;

  bewegeBis(Koordinaten+200,600);
  zeichneKreis(50);
  bewegeBis(Koordinaten+200,600);
  runter;
  dreheUm(-1);
  bewegeUm(50);
  hoch;
  bewegeBis(Koordinaten+200,600);
  dreheUm(-45);
  runter;
  bewegeUm(50);
  hoch;
  bewegeBis(Koordinaten+200,600);
  dreheUm(-45);
  runter;
  bewegeUm(50);
  hoch;
  bewegeBis(Koordinaten+200,600);
  dreheUm(-45);
  runter;
  bewegeUm(50);
  hoch;
  bewegeBis(Koordinaten+200,600);
  dreheUm(-45);
  runter;
  bewegeUm(50);
  hoch;
  bewegeBis(Koordinaten+200,600);
  dreheUm(-45);
  runter;
  bewegeUm(50);
  hoch;
  bewegeBis(Koordinaten+200,600);
  dreheUm(-45);
  runter;
  bewegeUm(50);
  hoch;
  bewegeBis(Koordinaten+200,600);
  dreheUm(-45);
  runter;
  bewegeUm(50);
  hoch;
warte(10);


repeat
until meineMaus.istGedrueckt;

with meinBildschirm do
     begin
     loescheAlles;
   end;
     end;
       end;
         end;
//Aufräumen
  meinBildschirm.gibFrei;
  meinBuntstift.gibFrei;
  meineMaus.gibFrei

end.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:37 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-2025 by Thomas Breitkreuz