| Autor |
Beitrag |
gfckiller
Hält's aus hier
Beiträge: 6
|
Verfasst: 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:
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 Martok: Quote- durch Delphi-Tags ersetzt
Einloggen, um Attachments anzusehen!
|
|
glotzer
      
Beiträge: 393
Erhaltene Danke: 49
Win 7
Lazarus
|
Verfasst: Sa 13.11.10 18:46
das erste was ich sehe ist das da ein begin...end fehlt
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
      
Beiträge: 1248
Erhaltene Danke: 187
XP - Server 2008R2
D2 - Delphi XE
|
Verfasst: Sa 13.11.10 18:47
die Zahlen bitte anpassen..
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 
Hält's aus hier
Beiträge: 6
|
Verfasst: 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
      
Beiträge: 1248
Erhaltene Danke: 187
XP - Server 2008R2
D2 - Delphi XE
|
Verfasst: 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 
Hält's aus hier
Beiträge: 6
|
Verfasst: 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
      
Beiträge: 1248
Erhaltene Danke: 187
XP - Server 2008R2
D2 - Delphi XE
|
Verfasst: 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 
Hält's aus hier
Beiträge: 6
|
Verfasst: 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
      
Beiträge: 632
Erhaltene Danke: 121
Win 7 32-bit
Delphi 2006/XE
|
Verfasst: Sa 13.11.10 20:06
Warum so umständlich mit zig Labeln? Verwende ein Label. Beispiel:
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 Label1.Caption := Label1.Caption + #13 +'Panzerfaust'; end; |
|
|
Martok
      
Beiträge: 3661
Erhaltene Danke: 604
Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
|
Verfasst: 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
      
Beiträge: 632
Erhaltene Danke: 121
Win 7 32-bit
Delphi 2006/XE
|
Verfasst: Sa 13.11.10 20:31
Martok hat folgendes geschrieben : | | 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
      
Beiträge: 1248
Erhaltene Danke: 187
XP - Server 2008R2
D2 - Delphi XE
|
Verfasst: 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
      
Beiträge: 632
Erhaltene Danke: 121
Win 7 32-bit
Delphi 2006/XE
|
Verfasst: Sa 13.11.10 21:45
|
|
bummi
      
Beiträge: 1248
Erhaltene Danke: 187
XP - Server 2008R2
D2 - Delphi XE
|
Verfasst: Sa 13.11.10 21:53
eben... 
_________________ Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
|
|
Gerd Kayser
      
Beiträge: 632
Erhaltene Danke: 121
Win 7 32-bit
Delphi 2006/XE
|
Verfasst: Sa 13.11.10 22:21
|
|
gfckiller 
Hält's aus hier
Beiträge: 6
|
Verfasst: So 14.11.10 01:51
Gerd Kayser hat folgendes geschrieben : | Warum so umständlich mit zig Labeln? Verwende ein Label. Beispiel:
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 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
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 14.11.10 07:28
gfckiller hat folgendes geschrieben : | 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 
Hält's aus hier
Beiträge: 6
|
Verfasst: Mo 15.11.10 12:15
Ah, so hab ich das nicht gesehen.
Danke für den Vermerk.
Gruß
|
|