Announcement

Collapse
No announcement yet.

Schachprogramm will nit funzen ...

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Schachprogramm will nit funzen ...

    Abend all,

    Hier ist der Quellcode eines Schach-Proggs. Es soll kein Spielzug (erstmal) zum ausführen da sein, sondern nur die Visualisierung enthalten.
    Dem array brett (brett : array[TSpalte,TZeile] of TFigur wird immer zugewiesen, welche Figur auf welchem Feld (a1, b1, c2, ... ) steht und welche Farbe das Feld hat. An der Stelle im Quellcode "//Visualisierung (Figuren/Farben)" soll nun die Zuweisungen im Stringgrid bidllich ausgegeben werden. Dazu lasse ich das Array brett durchlaufen und für jede Zelle lasse ich einen Outstring ausgeben.Diesen Outstring habe ich vorher unter "//Outstringzuweisung" (//Farben, //Figuren) immer deklariert. Mein Problem jetzt ist, dass in jedem Feld des Stringggrids, egal welche Figur/Farbe ich vorher zugewiesen hab ein grosses "T" (für Bauer) ausgeben wird und Farben gänzlich fehlen.

    <PRE>
    type
    TKoerper = (Turm, Springer, Laeufer, Dame, Koenig, Bauer, Leer);
    TFarbe = (Weiss, Schwarz, Keine);
    TSpalte = (a, b, c, d, e, f, g, h);
    TZeile = 1..8;
    TFigur = record
    form: TKoerper;
    farbe: TFarbe;
    end;

    TForm1 = class(TForm)
    BrettStringGrid: TStringGrid;
    procedure FormCreate(Sender: TObject);
    private
    { Private declarations }
    public
    { Public declarations }
    end;
    var
    Form1: TForm1;

    implementation

    {$R *.dfm}
    </PRE><PRE>
    procedure TForm1.FormCreate(Sender: TObject);
    var
    brett : array[TSpalte,TZeile] of TFigur;
    Spalte : TSpalte;
    Zeile : TZeile;
    outstring : string;
    muh : integer;
    begin
    //Zweisungen (Figuren)

    //erste und letzte Zeile
    for Spalte := a to h do
    begin
    brett[Spalte,1].form := Turm;
    brett[Spalte,1].form := Springer;
    brett[Spalte,1].form := Laeufer;
    brett[Spalte,1].form := Dame;
    brett[Spalte,1].form := Koenig;
    brett[Spalte,1].form := Laeufer;
    brett[Spalte,1].form := Springer;
    brett[Spalte,1].form := Turm;
    end;
    </PRE><PRE>
    for Spalte := a to h do
    begin
    brett[Spalte,8].form := Turm;
    brett[Spalte,8].form := Springer;
    brett[Spalte,8].form := Laeufer;
    brett[Spalte,8].form := Dame;
    brett[Spalte,8].form := Koenig;
    brett[Spalte,8].form := Laeufer;
    brett[Spalte,8].form := Springer;
    brett[Spalte,8].form := Turm;
    end;
    </PRE><PRE>
    //zweite und vorletzte Zeile
    for spalte := a to h do
    begin
    brett[spalte,2].form := Bauer;
    brett[spalte,7].form := Bauer;
    end;
    </PRE><PRE>
    //dritte bis sechste Zeile
    for Spalte := a to h do
    for Zeile := 3 to 6 do
    Brett[Spalte,Zeile].form := Leer;
    </PRE><PRE>
    //Zuweisungen (Farben)
    </PRE><PRE>
    //Farbe: Weiss
    for spalte := a to h do
    for zeile := 1 to 8 do
    brett[Spalte,Zeile].farbe := Weiss;
    </PRE><PRE>
    //Farbe: Schwarz
    Zeile := 1;
    for spalte := a to h do
    repeat
    brett[spalte,Zeile].farbe := Schwarz;
    Zeile := Zeile+2;
    until zeile > 7;
    </PRE>
    <PRE>
    //Outstringzuweisung
    </PRE><PRE>
    //Farben
    for Spalte := a to h do
    for Zeile := 1 to 8 do
    case brett[Spalte,Zeile].farbe of
    Weiss : outstring := 'w';
    Schwarz : outstring := 's';
    Keine : outstring := 'k' ;
    end;
    </PRE><PRE>
    //Figuren
    for Spalte := a to h do
    for Zeile := 1 to 8 do
    case brett[Spalte,Zeile].form of
    Turm : outstring := 'T' ;
    Springer : outstring := 'S' ;
    Laeufer : outstring := 'L' ;
    Dame : outstring := 'D' ;
    Koenig : outstring := 'K' ;
    Bauer : outstring := 'B';
    Leer : outstring := '-';
    end;
    </PRE><PRE>
    //Visualisierung (Figuren/Farben)
    for spalte := a to h do
    for zeile := 1 to 8 do
    BrettStringGrid.Cells[succ(ord(spalte)),9-Zeile] := outstring;
    </PRE>
    end.

    So des ist es. Aber wieso gibt es nun "T" statt, den jeweiligenString aus ?

    CeYa

  • #2
    Hi ich würd sagen du hast einen String Outstring und den überschreibst du ständig und den letzten bekommst du angezeigt :-

    Comment


    • #3
      Hmmm erstma danke natürlich für deine Antwort.

      Aber der outstring soll ja bei jeder Zelle anders sein.
      Die Schleife geht von Zelle zu Zelle und schaut nach was da is.
      Turm, Bauer, Koenig, ... und welche Farbe und je nachdem was es ist, soll ein anderer Wert für den ouststring ausgeben werden.

      Edit: Also ich hab mal die Strings getrennt. Also einen Farb_ouststring und einen Fig_outstring.
      Damit bin ich dann schon soweit, dass mir jetzt Fareb und Figur angezeigt wird. Doch jetzt wird statt dem grossen "T", "wT" ausgegeben. "w" für die Farbe weiss.

      Aber wie jetzt weiter

      Comment


      • #4
        Es bleibt dabei, schleife //figuren .. du durchläufst von a bis h die Zeile 1 -8 jedes Mal überschreibst du outstring dann weist du in der nächsten schleife outstring zu, outstring hat jetzt den wert der letzten Zuweisung. Stepp doch mal mit dem debuger durch und schau dir an was passiert. <p>Gruß Andreas</p> Na ja, der Turm steht ja auch am Rand :-

        Comment


        • #5
          Hoi,

          Hmm irgend versteh ich was du schreibst aber dann denk ich wieder, dass es doch so sein muss ... oder

          Comment


          • #6
            Harter Fall, mach doch ein array [1..8,1..8]of TSchach.<br>
            <pre>
            type
            TSchach=Record
            Figur:string;
            Farbe:Char;
            end;

            TBrett = Array [1..8,1..8] of TSchach;

            Procedure InitBrett;
            var myBrett:TBrett;
            begin
            myBrett[1,1].Figur:='Turm';
            myBrett[1,1].Farbe:='W';
            //etc
            end;
            usw.
            </pre>
            dann hat jedes feld auch seine Variable, Konstanten haben halt den nachteil das sie nicht variabel sind....
            <p>Andreas</p&gt

            Comment


            • #7
              hhmmm,

              Big Thx 4 Help.
              Kann sein das des auch funzen würde,nur dann muss ich des ganze Prog umschreiben. Hab aber keine Zeit (hab morgen Info) und auch keine Lust.
              Bin momentan auch soweit, dass er des richtig ausgibt. Es lag wirklich am String.

              Code sieht jetzt so aus:
              <PRE>
              //Outstringzuweisung
              </PRE><PRE>
              //Farben
              for Spalte := a to h do
              for Zeile := 1 to 8 do
              case brett[Spalte,Zeile].farbe of
              Schwarz : brettstringgrid.Cells[succ(ord(spalte)),9-Zeile] := 's';
              Weiss : brettstringgrid.Cells[succ(ord(spalte)),9-Zeile] := 'w' ;
              Keine : brettstringgrid.Cells[succ(ord(spalte)),9-Zeile] := 'k' ;
              end;
              </PRE><PRE>
              //Figuren
              for Spalte := a to h do
              for Zeile := 1 to 8 do
              case brett[Spalte,Zeile].form of
              Turm : brettstringgrid.Cells[succ(ord(spalte)),9-Zeile]:= 'T' ;
              Springer : brettstringgrid.Cells[succ(ord(spalte)),9-Zeile] := 'S' ;
              Laeufer : brettstringgrid.Cells[succ(ord(spalte)),9-Zeile] := 'L' ;
              Dame : brettstringgrid.Cells[succ(ord(spalte)),9-Zeile]:= 'D' ;
              Koenig : brettstringgrid.Cells[succ(ord(spalte)),9-Zeile] := 'K' ;
              Bauer : brettstringgrid.Cells[succ(ord(spalte)),9-Zeile] := 'B';
              Leer : brettstringgrid.Cells[succ(ord(spalte)),9-Zeile] := '-';
              end;
              </PRE>

              Hab grad die Ausgabe in die Zuweisung direkt eingefügt.
              Nur jetzt ist das Problem, dass immer nur ausgegeben werden kann, was es für eine Figur ist oder welche Farbe die Figur hat. *fg*
              Naja mal überlegen wie man des lösen könnt, denn Aufgabe ist, die Figur und die Farbe auszugeben

              CeY

              Comment

              Working...
              X