Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Verkürzung des Codes (https://www.delphipraxis.net/80423-verkuerzung-des-codes.html)

Flo.Hoe 8. Nov 2006 20:03


Verkürzung des Codes
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe vor einem knappen halben Jahr in der
Schule mit dem Informatikunterricht begonnen
und mich endlich mal an einem eigenen Proramm
versucht.
Da wir im Unterricht keine zeit haben uns
wirklich innig mit Delphi zu beschäftigen, ist es
mir schwer gefallen meine Ideen zu verwirklichen.

Ich bin mir sicher, dass mein Quellcode noch stark
komprimiert werden kann.

Aber Wie?

Komme ich wirklich nicht drumm herrum bereits
geschribenen text zu wiederholen ?

(Projektdateien und exe im Anhang)

Kann mir jemand helfen, Strucktur in mein Projekt

zu bringen?




Anletung zum Programm:


Es liegen neun farbige Felder vor,
die in einem Quadrat angeordnet sind.
Bei einem Klick auf ein Feld, ändert sich
die Farbe des jeweiligen Feldes und die
der Nachbarfelder.
Dabei ist die Reihenfolge: schwrz , rot , grün ,

gelb. Danach wiederholt sich die Reihe.

Ziel ist es , das alle Felder die selbe Farbe

haben (sehr schwer).

mr47 8. Nov 2006 20:22

Re: Verkürzung des Codes
 
Liste der Anhänge anzeigen (Anzahl: 1)
OT: Mal abgesehen von deiner Frage, dein Spiel gefällt mir. Ist genau das richtige für mich: Knobeln :wink:


Achja und im Anhang was Schönes :)


mfg

Hador 8. Nov 2006 21:35

Re: Verkürzung des Codes
 
Ich habs mir nur ganz kurz angeguckt, aber hab schon was zu meckern :twisted:

Das allerwichtigste was du verbessern solltest, ist die Form deines Quellcodes. Das Stichwort heißt: Strukturieren!
Denn stelldir mal vor was passiert, wenn du etwas größere Programme schreibst und du dort immer so schreibst:
Delphi-Quellcode:
if (p1=p2)and (p1=p2)and(p1=p3)and(p1=p4)and(p1=p5)and(p1=p6)and(p1=p7)and(p1=p8)and(p1=p9)then
begin
label1.caption:='HERZLICHEN GLÜCKWUNSCH!!!  SIE HABEN GEWONNEN!!!';
Neustart.Visible:=false;Panel1.Visible:=false;Panel2.Visible:=false;Panel3.Visible:=false;Panel4.Visible:=false;Panel5.Visible:=false;Panel6.Visible:=false;Panel7.Visible:=false;Panel8.Visible:=false;Panel9.Visible:=false;
neustart.Visible:=false;
Button1.Visible:=false;
 end;
Immer nur ein Befehl pro Zeile und zwischen begin/end einrücken ((p1=p2)and (p1=p2) ist wie dir vmtl. auch selbst klar ist, unsinn :wink: - und neustart.Visible:=false; hast du auch mehrmals drin):
Delphi-Quellcode:
if (p1=p2) and (p1=p3) and (p1=p4) and (p1=p5) and (p1=p6) and (p1=p7) and (p1=p8) and (p1=p9) then
begin
  label1.caption := 'HERZLICHEN GLÜCKWUNSCH!!!  SIE HABEN GEWONNEN!!!';
  Neustart.Visible := False;
  Panel1.Visible := False;
  Panel2.Visible := False;
  Panel3.Visible := False;
  Panel4.Visible := False;
  Panel5.Visible := False;
  Panel6.Visible := False;
  Panel7.Visible := False;
  Panel8.Visible := False;
  Panel9.Visible := False;
  Button1.Visible:=false;
end;
Dann würde ich die Integer Variablen (p1,p2,p3,p4,p5,p6,p7,p8,p9:integer;) in einem Array speichern:
Delphi-Quellcode:
p: Array[1..9] of Integer;
Darauf zugreifen kannst du dann mit P[1] bis P[9].

Wenn du dann deine 9 Panels ebenfalls noch in einem Array speicherst, dann kannst du deine berechnen-Prozedur bspw. folgendermaßen verkürzen:
Delphi-Quellcode:
for i := 1 to 9 do
  case p[i] of
    1: panel[i].color := clblack;
    2: panel[i].color := clred;
    3: panel[i].color := clgreen;
    0: panel[i].color := clyellow;
  end;
Sind jetzt nur ein paar Sachen, habs mir aber wie gesagt auch nur ganz kurz angeschaut

Aso und statt
Delphi-Quellcode:
if (p1=p2) and (p1=p3) and (p1=p4) and (p1=p5) and (p1=p6) and (p1=p7) and (p1=p8) and (p1=p9) then
begin
  label1.caption := 'HERZLICHEN GLÜCKWUNSCH!!!  SIE HABEN GEWONNEN!!!';
  Neustart.Visible := False;
  Panel1.Visible := False;
  Panel2.Visible := False;
  Panel3.Visible := False;
  Panel4.Visible := False;
  Panel5.Visible := False;
  Panel6.Visible := False;
  Panel7.Visible := False;
  Panel8.Visible := False;
  Panel9.Visible := False;
  Button1.Visible:=false;
end;
kannst du dann natürlich auch
Delphi-Quellcode:
if (p1=p2) and (p1=p3) and (p1=p4) and (p1=p5) and (p1=p6) and (p1=p7) and (p1=p8) and (p1=p9) then
begin
  label1.caption := 'HERZLICHEN GLÜCKWUNSCH!!!  SIE HABEN GEWONNEN!!!';
  Neustart.Visible := False;
  for i := 1 to 9 do
    Panel[i].Visible := False;
  Button1.Visible:=false;
end;

Flo.Hoe 8. Nov 2006 21:48

Re: Verkürzung des Codes
 
Erst einmal dreifachen Dank an den Arbeitsaufwand :!:
Da hab ich's mir aber wirklich schwer gemacht.
Das haben wir im Unterricht allse gar nicht gemacht. :warn:

oki 8. Nov 2006 21:55

Re: Verkürzung des Codes
 
Hi,

so'n Schluck auf ist echt mist was hador? :stupid:

Gruß oki

Phoenix 9. Nov 2006 07:19

Re: Verkürzung des Codes
 
Zitat:

Zitat von Flo.Hoe
Das haben wir im Unterricht allse gar nicht gemacht. :warn:

Alles halb so wild. Es ist schliesslich noch kein Meister vom Himmel gefallen ;-)
Deswegen sind wir ja da.

Edit: Den Rest bitte einfach vergessen.. ist noch früh am morgen, da hab ich crap verzapft :)

RavenIV 9. Nov 2006 07:30

Re: Verkürzung des Codes
 
Zitat:

Zitat von Flo.Hoe
Erst einmal dreifachen Dank an den Arbeitsaufwand :!:
Da hab ich's mir aber wirklich schwer gemacht.
Das haben wir im Unterricht allse gar nicht gemacht. :warn:

Das wäre ja noch schöner, wenn man in einem halben Jahr Schul-Informatik das gleiche lernen würde wie in 3 jahren Informatik-Ausbildung oder in 8 Semestern Informatik-Studium.

Das alles lernst Du mit der Zeit.
Erfahrung bekommt man nicht im Unterricht vermittelt.

TBx 9. Nov 2006 09:13

Re: Verkürzung des Codes
 
und noch was wichtiges:
Man findet in Deinem Quellcode folgendes:
Delphi-Quellcode:
procedure TForm4.Panel1Click (Sender:TObject);
begin
  [...]
  Form4.berechne;
end;
Sowas sollte man grundsätzlich nicht machen.
Du referenzierst hier in der Implementation Deiner Klasse TForm4 die Eine Instanz (Form4) der selben Klasse.
Dadurch würde in jeder weiteren Instanz der Klasse immer wieder nur die Procedure berechne aus der Instanz Form4 verwendet.
Außerdem wäre jede Instanz Deiner Klasse nur dann lauffähig, wenn in dem Programm zumindest die Instanz mit Namen Form4 vorkommt und diese von der Instanz aus erreichbar ist.
Dem oo-Ansatz entspricht es, das Form4 ganz weckzulassen.


Gruß

onlinekater


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:29 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz