AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Schachbrett - Komprnenten ansprechen

Ein Thema von Thorben86 · begonnen am 26. Nov 2003 · letzter Beitrag vom 8. Mär 2004
Antwort Antwort
Seite 1 von 2  1 2      
Thorben86

Registriert seit: 20. Nov 2003
Ort: Brühl
365 Beiträge
 
Delphi 2005 Personal
 
#1

Schachbrett - Komprnenten ansprechen

  Alt 26. Nov 2003, 15:54
Hi, ich versuche Immoment ein Schachbrett zu Programmieren, jedoch hab ich Probleme beim Ansprechen der Felder/Figuren.

Falls Falsche Gruppe bitte Verschieben

Die bisher einzige Möglichkeit, die Funktionieren "sollte", währe über ein paar tausend if-Abfragen, wobei ich bei jedem Feld alles andere jedes Mal neu abfrage, um dann die richtigen Figuren auf das richtige Feld zu setzen.
Da ja aber kein Mensch so blöd ist, und so viele abfragen schreibt, versuche ich irgendwie anders dahinzukommen.

Ich hab schon versucht, die Feld/Figurnamen auf eine variable einzulesen, und sie dann weiterzubenutzen, jedoch hab ich dann nur den wert geändert, und nit den Namen, so dass logischer weise die Fehlermeldung kommt, dat es nit klappt, da die variable ja keine Eigenschaften hat.

Könnte man vielleicht Funktionen (top/left/...) für die variablen schreiben, so dass ich über die variable darauf zugreifen kann?? Oder gibt es andere Möglichkeiten, dat ich die verschiebe bzw wenn nötig verschwinden lasse.

Hinweis: Die Felder sind aus Labels, da ich dort die Figur, die auf dem Feld steht als caption nehmen kann, und die Figuren Sind Imageboxen.

Thorben

PS: Hab erst seit diesem Schuljahr Delphi, also kein Profi, aber trotzden könnt ihr ja auch wat komplexeres schreiben, versuch es dann zu verstehen
  Mit Zitat antworten Zitat
Benutzerbild von Treffnix
Treffnix

Registriert seit: 25. Jun 2003
Ort: AC
740 Beiträge
 
Delphi 7 Professional
 
#2

Re: Schachbrett - Komprnenten ansprechen

  Alt 26. Nov 2003, 16:08
Wie genau sieht denn die Funktion aus? Und was für eine Variable hast du versucht zu benutzen?

Allegemein kannst du ja auch das Label und das Image selbst übergeben oder du erstellst einen ganz eigenen Objekttyp für die Schachfiguren.
  Mit Zitat antworten Zitat
MrKnogge

Registriert seit: 9. Jun 2003
Ort: Pforzheim
2.458 Beiträge
 
Delphi 2007 Professional
 
#3

Re: Schachbrett - Komprnenten ansprechen

  Alt 26. Nov 2003, 16:25
Ich würde die Felder als array nehmen,
das erspart dir die tausend if Abfragen...

Ich möcht zur zeit auch ein kleines Schach(Netzwerk) erstellen,
weist du wo man Bilfer von Figuren herbekommt ?
Christian Bootz
Einstein ist tot, Newton ist tot,
und mir ist auch schon ganz schlecht...
  Mit Zitat antworten Zitat
Thorben86

Registriert seit: 20. Nov 2003
Ort: Brühl
365 Beiträge
 
Delphi 2005 Personal
 
#4

Re: Schachbrett - Komprnenten ansprechen

  Alt 26. Nov 2003, 16:36
Also, ich hatte string-Variablen, wat eigentlich logisch ist, dat die nit klappen können, weil is ja halt en test, und wat meinste mit
Zitat:
Wie sieht die Funktion denn aus


Mit ärrays wär ne gute möglichkeit, nur dann hab ich immer noch dat Problem, dat ich die nit ansprechen kann, oderverplan ich da gerade irgend wat?
  Mit Zitat antworten Zitat
Benutzerbild von Treffnix
Treffnix

Registriert seit: 25. Jun 2003
Ort: AC
740 Beiträge
 
Delphi 7 Professional
 
#5

Re: Schachbrett - Komprnenten ansprechen

  Alt 26. Nov 2003, 16:43
Ich mein, was du genau damit machen willst. Versuchst du herauszufinden, welche Figur auf einem Feld ist, oder auf welchem Feld eine Figur ist?

Zum Array: Man kann auch Arrays mit Objekten füllen. Die kannste dann natürlich auch ansprechen.
  Mit Zitat antworten Zitat
axelf98

Registriert seit: 27. Aug 2003
Ort: Ennepetal
440 Beiträge
 
Delphi 2005 Personal
 
#6

Re: Schachbrett - Komprnenten ansprechen

  Alt 26. Nov 2003, 17:33
Was hast du denn als Figuren und Brett gedacht? Grafiken in Form von Timage?

Dann kann man das mit einem Array of Timage machen.
  Mit Zitat antworten Zitat
axelf98

Registriert seit: 27. Aug 2003
Ort: Ennepetal
440 Beiträge
 
Delphi 2005 Personal
 
#7

Re: Schachbrett - Komprnenten ansprechen

  Alt 26. Nov 2003, 17:53
Hier erzeugt ein Button-Klick ein neues Bild.
Diese Bilder kann ich dann zB. mit einer for-schleife mit
Delphi-Quellcode:
for i := 0 to anzahl-1 do
begin

 Figuren[i].left := .... ;
 Figuren[i].visible := false;

  // usw...
end;
Hier der Code:
Hinweis man kann auch mit einer Schleife problemlos 100 Bilder initilaisieren.

Delphi-Quellcode:
var
  Form1: TForm1;
  Figuren : Array of Timage;
  anzahl : Integer;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin
 anzahl := anzahl + 1;
 setlength(Figuren,anzahl);

 Figuren[anzahl-1] := Timage.Create(Form1);

 with Figuren[anzahl-1] do
 begin
  parent := form1;
  top := high(Figuren) * 60;
  left := high(Figuren) * 30;
  Picture.LoadFromFile('C:\test.bmp');
  show;
 end;
end;

initialization
 anzahl := 0;
 setlength(Figuren,anzahl);

end.
  Mit Zitat antworten Zitat
Benutzerbild von Smokey
Smokey

Registriert seit: 10. Nov 2003
Ort: Puerto de la Cruz
158 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: Schachbrett - Komprnenten ansprechen

  Alt 26. Nov 2003, 18:09
Bei sowas muss ich ja immer wieder den "objektorientierten" Ansatz vorschlagen

Schachbrett hat-> Felder

Figuren stehen auf -> Feldern

Also einfach ne Klasse Schachbrett mit nem Container der Objekte vom Typ Feld aufnimmt (am besten noch Singleton)

Klasse Felder mit Attributen wie :
Feldname(zB A8 ) <- kann man auch noch splitten
Figur-Objekt (entweder nil wenn nix draufsteht, oder halt die entsprechende Figur)

Klasse Figur mit
Name (Läufer/Springer/Bauer etc)
Bildlink (falls du mit Bildern arbeitest)
Bewegungsformel

usw....fänd ich einfacher als da direkt in nem Array rumzuwurscheln.
Array dann nachher nur zur Darstellung und selbst da wär vermutlich nen Drawgrid oder so einfacher.

P.S.: Ich hab das nun nicht volständig durchdacht, will also nix von "aber figur wäre doch eher ne Elternklasse und die einzelnen Figuren wären blabla" hören
Wollt damit nur sagen, dass gerade in so Beispielen meiner Meinung nach der Ansatz über Objekte/Klassen zu gehen sinnvoll wäre
Greif dir ein gutes Stück Fleisch auf deinem Weg nach draussen !!!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#9

Re: Schachbrett - Komprnenten ansprechen

  Alt 26. Nov 2003, 18:21
Also mal am Anfang:
Meiner meinung nach ist ein Schachprogramm eher was für Fortgeschrittene. Anfänger sollten sich erst mal an was einfacheren versuchen.
Ich hab keine Ahnung warum plötzlich so viele Anfänger auf Schach stehen, und auch gleich an einem eigenen Spielchen basteln wollen?
Ich persönlich arbeite schon seit ein paar Jahren an einer eigenen Version. Bei mir hängt es aber mehr an der selbst entwickelten KI und den vielen größeren Pausen zwischendurch.

Zitat:
Die bisher einzige Möglichkeit, die Funktionieren "sollte", währe über ein paar tausend if-Abfragen, wobei ich bei jedem Feld alles andere jedes Mal neu abfrage, um dann die richtigen Figuren auf das richtige Feld zu setzen.
Da ja aber kein Mensch so blöd ist, und so viele abfragen schreibt, versuche ich irgendwie anders dahinzukommen.
Das klingt so, als wenn du die Abfrage einfach weglassen willst - würde ich dir nicht empfehlen.

Und nun zum Thema:

Am bessten lassen sich die Figuren in einem Array speichern;
Deklaration:
Code:
[b]Const[/b]
  F_F  = 0; { Frei (keine Figur)                 }

[color=gray] F_WBb = 1; { Weiß - Bauer (noch nicht bewegt)   }[/color]
  F_WB = 2; { Weiß - Bauer                       }
  F_WS = 3; { Weiß - Springer                    }
  F_WL = 4; { Weiß - Läufer                      }
[color=gray] F_WTb = 5; { Weiß - Turm (noch nicht bewegt)    }[/color]
  F_WT = 6; { Weiß - Turm                        }
  F_WD = 7; { Weiß - Dame                        }
[color=gray] F_WKb = 8; { Weiß - König (noch nicht bewegt)   }[/color]
  F_WK = 9; { Weiß - König                       }

[color=gray] F_SBb = 11; { Schwarz - Bauer (noch nicht bewegt) }[/color]
  F_SB = 12; { Schwarz - Bauer                    }
  F_SS = 13; { Schwarz - Springer                 }
  F_SL = 14; { Schwarz - Läufer                   }
[color=gray] F_STb = 15; { Schwarz - Turm (noch nicht bewegt) }[/color]
  F_ST = 16; { Schwarz - Turm                     }
  F_SD = 17; { Schwarz - Dame                     }
[color=gray] F_SKb = 18; { Schwarz - König (noch nicht bewegt) }[/color]
  F_SK = 19; { Schwarz - König                    }

[b]Var[/b] Spielfeld: [b]Array[/b][1..8, 1..8] [b]of[/b] Byte;
die grauen Variablen werden nur bei einer richtigen Programmierung des Schachspiels benötigt. Wenn zum Beispiel Sonderzüge wie Rochade und so unterstützt werden sollen.

Zuweisung und auslesen ist wie bei jedem anderen Array auch:Spielfeld[2, 1] := F_WS; Abfragen:
Delphi-Quellcode:
Case Spielfeld[X, Y] of
  0: ... { Feld ist leer  }
  1..9: ... { weiße Figur    }
  11..19: ... { schwarze Figur }
End;
(Die Zahlen können natürlich auch durch die oben definierten Konstanten ersetzt werden)

Feld zeichnen:
Delphi-Quellcode:
For X := 1 to 8 do
  For Y := 1 to 8 do
    Case Spielfeld[X, Y] of
      0: ... { leeres Feld zeichnen     }
      1, 2: ... { weißen Bauern zeichnen   }
      3: ... { weißen Springer zeichnen }
      4: ... { weißen Läufer zeichen    }
      ...
      18, 19: ... { schwarzen König zeichnen }
    End;
Könnte mich zwar noch weiter auslassen, hab aber keine Lust dazu. Es steckt schließlich ein Haufen Arbeit drin, und jetzt einfach alles zu verschenken kommt nicht in Frage.



Hab mal einen meiner alten Ansätze ausgekramt.
Das ist eine reine Singelplayerversion, da das Setup zum Benutzerwechsel nicht enthalten ist.
Da dort die KI nicht drinn ist, wird Schwarz nie ziehen.
  • über "Neu" wird ein neues Spielfeld geladen
  • über "Ende" wird das Programm beendet
  • "Einstellungen" zum ändern der Oberfläche und des Anschlusses (Ohne Treiber, also inaktiv)
  • "Brett drehen" (Brett wird aus privaten Gründen nicht gedreht, sondern gespiegelt)
  • "Editor" startet/beendet den Editormodus
    • Linke Maustaste = Figur setzen/tauschen
    • Mittlere Maustaste / Shift + Linke Maustaste = Figur wechseln
    • Rechte Maustaste = Figur löschen
  • "Sprungfelder" zeigt die möglichen Sprungfelder an
    die Mothode zur Auswahl möglicher Felder hat aber in dieser Version einen kleinen Fehler
    (bei Dame oder König, glaube ich zumindestens)
  • Die anderen Felder im Einstellungsbereich sind selbst erklärend
  • Die untersten eigenartigen Werte im Einstellungsbereich sind für Debugzecke (Anzeigetempo...)
  • Schwarz kann nicht gezogen werden
  • Weiß zieht nur einmal, da ja die KI für schwarz fehlt.
    Das läßt sich aber umgehen, wenn nach dem Zug kurz der Editmodus gestartet und wieder beendet wird, das setzt intern einige Register zurück (deswegen bleibt der Editmodus nach dem 1. Zug auch noch aktiv)


http://www.FrankNStein.de/Smiley-Kuss.gif * * http://www.FrankNStein.de/Smiley-Spinne.gif * * * http://www.FrankNStein.de/Smiley-Winken.gif
Angehängte Dateien
Dateityp: exe normal.exe (959,5 KB, 34x aufgerufen)
$2B or not $2B
  Mit Zitat antworten Zitat
Thorben86

Registriert seit: 20. Nov 2003
Ort: Brühl
365 Beiträge
 
Delphi 2005 Personal
 
#10

Re: Schachbrett - Komprnenten ansprechen

  Alt 26. Nov 2003, 19:23
Thx für all die antworten, aus allem zusammen werd ich's schon irgendwie hinkriegen.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:30 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz