Entwickler-Ecke
Sonstiges (Delphi) - zu viele if - abfragen vermeiden. wie?
koky - Mi 25.11.09 10:12
Titel: zu viele if - abfragen vermeiden. wie?
mein problem ist, das ich ein schachspiel programmiere..
dafür hab ich eine variable (string) die angibt, welche figur ausgewählt wird.
sobald auf ein leeres feld geklickt wird, werden tausende abfragegen durchgeführt, um herauszufinden welche figur ausgewäht wird. (zb: if figurauswahl = 'bauer1_weiss' then begin bauer1_weiss.top := blablabla)(die figurensind canvases)
kann man nicht iwie machen dass delphi herausfindet was für eine figur ausgewählt ist und die befehle mit dieser figur ausführt?
ich stell mir das ungefähr so vor: "figurauswahl".top := blablabla
Narses - Mi 25.11.09 10:47
Moin!
Bitte ändere den Titel des Topics, da er wenig über das eigentlich Thema verrät. Hier der entsprechende Absatz aus den
Richtlinien [
http://www.entwickler-ecke.de/richtlinien.html]:
1.2 Beiträge: |
Bitte formuliere den Betreff Deiner Beiträge so, dass andere Mitglieder anhand dieser bereits das eigentliche Thema festmachen können. Beiträge wie etwa "Eine Anfängerfrage" oder "Weiß jemand, wie das geht?" lassen den Leser im Unklaren darüber, was das Thema der Diskussion ist.[...] |
Einfach oben bei Deinem ersten Beitrag auf

oder

klicken und den Titel ändern. Danke Dir!
cu
Narses
ffgorcky - Mi 25.11.09 18:46
Also wenn Du Deinen Titel entsprechend geändert hast, dann könntest Du das ja mal so ausprobieren, indem Du immer den Sender in der Procedur
OnClick(Sender:TObject) abfragst und davon zum Beispiel den Hint ansprichst - also z.B. in etwa so:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| var ausgewaehlteFigur:TImage;
procedure TPanelSchachBrettFeld.OnClick(Sender:TObject); begin if ausgewaehlteFigur=null then begin if typeof(Sender.Objects[0])=Image then begin ausgewaehlteFigur:=TImage(Sender.Objects[0]); end else ShowMessage('Ein leeres Feld kann man nicht auswählen!'); end else ausgewaehlteFigur.Owner:=Panel(Sender); end; |
So, ich hoffe, dass ich Dir hier keinen Blödsinn erzähle, weil ich es leider im Moment nicht nachprüfen kann.
Critter - Do 26.11.09 13:16
Hallo,
das ganze sieht mir aber nach einem recht ungünstigen Programmdesign aus. Wo kommt denn der Sting mit der Figurenbezeichnung her? Kannst du an der Stelle nicht gleich eine Referenz auf das Richtige Objekt der Spielfigur setzen? Arbeiten über String Bezeichnungen erscheint mir sehr ungünstig.
critter
ffgorcky - Do 26.11.09 22:38
Und wenn Du gerne (verständlicherweise!) nicht so viele If-Abfragen hast, dann könntest Du es ja so machen, indem Du das ganze mit Case-Anweisungen machst - also z.B. in etwa so:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| case ausgewaehlteFigur.Hint of 0:dann behandle sie z.B. als Bauer; 1:dann behandle sie z.B. als Turm; 2:dann behandle sie z.B. als Pferd/Springer; 3:dann behandle sie z.B. als Läufer; 4:dann behandle sie z.B. als Dame; 5:dann behandle sie z.B. als König; end; |
Regan - Fr 27.11.09 00:16
Moin,
Es kommt ja erstmal darauf an, was dein Spielfeld ist. Du könntest, wenn du für jedes Feld eine extra Komponente verwendest, eine zusätzliche Eigenschaft "Figurentyp" definieren. Die Eigenschaft "Figurentyp" könnte dann eine Enumeration sein, die du einfach per case-Schleife prüfen kannst. Dann erstellst du einfach die Objekte mit deiner neuen Komponente.
MfG
Regan
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!