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



BeitragVerfasst: Sa 13.11.10 18:40 
Hallo alle miteinander,

ich bin neu im Forum und freu mich, dass ich gleich etwas gefunden habe.

Ich beschäftige mich seit einiger Zeit mit Delphi (das letzte mal Aktiv in der Schule) und wollte nun nach einiger Zeit mal wieder etwas ausprobieren. Leider schwieriger als ich gedacht habe, weshalb ich mich jetzt an euch wende. :)

Kurz warom es geht:
Ich habe ein Spiel bei dem der Gegner Einheiten hat und ich auf diese Einheiten mit verschienen Einheiten reagieren kann.
Beispielsweise hat der Gegner Soldaten also gibt es für mich die Möglichkeit, mit Soldaten, Panzern, ....ect. anzugreifen.

Nun das Problem...

Ich hab eine Checkbox Soldat. Wenn ich die Anklicke soll in eines der 24 Labelfelder als Reaktion stehen: Soldaten, im nächsten Panzer mit der Bedingung , und jetzt da seigentliche Problem, wenn im ersten Labelfeld schon etwas steht, soll er es prüfen und die nächste Einheit in das 2. Labelfeld schreiben, wenn dieses voll ist in das 3. usw...

Ich habe mal Bilder hochgeladen und den bisherigen Quellcode:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
procedure TForm1.CheckBox1Click(Sender: TObject);
begin
if Checkbox1.State=cbChecked then
    if label3.Caption='' then label3.caption:='Panzer' else label4.caption:='Panzer';
    if label4.Caption='' then label4.caption:='Panzer' else label5.caption:='Panzer';
    if label5.Caption='' then label5.caption:='Panzer' else label6.caption:='Panzer';
    if label6.Caption='' then label6.caption:='Panzer' else label7.caption:='Panzer';
    if label7.Caption='' then label7.caption:='Panzer' else label8.caption:='Panzer';
    if label8.Caption='' then label8.caption:='Panzer' else label9.caption:='Panzer';
    if label9.Caption='' then label9.caption:='Panzer' else label10.caption:='Panzer';
    if label10.Caption='' then label10.caption:='Panzer' else label11.caption:='Panzer';
end;


Das doofe ist nur, er schreibt es in jedes Feld ...

Ich hoffe ihr könnt mir Tipps geben.

In Hoffnung
gfckiller


Moderiert von user profile iconMartok: Quote- durch Delphi-Tags ersetzt
Einloggen, um Attachments anzusehen!
glotzer
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 393
Erhaltene Danke: 49

Win 7
Lazarus
BeitragVerfasst: Sa 13.11.10 18:46 
das erste was ich sehe ist das da ein begin...end fehlt

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
procedure TForm1.CheckBox1Click(Sender: TObject);
begin
    if Checkbox1.State=cbChecked then
    begin
        if label3.Caption='' then label3.caption:='Panzer' else label4.caption:='Panzer';
        if label4.Caption='' then label4.caption:='Panzer' else label5.caption:='Panzer';
        if label5.Caption='' then label5.caption:='Panzer' else label6.caption:='Panzer';
        if label6.Caption='' then label6.caption:='Panzer' else label7.caption:='Panzer';
        if label7.Caption='' then label7.caption:='Panzer' else label8.caption:='Panzer';
        if label8.Caption='' then label8.caption:='Panzer' else label9.caption:='Panzer';
        if label9.Caption='' then label9.caption:='Panzer' else label10.caption:='Panzer';
        if label10.Caption='' then label10.caption:='Panzer' else label11.caption:='Panzer';
    end;
end;

Für diesen Beitrag haben gedankt: gfckiller
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Sa 13.11.10 18:47 
die Zahlen bitte anpassen..
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
procedure TForm2.CheckBox1Click(Sender: TObject);
var
  I: Integer;
  l:TLabel;
begin
  if Checkbox1.Checked then
    for I := 1 to 6 do
      begin
        l := TLabel(FindComponent('Label' + IntToStr(i)));
        if Assigned(l) and (l.Caption = ''then
            begin
               l.Caption := 'Panzer';
               break;
            end;
      end;
end;

_________________
Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS

Für diesen Beitrag haben gedankt: gfckiller
gfckiller Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Sa 13.11.10 18:55 
Wow, danke. Es klappt. Vielleicht noch ganz kurz die Frage, wenn gegen den Soldaten jetzt nichtnur Panzer kämpfen können, sondern noch....weiß nicht, 3 andere Einheiten, wie lass ich die in den entsprechneden Label-Feldern darstellen?:(

Trotzdem ein riesen Dank an dich.
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Sa 13.11.10 19:02 
Ich fürchte ich haben noch nicht verstanden was Du vorhast :?:

_________________
Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
gfckiller Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Sa 13.11.10 19:14 
Kein Problem. :)
Hier einmal ein konkretes Beispiel:
Wenn ich jetzt Soldat anklicke, soll im 1. Label stehen: Panzer, im 2. Mine im 3. Panzerfaust...

Wenn ich jetzt Panzer anklicke(siehe Bild) dann soll im 1. Label stehen: Panzer, im 2. Panzerfaust im 3. Antipanzermine...

ABER wenn ich jetzt zuerst Soldat anklicke, und die ersten 3 Labelfelder dadurch belegt sind, und ich nun Panzer anklicke müssten die nächsten 3 Sachen ja dann in Label4 Label5 und Label6 stehen..andersherum natürlich genaus, wenn ich zuerst mit Panzer anfange sollten die Soldatensachen bei Label4 5 und 6 weitergehen. Ich weiß hohe Ansprüche..aber ich wollt es echt mal versuchen :(


Hab mir zum schluss dann auch gedacht (in meinem Fall kommt ja die Panzerfaust 2x vor) dass doppelte Sachen dann wegfallen und bloß einmal erwähnt sein brauchen. Aber das denke ich, ist dann doch zu viel verlangt...

Ich hoffe cih konnte es ein bisschen besser erklären.
Mit freundlichen Grüßen
Patrick
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Sa 13.11.10 19:27 
ich habe es immer noch nicht ganz "gefressen" und Bild finde ich keines, aber kann es sein daß Du Dir mit einer Listbox und dem Einfügen/Anhängen von Texten leichter tätest?

_________________
Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
gfckiller Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Sa 13.11.10 19:54 
Hm wo du das so sagst, befürchte ich auch, dass es (mir) aufjedenfall einfacher fallen würde..
Ich werd es gleich mal probieren , in der Hoffnung, dass es klappt. :)

Danke trotzdem für die Hilfe.
Einen schönen Abend wünsch ich noch.
Gerd Kayser
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 632
Erhaltene Danke: 121

Win 7 32-bit
Delphi 2006/XE
BeitragVerfasst: Sa 13.11.10 20:06 
Warum so umständlich mit zig Labeln? Verwende ein Label. Beispiel:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
procedure TMainform.Button1Click(Sender: TObject);
begin
  Label1.Caption := 'Panzer' + #13 + 'Mine' + #13 + 'Soldat';
  if Pos(Label1.Caption, 'Panzerfaust') = 0 then  // bereits enthalten?
    Label1.Caption := Label1.Caption + #13 +'Panzerfaust';
end;
Martok
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: Sa 13.11.10 20:28 
Visuelle Komponenten sind nicht für die Datenhaltung, nur für die Darstellung gedacht!

_________________
"The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
Gerd Kayser
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 632
Erhaltene Danke: 121

Win 7 32-bit
Delphi 2006/XE
BeitragVerfasst: Sa 13.11.10 20:31 
user profile iconMartok hat folgendes geschrieben Zum zitierten Posting springen:
Visuelle Komponenten sind nicht für die Datenhaltung, nur für die Darstellung gedacht!
Wenn ich die Ausgangsfragestellung richtig interpretiere, dann geht es um die Darstellung, nicht um Datenhaltung. Schließlich sollen in dem Spiel Informationen angezeigt werden.
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Sa 13.11.10 21:42 
@Gerd Kayser
jep, aber Du parst die Darstellung....

_________________
Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
Gerd Kayser
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 632
Erhaltene Danke: 121

Win 7 32-bit
Delphi 2006/XE
BeitragVerfasst: Sa 13.11.10 21:45 
user profile iconbummi hat folgendes geschrieben Zum zitierten Posting springen:
jep, aber Du parst die Darstellung....
Warum kompliziert, wenn es auch einfacher geht? ;-)
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Sa 13.11.10 21:53 
eben... :D

_________________
Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
Gerd Kayser
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 632
Erhaltene Danke: 121

Win 7 32-bit
Delphi 2006/XE
BeitragVerfasst: Sa 13.11.10 22:21 
user profile iconbummi hat folgendes geschrieben Zum zitierten Posting springen:
eben... :D
Na, wenn es so stört, hier eine andere Lösung:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
procedure TMainform.Button5Click(Sender: TObject);
var
  Text     : string;
  Schleife : integer;
begin
  Text := '';
  for Schleife := 0 to ComponentCount - 1 do
    if (Components[Schleife] is TCheckBox) then
      if (TCheckBox(Components[Schleife]).Checked) then
        Text := Text + TCheckBox(Components[Schleife]).Caption + #13;
   if (Text <> ''then
     if (AnsiLastChar(Text) = #13then
       Delete(Text, Length(Text), 1);
   Label1.Caption := Text;
end;

Edit1: Die letzte if-Abfrage geändert. Damit kommt die Prozedur auch mit 0 angekreuzten CheckBoxen klar.
gfckiller Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: So 14.11.10 01:51 
user profile iconGerd Kayser hat folgendes geschrieben Zum zitierten Posting springen:
Warum so umständlich mit zig Labeln? Verwende ein Label. Beispiel:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
procedure TMainform.Button1Click(Sender: TObject);
begin
  Label1.Caption := 'Panzer' + #13 + 'Mine' + #13 + 'Soldat';
  if Pos(Label1.Caption, 'Panzerfaust') = 0 then  // bereits enthalten?
    Label1.Caption := Label1.Caption + #13 +'Panzerfaust';
end;


Hallo nocheinmal,

hab das eben erst gelesen und wollte es mal ausprobieren, muss dann aber doch nochmal fragen.:/

Wenn ich das so einfüge, war mir klar, dass es nicht funktionieren kann , aber was muss ich gleich nochmal ändern, damit es funzt...

Fehler wäre:


[Error] Unit1.pas(57): ';' expected but '.' found
[Error] Unit1.pas(59): Undeclared identifier: 'Label1'
[Error] Unit1.pas(60): Incompatible types
[Error] Unit1.pas(60): Type of expression must be BOOLEAN
[Error] Unit1.pas(71): ';' expected but '.' found
[Error] Unit1.pas(73): Declaration expected but end of file found
[Error] Unit1.pas(40): Unsatisfied forward or external declaration: 'TForm1.CheckBox1Click'
[Error] Unit1.pas(41): Unsatisfied forward or external declaration: 'TForm1.Button1Click'
[Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas'


P.s. Japs, es geht mir um die Darstellung nicht um die Haltung der Daten :)

Gruß

---------------

Ah schon gut, ich hab es.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 14.11.10 07:28 
user profile icongfckiller hat folgendes geschrieben Zum zitierten Posting springen:
P.s. Japs, es geht mir um die Darstellung nicht um die Haltung der Daten :)
Du packst aber die Daten nicht nur zur Darstellung in die Labels, sondern du liest die auch wieder dort aus.

Und damit benutzt du die visuellen Komponenten als Datenspeicher. Damit machst du dir das Leben nur unnötig schwer...

Wenn du den aktuellen Status unabhängig von den Labels speichern würdest, könntest du ihn dort auch direkt auslesen.
gfckiller Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Mo 15.11.10 12:15 
Ah, so hab ich das nicht gesehen.
Danke für den Vermerk.

Gruß