| Autor |
Beitrag |
steve110
Hält's aus hier
Beiträge: 14
|
Verfasst: Do 31.01.08 08:05
Hallo Computerfreaks...
ich bin total neu hierund hoffe dass ich hier in der richtigen Rubrik gelandet bin...wir sollen für nächste Woche eine Stadt in Delphi programmieren. (Siehe Anhang)
Wenn man auf den Button zeichnen klickt soll diese Stadt erscheinen...
Die Straßen habe ich auch schon hinbekommen, aber ich habe Probleme mit dem Prozedur Befehl für die Häuser.
Die Häuser die entlang der Nebenstrasse gezeichnet werden sollen, sollen mit EINEM Befehl dargestellt werden, sodass man nicht jedes Haus einzeln zeichnet...
Der Befehl soll sowohl die Wiederholung des Zeichnens der Häuser ausführen, aber er soll auch die Häuser nach hinten hin immer kleiner werden lassen...
Kann mir evtll jemand dieses Programm (die Prozedur) schreiben?
Ich wäre euch sehr dankbar!!
Ich hoffe mir kann jemand helfen, danke schonmal
Einloggen, um Attachments anzusehen!
Zuletzt bearbeitet von steve110 am Do 31.01.08 19:42, insgesamt 1-mal bearbeitet
|
|
Xong
      
Beiträge: 113
WIN 2000
Borland Developer Studio 2006
|
Verfasst: Do 31.01.08 08:23
Du musst einen Algorithmus entwerfen, der das bewerkstelligt!
Ein Ansatz könnte folgendermaßen aussehen:
1. Initialisiere mit den Startwerten. (Höhe und Position der forderen Häuser und der Nebenstraße, Hilfsvariablen, etc.)
2. Zeichne Nebenstraße!
3. Wenn (while-Schleife) ein Haus mit seiner Höhe hinpasst (also Top.AltesHaus > (Height.NeuesHaus + Abstand zum AltenHaus))
4. Zeichne Haus!
5. Berechne neue Höhe und Position!
6. Springe zu (3.)!
7. Sonst: Nebenstraße fertig!
Du könntest der Prozedur die Position, Breite und Richtung (ggf. noch die Länge) der Nebenstraße übergeben.
Ich hoffe, ich konnte helfen.
LG,
Xong
EDIT: Algorithmus verbessert...
|
|
Popov
      
Beiträge: 1655
Erhaltene Danke: 13
WinXP Prof.
Bei Kleinigkeiten D3Pro, bei größeren Sachen D6Pro oder D7
|
Verfasst: Do 31.01.08 09:22
Titel: Re: Hilfe bei der Programmierung einer Stadt
steve110 hat folgendes geschrieben: | aber ich habe Probleme mit dem Prozedur Befehl für die Häuser. |
Es gibt sowas wie Befehle nicht. Trenne dich von diesem Wort.
| Zitat: | | Die Häuser die entlang der Nebenstrasse gezeichnet werden sollen, sollen mit EINEM Befehl dargestellt werden, sodass man nicht jedes Haus einzeln zeichnet... |
Nochmal, es gibt keine Befehle.
Hier die Prozedur für ein Haus. Can ist die Canvas auf der du zeichnes, x, y sind die unteren linken Kordinate, l die Breite des Hauses.
Das Einzige was du noch machen musst ist die Häuser zu platzieren. Du mußt x und y berechnen und die Größe der Häuser. Das hat jetzt nichts mehr mit programmieren zu tun, sondern mit Mathematik.
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36:
| procedure HausZeichnen(Can: TCanvas; x, y, l: Word); var a: Word; begin a := l div 5; with Can do begin Brush.Style := bsClear; Rectangle(x, y - l, x + l, y); MoveTo(x, y - l); LineTo(x + (l div 2), y - l - (l div 2)); LineTo(x + l, y - l);
Rectangle(x + a, y, x + (2 * a), y - (2 * a)); Rectangle(x + a, y - (3 * a), x + (2 * a), y - (4 * a)); Rectangle(x + (3 * a), y - (3 * a), x + (4 * a), y - (4 * a)); Rectangle(x + (3 * a), y - a, x + (4 * a), y - (2 * a)); end; end;
procedure TForm1.Button1Click(Sender: TObject); begin HausZeichnen(Canvas, 200, 500, 100); HausZeichnen(Canvas, 350, 500, 100); HausZeichnen(Canvas, 500, 500, 100);
HausZeichnen(Canvas, 260, 340, 80); HausZeichnen(Canvas, 315, 210, 60); end; |
_________________ Popov
|
|
steve110 
Hält's aus hier
Beiträge: 14
|
Verfasst: Do 31.01.08 13:26
Hallo zusammen,
danke erstmal für die schnellen Antworten!!
@popov: ich hab deinen Code jetzt mal kopiert und l=50 gesetzt und die Koordinaten eingegeben.
Allerdings habe ich hierzu noch eine Frage: Die Bildfläche, auf der alles gezeichnet wird heißt bei mir ImStadt, das ganze Fenster Form1 - muss ich jetzt in dieser Zeile das TCanvas nicht noch gegen ein TForm1 austauschen?? UWelche Bedeutung hat "Word"??
procedure HausZeichnen(Can: TCanvas; x, y, l: Word);
MfG
edit: im Anhang ist noch eine Fehlermeldung kann mir damit evttl jemand weiterhelfen? - oder hab diese Zeile an der falschen Stelle eingesetzt??
edit// Jetzt häufen sich die Fehlermeldungen...Nicht genügend wirkliche Parameter...Anweisung erwartet, aber Var gefunden...
ich glaube ich verzweifel...
Kann mir jemand vielleicht mal eine ganze Stadt mit diesen Bauwiederholungen und den kleiner werdenden Haüsern mit Koordinaten basteln, es muss auch nicht eilig sein...  Das wäre suuuuuper nett!!!!
ich blick jetzt nirgendwo mehr durch 
Einloggen, um Attachments anzusehen!
|
|
elundril
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: Do 31.01.08 13:52
Word ist ein Ganzzahlentyp ähnlich den integer. klick mal auf das Wort und drück F1 für nähere Infos.
Wenn dus auf deiner Zeichenfläche haben willst musst du im aufruf noch ein ImStadt anhängen.
Zu deiner Fehlermeldung: Du musst oben in den unter dem private noch das hineinschreiben:
procedure HausZeichnen(Can: TCanvas; x, y, l: Word);
im quellcode statt
procedure HausZeichnen(Can: TCanvas; x, y, l: Word);
musst du
procedure TForm1.HausZeichnen(Can: TCanvas; x, y, l: Word);
schreiben.
Weiters möcht ich dir den Crashkurs von Christian S. nahelegen. ->Klick mich<-
lg elundril
//edit:  und Hallo in der EE
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
|
|
Popov
      
Beiträge: 1655
Erhaltene Danke: 13
WinXP Prof.
Bei Kleinigkeiten D3Pro, bei größeren Sachen D6Pro oder D7
|
Verfasst: Do 31.01.08 14:04
Ich stelle mal die dumme Frage ob du über das Mass eines absoluten Anfängers programmieren kannst.
Ich stelle die Frage wegen dem Fehler. Irgendwie hast du die Procedure vor ein BEGIN gestellt. Klar, daß dann eine Fehlermeldung kommt. Entferne das Begin. Eventuell findet sich dann ein End zuviel.
Dann noch eine Bitte. BMP ist kein Internet-Bildformat. Benutze bitte JPG, GIF oder PNG, aber kein BMP.
Word ist ein Integertyp ohne negative Werte, Ein -1 ist also nicht möglich, im Gegensatz zu z.B. Longint oder Integer. Hier braucht man aber auch keine negativen Werte, also Word.
Ich weiß nicht was du unter deiner ImStadt Bildfläche meinst. Jedes Formular hat ein Canvas und jede Bitmap hat eine Canvas.
Eigentlich ist alles erledigt. Die Haus-Prozedur ist fertig. Das einzige was du noch machen mußt ist die Prozedur acht mal aufzrufen. Zu Not kannst du probieren. Willst du, daß man alles für dich macht?
_________________ Popov
|
|
Popov
      
Beiträge: 1655
Erhaltene Danke: 13
WinXP Prof.
Bei Kleinigkeiten D3Pro, bei größeren Sachen D6Pro oder D7
|
Verfasst: Do 31.01.08 14:08
elundril hat folgendes geschrieben: | Zu deiner Fehlermeldung: Du musst oben in den unter dem private noch das hineinschreiben:
procedure HausZeichnen(Can: TCanvas; x, y, l: Word);
im quellcode statt
procedure HausZeichnen(Can: TCanvas; x, y, l: Word);
musst du
procedure TForm1.HausZeichnen(Can: TCanvas; x, y, l: Word);
schreiben. |
Stop!
Muß er nicht. Weder unter PRIVATE etwas reinschreiben, noch TForm1. davor schreiben. Deshalb gibt es auch den TCanvas Parameter damit er es nicht muß. Er muß nur den Canvas nennen auf dem erzeichnen will. Ob es das Formular ist oder Image.
_________________ Popov
|
|
steve110 
Hält's aus hier
Beiträge: 14
|
Verfasst: Do 31.01.08 14:38
sooo ich habe es jetzt geschafft, allderdings sieht die Stadt (ohne Straßen, die kommen da gleich noch rein...) so aus: (Anhang)
Was muss ich jetzt machen, dass ich ich die Häuserreihe auch noch auf die anderen Seite weiter nach links bekomme?
Vielleicht kannst du mir dazu auch noch einen Code schreiben?
Danke schonmal
Einloggen, um Attachments anzusehen!
|
|
Xentar
      
Beiträge: 2077
Erhaltene Danke: 2
Win XP
Delphi 5 Ent., Delphi 2007 Prof
|
Verfasst: Do 31.01.08 15:12
steve110 hat folgendes geschrieben: | sooo ich habe es jetzt geschafft, allderdings sieht die Stadt (ohne Straßen, die kommen da gleich noch rein...) so aus: (Anhang)
Was muss ich jetzt machen, dass ich ich die Häuserreihe auch noch auf die anderen Seite weiter nach links bekomme?
Vielleicht kannst du mir dazu auch noch einen Code schreiben?
Danke schonmal |
Dazu musst du doch eigentlich nur die gleiche Prozedur aufrufen, mit der du die Häuser auf der linken Seite malst - nur eben mit anderen Koordinaten (weiter nach rechts -> größerer X wert).
|
|
steve110 
Hält's aus hier
Beiträge: 14
|
Verfasst: Do 31.01.08 15:27
alles klar, hab ich jetzt auch gemacht, allerdings möchte ich jetzt die Straße da einfügen, und da ich die immer auf einer Image hatte sieht man jetzt die Häuser nicht mehr, weil die Image-Fläche die Canvas-Fläche uberlappt...
Meine Frage jetzt noch, was muss ich machen um entweder die komplette Häuserprozedur auf die Image-Fläche zu bekommen, ODER damit ich die Straße auf der Canvas zeichnen kann (Bei Image hieß es ja : ImStadt.Canvas.Lineto(x,y) Was muss ich hier anstatt ImStadt eingeben, damit die Straße auf der Canvas-Fläche gezeichnet wird...
Ich hoffe ihr wisst was ich meine
Danke schonmal
|
|
steve110 
Hält's aus hier
Beiträge: 14
|
Verfasst: Do 31.01.08 19:42
|
|
|