Einzelnen Beitrag anzeigen

Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#9

Re: Kleines Tennis eure Meinung zu einem Anfänger

  Alt 23. Feb 2005, 20:20
Wie schon gesagt, wirklich gut für den Anfang !

Noch ein paar Sachen:
  • Wenn man sein Paddel nach links oder rechts verschiebt, blickt das Programm gar nichts mehr
  • Was soll der Joker ?
  • Irgendwann dann noch richtige Physik und OffScreen-Bitmaps
Jetzt zum Code: Wenn du deinen SoucreCode bereitstellst, solltest du schon auf gute Lesbarkeit, sinnvolle Komponenten- und Variablennamen oder dazu dann wenigstens ein Kommentar (z.B: f und i).

Okay, einmal durch den SourceFormatter, weiter gehts:
i,f,level, level_i :integer; solltest du in den private-Teil deines Formulars verschieben:
Delphi-Quellcode:
[...]
    procedure Timer2Timer(Sender: TObject);
  private
    i,f,level, level_i :integer;
  public
[...]
Brauchst du das wirklich ?
Delphi-Quellcode:
function umdrehen(e: integer): integer;
begin
  result := e * (-1);
end;
Anscheinend nicht, du benutzt es ja gar nicht .
Delphi-Quellcode:
function ist_da(e: string): boolean;
var tolleranz: integer;
begin
  for tolleranz := -20 to 70 do begin
    if (Form1.Button1.Top + tolleranz = Form1.Button2.Top) then begin
      result := false;
      exit;
    end else result := true;
  end;
end;
Performanter:
Delphi-Quellcode:
function ist_da: boolean; //wofür den Parameter?
begin
  Result:=(Form1.Button2.Top-Form1.Button1.Top>=-20) and (Form1.Button2.Top-Form1.Button1.Top<=70)
end;
Delphi-Quellcode:
procedure TForm1.Button1KeyPress(Sender: TObject; var Key: Char);
[...]
funktioniert ja eh nicht.

Delphi-Quellcode:
  if Button2.Left > Form1.clientwidth - 60 then begin
    level_i := level_i + 1;
    if level_i > 2 then begin
      level_i := 0;
      level := level + 1;
      if Timer1.Interval > 21 then Timer1.Interval := Timer1.Interval - 20;
      Label1.Caption := IntToStr(level);
    end;
Es soll nach zwei Treffern das nächste Level kommen, oder? Speicher das ganze in eine Variable, das Level ist dann die Hälfte:
Delphi-Quellcode:
  if Button2.Left > Form1.clientwidth - 60 then begin
    Inc(level); //Erhöht die Variable um eins
    if not Odd(level) then begin //level gerade?
      if Timer1.Interval > 21 then Timer1.Interval := Timer1.Interval - 20;
      Label1.Caption := IntToStr(level mod 2);
    end;
 and (war_da = true) then Boolean-Variablen lieber so testen:
 and war_da then
Delphi-Quellcode:
for tolleranz := -20 to 70 do begin
    if (Button1.Top + tolleranz = Button2.Top) and (war_da = true) then begin
    {Case tolleranz of
    -20..-11: f := -20;
    -10..-1 : f := -17;
      0..10 : f := -14;
      11..20 : f := -9;
      21..35 : f := -5;
      36..40 : f := 0;
      41..50 : f := 10;
      51..60 : f := 15;
      61..70 : f := 20;
     end;   }

    end;
  end;
Dazu sage ich mal nix .

f := random(90) - 25; Für echten Zufall musst du vor Random noch randomize aufrufen. Da dieses aber nur einmal aufgerufen werden sollte (am besten im OnCreate), du aber FormCreate mehrmals aufrufst, musst du es so machen:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  randomize;
  i := -20;
  f := random(90) - 25;
  level := 0; //Nur noch level, s.o.
end;



procedure TForm1.Button3Click(Sender: TObject);
begin
  Button2.Left := 200;
  Button2.Top := 200;
  Timer1.Enabled := true;
  Timer1.interval := 80;
  Label2.caption := '0';
  Timer2.enabled := true;
  i := -20;
  f := random(90) - 25;
  level := 0;
end;
Ist jetzt vielleicht etwas viel Kritik, aber das Programm an sich ist ja gut und du sollst ja was lernen .

PS: Die SourceFormatter Optionen standen auf Default, normalerweise kommt bei mir ein Zeilenumbruch zwischen then und begin.
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat