Entwickler-Ecke

Sonstiges (Delphi) - Grafik bei Hölzchenspiel


luckyluc - Sa 07.03.09 12:38
Titel: Grafik bei Hölzchenspiel
Hallo ich benötige wieder einmal eure Hilfe. Also ich habe ein Nimmspiel programmiert, möchte jetzt noch etwas Grfik hinzufügen.
1.Es sollen immer soviele Streichhölzer angezeigt werden, wie noch da sind. Doch bei der Umsetzung treten fehler auf. wenn ich auf den "Neu" Button drücke, so erscheinen mir die anfangszahl der streichhölzer. doch wenn z.B. zuvor die zahl der steichhölzer 90 war (und auch angzeigt wurden), und jetzt die zahl 30 ist, so werden immer noch 90 angezeigt. ich muss Image wieder auf false setzen, doch wie, denn ich kann nicht image auf false und gleichzeitig auf true setzen?
2. Es sollen immer die aktuelle anzahl der streichhöler angezeigt werden, d.h auch wenn ich od. der copm. welche weggnommen haben.
Danke für eure Hilfe.
(Programm siehe Anhang)


jaenicke - Sa 07.03.09 14:03

Ja, du musst an der Stelle wo du die Stäbe weg nimmst auch die Bilder ausblenden. Beim Einblenden gehst du mit der Schleife alle Indizes der Bilder durch. Wobei du das auch optimieren kannst.

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:
procedure TForm1.FormCreate(Sender: TObject);
begin
  Randomize;
  Button_NeuClick(Sender); // Einfach ein neues Spiel starten
end;

procedure TForm1.Button_NeuClick(Sender: TObject);
begin
  staebe := Random(71) + 30;
  Label1.Caption := IntToStr (staebe);
  Edit1.Text := '';
  Label2.Caption := '';
  Label3.Caption := '';
  Button_Nehmen.Enabled := true;
  Button_Rechner.Enabled := true;
  Label4.Visible := true;
  Label4.Caption := 'Wählen Sie hier aus wer beginnt' ;
  for k := 1 to staebe do // direkt staebe statt dem Labelinhalt
  begin
    Image := 'Image' + IntToStr(k);
    TImage(Form1.FindComponent(Image)).Visible := true;
  end;
end;
Für die Schleife kannst du ja direkt den Wert nehmen statt den aus dem Label zurückzukonvertieren.

Ja, und das Ausblenden muss ja bei dieser Zeile passieren:

Delphi-Quelltext
1:
  staebe := staebe - eingabe;                    
Und zwar müssen die Bilder staebe bis staebe - eingabe + 1 ausgeblendet werden. Das riecht doch nach einer weiteren for-Schleife. ;-)

Das Wegnehmen von dir und dem PC kannst du auch zusammenfassen.

Das sind nur Vorschläge, kein Muss:
Nebenbei solltest du dir vielleicht einmal den Styleguide für das Schreiben von Quelltext anschauen. Wenn du überall richtig einrückst, ist der Code gleich sehr viel besser lesbar.
Immerhin hast du die Buttons schon benannt. :zustimm: Unterstriche sind aber nicht so gut, besser wäre z.B. einfach ButtonNeu oder btnNeu (btn für Button).

Für die Schreibweise von Delphi-Quelltext gibt es hier einen Styleguide:
http://dn.codegear.com/article/10280 (englisch)
http://www.delphi-treff.de/delphi-styleguide/ (deutsch)


luckyluc - Sa 07.03.09 16:17

ja ok danke erstmal für die tipps. ich werde es versuchen hinzubekommen. auch das mit dem style ;-)


luckyluc - So 08.03.09 19:44

also es funzt nicht: ich habe den direkten wert staebe genommen doch wenn ich mehrmals auf dem neu button klicke und die eine anzahl der staebe kleiner ist als die vorherige, zeigt er immernoch alles stäbe an. 2. meine for-schleife sieht jetzt so aus:

Delphi-Quelltext
1:
2:
3:
4:
5:
for k := 1 to (staebe-eingabe)+1 do 
 begin
  Image:='Image'+IntToStr(k);
  TImage (form1.FindComponent(Image)).visible:= false;
 end;

ich weiß es ist kaum anders, doch ich weiß nicht so recht wie ich es umsetzten soll.


jaenicke - So 08.03.09 19:47

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Und zwar müssen die Bilder

Delphi-Quelltext
1:
staebe                    
bis

Delphi-Quelltext
1:
staebe - eingabe + 1                    
ausgeblendet werden.
user profile iconluckyluc hat folgendes geschrieben Zum zitierten Posting springen:

Delphi-Quelltext
1:
for k := 1 to (staebe-eingabe)+1 do                    
Fällt dir ein Unterschied aus? Also von wo bis wo die Schleife läuft?

Es gibt ggf. auch downto, wenn die Schleife von einem höheren bis zu einem niedrigeren Wert laufen soll.


luckyluc - So 08.03.09 19:49

aber ich kann doch nicht image := usw. schreiben, das sind inkomatible typen


jaenicke - So 08.03.09 19:56


Delphi-Quelltext
1:
for k := staebe - eingabe + 1 to staebe do                    
bzw.

Delphi-Quelltext
1:
for k := staebe downto staebe - eingabe + 1 do                    
:roll:


luckyluc - So 08.03.09 20:09

also diese schleife muss ich dann jeweils bei button neu und button rechner einfügen, oder? so dann soiel ich das speil und wenn ich das letzt hölchen wegnimmt stürzt das spiel ab. außerdem nimmt der manche hölchen nicht mehr weg. und die das problem der anfangszahl bleibt auch. sry. wenn ich nerve, nur ich möchte das halt hinbekommen mit der grafik.


jaenicke - So 08.03.09 20:16

user profile iconluckyluc hat folgendes geschrieben Zum zitierten Posting springen:
also diese schleife muss ich dann jeweils bei button neu und button rechner einfügen, oder?
Ja, beim Rechner angepasst an die dortigen Hölzchen, die wegkommen.

user profile iconluckyluc hat folgendes geschrieben Zum zitierten Posting springen:
so dann soiel ich das speil und wenn ich das letzt hölchen wegnimmt stürzt das spiel ab.
Dann greifst du vermutlich auf ein Bild zu, das es gar nicht gibt.

Du müsstest einmal mit dem Debugger selbst schauen was passiert. Also mit Haltepunkten und zeilenweisem abarbeiten des Quelltextes.