Autor Beitrag
Nightblizard
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Mi 16.12.09 22:22 
Hi,
zur Zeit arbeiten wir in der Schule mit for-Schleifen und Canvas und wir sollen als Übungsaufgabe die amerikanische Flagge zeichnen, jedoch stehe ich, um ehrlich zu sein, gerade ziemlich auf dem Schlauch!
Ich habe Probleme bei der Verschiebung der Sterne und dem Übergang des blauen Hintergrundes zu den rot/weißen Streifen.
Hier ein Bild:
flagge-vereinigte-staaten-von-amerika-usa

Wir sollen das ganze über Canvas.TextOut(x, y, '*'); zeichnen.
Ein einfaches Rechteck, sowie Dreiecke sind kein Problem, jedoch macht mir die Verschiebung, wie bereits erwähnt, zu schaffen.

Ich hoffe jemand kann mir ein wenig unter die Arme greifen!

Mfg,
Night

Moderiert von user profile iconNarses: Bild als Anhang hochgeladen.
Moderiert von user profile iconNarses: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Do 17.12.2009 um 11:58
Einloggen, um Attachments anzusehen!
DHE
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 37

Win XP, Ubuntu 9.04
Delphi 7 PE; Delphi 2010 Prof (Dank AGS 2009 ;-) )
BeitragVerfasst: Mi 16.12.09 22:45 
Du nimmst einfach den Modulo Operator um die Verschiebung zu bestimmen.
Jede gerade Zahl wird einfach um einen bestimmten x-Wert nach rechts verschoben

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
verschiebung := 10;

for y := 0 to 6 do begin
      if y mod 2 = 0 then begin
            for x := 0 to 9 do begin
                  Canvas.TextOut((x*verschiebung)+(verschiebung div 2), y*verschiebung, '*');
            end;
      end
      else begin
            for x := 0 to 10 do begin
                  Canvas.TextOut((x*verschiebung), y*verschiebung, '*');
            end;
      end;
end;


das ganze ist untestet sollte so aber laufen
Nightblizard Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Do 17.12.09 17:02 
Aaah, dass ich darauf nicht gekommen bin... Jetzt ist die 1 doch gesichert :P

Danke dir, jedoch sage ich noch dazu (falls jemand anders das selbe Problem hat), dass man zuerst schauen sollte ob y mod 2 = 1 ist und nicht 0, sonst sind die Sternchen anders herum verschoben (erst die kleine Reihe und dann die große), dennoch vielen dank! :)


Edit:
Okay, ein Problem gelöst und nun kommt ein weiteres... Jetzt muss ich den blauen Hintergrund (der dynamisch erzeugten Sternchen) zeichnen, jedoch komme ich dort nicht ganz hin.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
procedure TForm1.AmerikanischeFlg(menge : integer);
 var
  x, y : integer;
begin
//abstand := 30; abstandflg := 10; <-- Damit die Sterne nicht zu weit auseinander liegen
     Canvas.Pen.Color := clblue;
     Canvas.Brush.Color := clblue;
     Canvas.Rectangle(abstand, abstandflg, menge*abstand, menge*abstand- menge*abstandflg );

     canvas.Font.Color := clwhite;
     
     for y := 1 to menge+4 do begin //+4 damit menge = 5 die richtige flagge ergibt
      if y mod 2 = 0 then begin
        for x := 1 to menge do begin
         Canvas.TextOut((x*abstand) + (abstand div 2), y*abstandflg, '*'); 
        end;
      end
      else begin
        for x := 1 to menge+1 do begin
          Canvas.TextOut(x*abstand, y*abstandflg, '*');
        end;
      end;
     end;
end;


Wenn ich das nun ausführe sieht das ganze so aus:
Moderiert von user profile iconNarses: siehe Anhang
Es fehlen 2 Zeilen auf der X-Achse, eine auf der Y-Achse und die letzte Sternenreihe wird unsauber dargestellt.
Und mir ist gerade aufgefallen, dass beim Wechseln der Figur der Hintergrund weiterhin so seltsam gezeichnet wird, trotz repaint Anweisung.
Bin für jeden Lösungsansatz überaus dankbar!

Mfg,
Night

Moderiert von user profile iconNarses: Code- durch Delphi-Tags ersetzt
Einloggen, um Attachments anzusehen!
DHE
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 37

Win XP, Ubuntu 9.04
Delphi 7 PE; Delphi 2010 Prof (Dank AGS 2009 ;-) )
BeitragVerfasst: Do 17.12.09 23:54 
Ich denke mal du möchstest zuerst das blaue Rechteck zeichnen und dann die Sterne darüber, oder?
Dann mach aus:

ausblenden Delphi-Quelltext
1:
Canvas.Rectangle(abstand, abstandflg, menge*abstand, menge*abstand- menge*abstandflg );					


das:

ausblenden Delphi-Quelltext
1:
Canvas.FillRect(Rect(abstand, abstandflg, menge*abstand, menge*abstand- menge*abstandflg ));					


Und noch nen kleiner Tipp:
mach aus den code - Tags delphi - tags, dann hast du auch SyntaxHighlightning
Nightblizard Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Fr 18.12.09 15:04 
Das macht leider keinen Unterschied. Ein paar Sterne liegen nicht auf dem Hintergrund, aber haben einen kleien blauen Bereich um sich herum. Oder denke ich falsch beim Zeichnen des Hintergrundes? Das dynamische Verändern der Flaggengröße ist verdammt hinderlich...
FinnO
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1331
Erhaltene Danke: 123

Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
BeitragVerfasst: Fr 18.12.09 15:32 
danach TCanvas.BrushStyle auf bsClear stellen sollte dem Abhilfe tun :P
Nightblizard Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Fr 18.12.09 15:36 
/kiss
Das verschafft abhilfe, danke!