Laden...

Problem mit eigenem Schachprogramm

Erstellt von Soibat vor 16 Jahren Letzter Beitrag vor 16 Jahren 11.648 Views
S
Soibat Themenstarter:in
13 Beiträge seit 2007
vor 16 Jahren
Problem mit eigenem Schachprogramm

Hallo zusammen
Ich möchte ein Schach programmieren.
Ich habe mit 64 Buttons ein Spielfeld erzeugt.
Ich kann ja jetzt zum Beispiel eine Schachfigur auf das Feld A1 setzen. Aber die weiss dann ja nicht wo sie ist. Also muss ich irgendwie mit einem Array ein Schachbrett welches man nicht sieht erzeugen und dies dann mit den Buttons verknüpfen. Weiss jemand wie man das machen muss?



        Button Schachbutton;
        PictureBox pictbox;
        public Form1()
        {
            //Schachbuttonarray erzeugen
            int[,] schachb = new int[8,8] ;
            //Schachfelder erzeugen;
            int y = 400;
            int name = 1;
            for (int i = 0; i < 8; i++)
            {
                int x = 10;
                for (int k = 0; k < 8; k++)
                {
                    schachb[i, k] = i * k;
                    this.Schachbutton = new Button();
                    this.Schachbutton.Text = name.ToString();
                    this.Schachbutton.Name = name.ToString();
                    if (name == 1 || name == 3 || name == 5 || name == 7 || name == 10 || name == 12 || name == 14 || name == 16 || name == 17 || name == 19 || name == 21 || name == 23 || name == 26 || name == 28 || name == 30 || name == 32 || name == 33 || name == 35 || name == 37 || name == 39 || name == 42 || name == 44 || name == 46 || name == 48 || name == 49 || name == 51 || name == 53 || name == 55 || name == 58 || name == 60 || name == 62 || name == 64)
                    {
                        Schachbutton.BackColor = Color.Black;
                    }
                    else
                    {
                        Schachbutton.BackColor = Color.White;
                    }
                    this.Schachbutton.Size = new Size(50, 50);
                    this.Schachbutton.Location = new Point(x, y);
                    x += 50;

                    name++;
                    this.Controls.Add(Schachbutton);
                    
                }
                y -= 50;
                
                
            }
            this.pictbox = new PictureBox();
            pictbox.Image = Bitmap.FromFile("King_White.gif");
            pictbox.Location = new Point(800,800);
            pictbox.Visible = true;


Dies habe ich bis jetzt...

Ich bin froh auf antworten.

T
92 Beiträge seit 2006
vor 16 Jahren

Hi,

wie du schon sagst, ist ein Array eventuell die Lösung. Müsste dann aber allerdings ein Array aus Buttons sein (wenn du eben Buttons anzeigen willst).

Ich würd dir aber empfehlen, eine Klasse zu schreiben, die von Button erbt und dann noch eine zusätzliche Eigenschaften wie "Position" oder auch noch "Figur".
Somit weiß dann jeder Button, wo er liegt und welche Figur gerade auf ihn steht.

Will dir nicht zu nahe treten, aber hast du schon viel Erfahrung in der Programmierung? Kommt leider nicht so rüber, von daher würd ich dir ein etwas kleineres Projekt empfehlen, da Schach doch ziemlich komplex ist.

Gruß
tööö

S
Soibat Themenstarter:in
13 Beiträge seit 2007
vor 16 Jahren

Ja ich muss dies eben als eine semesterarbeit schreiben...

134 Beiträge seit 2007
vor 16 Jahren

Hi,

hab hier ein Beispiel für einen neuen Button:
verschiedene Fonts in Button

Da lehst du einfach noch ein paar Properties an wie

Header 

Also Position, Und Figur.

lg

B A L U

S
Soibat Themenstarter:in
13 Beiträge seit 2007
vor 16 Jahren

und das klappt also kann ich da einfach position und figur dranhenken?

T
92 Beiträge seit 2006
vor 16 Jahren

Original von Soibat
und das klappt also kann ich da einfach position und figur dranhängen?

Ja, sicher.
Einfach so, wie das in dem verlinkten Thread von B A L U beschrieben ist:


private String figur;

   public String figur {
      get
      {
         return this.figur;
      }
      set
      {
         this.figur = value;
      }
   }

Hab ich mal aus dem Thread kopiert und angepasst.
Deine Klasse, die von Button erbt, hat dann alle Methoden und Eigenschaften eines Button (wie man das halt kennt) und zusätzlich eben noch diese, die du hinzufügst). Eigentlich ganz praktisch sowas.

Welchen Datentyp für die Figur am besten geeignet ist, muss man dann sehen. Entweder String, in dem dann der Dateiname des Bildes oder so steht, oder ein integer, aber da musste das dann irgendwie selbst handeln.

Gruß
tööö

2.921 Beiträge seit 2005
vor 16 Jahren

Ich würde auch empfehlen das Spielfeld mit einer Klasse bzw. mehreren Klassen darzustellen "innere" Darstellung) und nicht direkt ALLES an den Buttons ("äußere" Darstellung) aufzuhängen.

Die Figuren sollten wissen, wie sie sich bewegen dürfen.

Ist ja wie beim MVC - das Spielbrett ist wahrscheinlich nur die View.

Kommt noch darauf an, wie die Figuren bewegt werden usw.

Soll das ein automatischer Ablauf werden, oder muss man selber spielen können?
Die Buttons deuten IMHO daraufhin, dass man selber spielen können sollte.

Seit der Erkenntnis, dass der Mensch eine Nachricht ist, erweist sich seine körperliche Existenzform als überflüssig.

R
258 Beiträge seit 2007
vor 16 Jahren

Könnte man nicht auch hingehen, und die Positionsdaten in dem Spielfigur-Objekt speichern?

In einem Array diese Daten zu speichern, ist vllt ein wenig zu komplex. Wennn man ein String-Array nimmt, dann könnte man da naturlich in ein "Feld" innerhalb des Arrays schreiben "schwarz_Springer1-A1", aber sowas auszuwerten kann schwer mühsam werden, dann braucht man noch eine Methode, die das "schwarz" herausliest und dann, dass es der eine Springer ist und nicht der andere, und dann, dass er auf Feld A1 steht. Einfach den Springer zu fragen, wo er steht, halte ich für einfacher.

P.S. Dann hätte man eine eindeutige Zuweisung. Und wenn die Figur geschlagen wird, setzt man die Position auf null und weg ist sie. Nicht einfach unsichtbar setzen, das macht nur Probleme, wenn eine andere Figur auf die gleiche Position will.

mfg, Rasta

Sogar meine Mailadresse ist .NET 🙂

4.506 Beiträge seit 2004
vor 16 Jahren

Hallo zusammen,

ich sehe das ähnlich wie dr4g0n76, die Darstellung sollte nichts über eine Logik wissen. Ich würde sagem, dass es einfacher ist, eigene Klassen zu definieren und diese dann in einem 2-dimensionalen Array vorzuhalten.

Züge würde dann eine Controller-Klasse so abfertigen, dass notwendige Abfragen/Manipualtionen der Inhalte der Spielfeld-Klassen vorgenommen werden (Schachlogik).

Grüße
Norman-Timo

A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”

3.825 Beiträge seit 2006
vor 16 Jahren

Ja, richtig !

Logik und Darstellung trennen !

Logik : Array 8 x 8 oder 64 Felder.
Jede Spielfigur ein numerischer Wert
Gegner-Figuren event. Minuswert.

Ein Vorschlag : Das Feld größer machen (12 x 12) und die verbotenen Felder mit einer Konstanten belegen (-99). So kann man einfacher gültige Züge ermitteln. Das haben einige Programme früher so gemacht. Muss man aber nicht so machen.

Bei 8 x 8 ist das Abprüfen einfacher (wenn < 1 oder > 8 dann Fehler), bei einem eindimensionalen Array ist das Abprüfen schwieriger.

Jedre Figur Punkte geben wenn sie geschlagen wird, den eigenen Minuspunkte und den anderen Pluspunkte. König muss mehr Punkte kriegen als die Summe der anderen Figuren.

So sind in Kürze ein paar Grundlagen für Schachprogrammierung (für alle offenen Brettspiele ohne Würfel).

Grüße Bernd

Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3

K
50 Beiträge seit 2006
vor 16 Jahren

also ich hab nen paar freunden letztes semester geholfen bei nem Schachprojekt.
das ist gar nicht so einfach.
Viel spass bei der KI 🙂

Wir hatten auch n groesseres Feld als 8x8 um spielzuege zuberechnen. such mal mit google. ich glaub schach ist eins der programme die am meisten entwickelt wurden 🙂

O
778 Beiträge seit 2007
vor 16 Jahren

Warum nehmt ihr das Spielfeld als Grundlage für das Objektmodell, warum nicht die Spielfiguren? Die eignen sich doch viel besser! Eine Basisklasse Spielfigur, die sowas anbietet wie Position und KannDahin(position) und eine Spielerklasse mit meinetwegen einen Namen und eine Figuren Eigenschaft. Würd ich logischer finden...

O
778 Beiträge seit 2007
vor 16 Jahren

Man denkt doch beim Schach auch nicht, "Kann ich auf F4 mal die Dame stellen?" sondern eher "Kann ich die Dame mal auf F4 stellen?". Maßgeblich sind doch nicht die Felder, sondern die Figuren...

4.506 Beiträge seit 2004
vor 16 Jahren

Hallo onlinegurke,

Man denkt doch beim Schach auch nicht, "Kann ich auf F4 mal die Dame stellen?" sondern eher "Kann ich die Dame mal auf F4 stellen?". Maßgeblich sind doch nicht die Felder, sondern die Figuren...

Ich sage mal als passionierter Vereinsschachspieler (aber sicherlich kein Großmeister 😉:

JAIN

Vieles spielt sich tatsächlich auch so ab, ich entwickle einen Angriffsplan, und wie bringe ich meine Figuren in Position um diesen Plan nun zu verwirklichen. Ein Plan aus Sicht einer Figur ist meist zu kurz gedacht. Bei Eröffnungen geht es zum Beispiel auch darum das Zentrum oder eine Flanke unter Kontrolle zu bekommen und zwar mit allen Figuren, nicht nur mit einer Einzelnen.

Daher ja, ich kann pro Zug nur mit einer Figur ziehen (Rochade mal ausgenommen), aber nein, Pläne entwickle ich auf dem kompletten Spielfeld.

Grüße
Norman-Timo

Edit: Rechtschreibfehler

A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”

S
Soibat Themenstarter:in
13 Beiträge seit 2007
vor 16 Jahren

Vielen Dank für eure Antworten.
Ich habe es jetzt folgendermasen gelöst.
Auf der Form ein Panel dort drin wird ein mit einem Paint-Ereigniss ein Schachfeld gezeichnet. Für die Figuren habe ich mich für PictureBoxes entschieden.
Ich habe für jede Figur eine eigene Klasse entworfen.
Also Bauer_w, Bauer_s, Springer_w, Springer_s usw....Für das anfängliche Initalisieren der Figuren habe ich eine Klasse Figur.cs gemacht.
Eine Klasse heisst Schach.cs (zuerst Form1.cs) dort rufe ich die Methoden zum Beispiel aus Spiel.cs auf...
Dazu habe ich eine Klasse Spiel.cs
Falls mein Programm irgendjemand interessieren würde😉

http://soibat.so.funpic.de/Schach/Schachversuch3.zip


class Spiel
    {
        static public int anzzug;
        static public Panel meinpanel;
        static public object[,] obj_feldarray1 = new object[8, 8];
        static public object[,] obj_feldarray = new object[8, 8];
        static public void NeuesSpiel(Panel p)
        {
            //Spielfeld wird geleert
            foreach (object obj in obj_feldarray)
            {
                if (obj is Figur)
                {
                    (obj as Figur).pictureBox.Dispose();
                }
            }
            meinpanel = p;

            //Erzeugung Bauer
            for (int i = 0; i < 8; i++)
            {   
                //Weiss
                obj_feldarray[i, 6] = new Bauer_w(i, 6, meinpanel);
                //Schwarz
                obj_feldarray[i, 1] = new Bauer_s(i, 1, meinpanel);
            }
            
            //Erzeugung Springer
            //Weiss
            obj_feldarray[1, 7] = new Springer_w(1, 7, meinpanel);
            obj_feldarray[6, 7] = new Springer_w(6, 7, meinpanel);
            //Schwarz
            obj_feldarray[1, 0] = new Springer_s(1, 0, meinpanel);
            obj_feldarray[6, 0] = new Springer_s(6, 0, meinpanel);

            //Erzeugung Läufer
            //Weiss
            obj_feldarray[2, 7] = new Läufer_w(2, 7, meinpanel);
            obj_feldarray[5, 7] = new Läufer_w(5, 7, meinpanel);
            //Schwarz
            obj_feldarray[2, 0] = new Läufer_s(2, 0, meinpanel);
            obj_feldarray[5, 0] = new Läufer_s(5, 0, meinpanel);

            //Erzeugung Turm
            //Weiss
            obj_feldarray[0, 7] = new Turm_w(0, 7, meinpanel);
            obj_feldarray[7, 7] = new Turm_w(7, 7, meinpanel);
            //Schwarz
            obj_feldarray[0, 0] = new Turm_s(0, 0, meinpanel);
            obj_feldarray[7, 0] = new Turm_s(7, 0, meinpanel);

            //Erzeugung Dame
            //Weiss
            obj_feldarray[3, 7] = new Dame_w(3, 7, meinpanel);
            //Schwarz
            obj_feldarray[3, 0] = new Dame_s(3, 0, meinpanel);

            //Erzeugung König
            //Weiss
            obj_feldarray[4, 7] = new König_w(4, 7, meinpanel);
            //Schwarz
            obj_feldarray[4, 0] = new König_s(4, 0, meinpanel);
            


        }
        /// <summary>
        /// Erzeugung Spielfeld
        /// </summary>
        /// <param name="e"></param>
        static public void zeichneBrett(Graphics e)
        {  
            Brush b = new SolidBrush(Color.Black);
            Brush b2 = new SolidBrush(Color.FromArgb(139,69,19));
            //Andere Schachbrettfarbe
            //Brush b3 = new SolidBrush(Color.FromArgb(139, 101, 8));
            //Brush b4 = new SolidBrush(Color.FromArgb(150, 139, 71, 38));
            Pen p = new Pen(b, 1);
            for (int breite = 0; breite < 8; breite++)
            {
                for (int hoehe = 0; hoehe < 8; hoehe++)
                {
                    e.DrawRectangle(p, new Rectangle(breite * 50, hoehe * 50, 50, 50));
                    if (breite == 0 && hoehe == 7 || breite == 2 && hoehe == 7
                        || breite == 4 && hoehe == 7 || breite == 6 && hoehe == 7
                        || breite == 1 && hoehe == 6 || breite == 3 && hoehe == 6
                        || breite == 5 && hoehe == 6 || breite == 7 && hoehe == 6
                        || breite == 0 && hoehe == 5 || breite == 2 && hoehe == 5
                        || breite == 4 && hoehe == 5 || breite == 6 && hoehe == 5
                        || breite == 1 && hoehe == 4 || breite == 3 && hoehe == 4
                        || breite == 5 && hoehe == 4 || breite == 7 && hoehe == 4
                        || breite == 0 && hoehe == 3 || breite == 2 && hoehe == 3
                        || breite == 4 && hoehe == 3 || breite == 6 && hoehe == 3
                        || breite == 1 && hoehe == 2 || breite == 3 && hoehe == 2
                        || breite == 5 && hoehe == 2 || breite == 7 && hoehe == 2
                        || breite == 0 && hoehe == 1 || breite == 2 && hoehe == 1
                        || breite == 4 && hoehe == 1 || breite == 6 && hoehe == 1
                        || breite == 1 && hoehe == 0 || breite == 3 && hoehe == 0
                        || breite == 5 && hoehe == 0 || breite == 7 && hoehe == 0)
                    {
                        e.FillRectangle(b2, new Rectangle(breite * 50, hoehe * 50, 50, 50));
                    }
                }
            }
        }
        //Array taken wird erzeugt
        static private int[] taken = new int[] { -1, -1 };

        //Methode um x und y zu setzen...
        static private void SetFigur(int x, int y)
        {
            (obj_feldarray[taken[0], taken[1]] as Figur).pictureBox.BackColor = Color.Transparent;
            (obj_feldarray[taken[0], taken[1]] as Figur).SetPosition(x, y, taken[0], taken[1]);
            taken[0] = -1;
            anzzug++;
            Schach f1 = Application.OpenForms[0] as Schach;
            f1.label1.Text = anzzug.ToString();
        }

        static public void Click(object sender, EventArgs e)
        {
            //Wurde auf Figur oder Panel geklickt?
            if (sender is Panel)
            {
                //Falls -1 im ersten wurde keine Figur ausgewählt
                //Deshalb return, weil nichts bewegt werden kann
                if (taken[0] == -1)
                {
                    return;
                }

                //Diese Methode verschiebt die Figur...
                //Neue Punkte berechnen sich aus x und y deshalb /50
                SetFigur((e as MouseEventArgs).X / 50, (e as MouseEventArgs).Y / 50);
            }
            else
            {

                //Falls auf Figur geklickt wurde aber keine ausgewählt
                //Werden die Koordinaten bestummen und dann mit return abgebrochen
                if (taken[0] == -1)
                {
                    (sender as PictureBox).BackColor = Color.Red;
                    taken[0] = (sender as PictureBox).Location.X / 50;
                    taken[1] = (sender as PictureBox).Location.Y / 50;
                    return;
                }

                //Falls man auf die Figur geklickt hat die man gewählt hat
                //wird mit return abgebrochen
                if ((sender as PictureBox).Location == (obj_feldarray[taken[0], taken[1]] as Figur).pictureBox.Location)
                {
                    //(sender as PictureBox).BackColor = Color.Red;
                    return;
                }
                //Setzt die gewollte Position
                int zielX = (sender as PictureBox).Location.X / 50;
                int zielY = (sender as PictureBox).Location.Y / 50;
                //Löscht Figur aus alten Position
                (obj_feldarray[zielX, zielY] as Figur).pictureBox.Dispose();
                obj_feldarray[zielX, zielY] = null;
                //Setzt die Figur am gewählten Ort
                SetFigur(zielX, zielY);

                
                
            }

        }
    }

/////////////////////////////////////////////////////////////////////////////

    class Figur
    {
        public PictureBox pictureBox;

        public void SetPosition(int x, int y, int x_alt, int y_alt)
        {
            pictureBox.Location = new Point(x * 50, y * 50);
            Spiel.obj_feldarray[x, y] = Spiel.obj_feldarray[x_alt, y_alt];
            Spiel.obj_feldarray[x_alt, y_alt] = null;
        }

        public void Init(int x, int y, Control ziel)
        {
            pictureBox = new PictureBox();
            pictureBox.Click += new EventHandler(Spiel.Click);
            pictureBox.Size = new Size(50, 50);
            pictureBox.BackColor = Color.Transparent;
            pictureBox.Location = new Point(x * 50, y * 50);
            ziel.Controls.Add(pictureBox);
        }
    }

///////////////////////////////////////////////////////////////////////

    class Turm_w :Figur
    {
        public Turm_w(int x, int y, Control ziel)
        {
            Init(x, y, ziel);
            pictureBox.Image = Bitmap.FromFile("Turm_Weiss.gif");
        }

        public bool darfziehennach()
        {

        }
    }



Meine Frage ist jetzt, wie muss ich das machen, dass ich die Züge zum Beispiel des Turms einschränken kann? Momentan kann man mit allen Figuren überall hinfahren.
PS: Das Spiel wird am Schluss Mensch gegen Mensch gespielt ohne Computer...

Ich freue mich schon auf eure Antworten

309 Beiträge seit 2007
vor 16 Jahren

Du kennst die Start-Koordinate und die gewünschte Zielkoordinate


Einfach für prüfen, ob die Zielkoordinate mit einem erlaubten Zug erreicht werden kann und ob auf dem Weg eine andere Figur "im Weg" steht.

Mfg Hajoseb

**"Zufall ist das Pseudonym Gottes, wenn er nicht selbst unterschreiben will.” **
Anatole France

S
Soibat Themenstarter:in
13 Beiträge seit 2007
vor 16 Jahren

wie muss ich jetzt das genau machen? Turm(startx,starty) = obj_feldarray[zielx+1, ziely}?

309 Beiträge seit 2007
vor 16 Jahren

Ich würde (ohne dein Konzept genauer zu kennen) deinen Spielfigur-Objekten das gewünschte Ziel übermitteln


TurmW1.MoveTo(x,y)

und bekomme ein True zurück, wenn der Zug erfolgreich war oder ein False, wenn der Zug nicht ausgeführt werden konnt.

In der MoveTo-Methode prüfst du halt, ob die Zielkoordinaten vom momentanen Standort aus erreicht werden können.

Beim Turm muss z.B. entweder x oder y mit den momentanen xPosition bzw. yPosition überewinstimmen, dann kann man alle anderen Figuren (oder ein Feld) abfragen, ob eine andere Figur im Weg steht.

Mfg Hajoseb

**"Zufall ist das Pseudonym Gottes, wenn er nicht selbst unterschreiben will.” **
Anatole France

S
Soibat Themenstarter:in
13 Beiträge seit 2007
vor 16 Jahren

so mittlerweile können meine Figuren beinahe korrekt ziehen...Mit Ausnahme des Bauern und dass die Figuren einfach über die anderen Figuren fahren 😁

Jetzt muss noch das Schachmatt, die Rochade, das En-passen und das Remis hin...

Ich werde bald wieder berichten...

309 Beiträge seit 2007
vor 16 Jahren

Original von Soibat
so mittlerweile können meine Figuren beinahe korrekt ziehen...Mit Ausnahme des Bauern und dass die Figuren einfach über die anderen Figuren fahren 😁

Jetzt muss noch das Schachmatt, die Rochade, das En-passen und das Remis hin...

Ich werde bald wieder berichten...

Das dürfte dir aber nach meinem Vorschlag im letzten Post nicht passieren.

Prüfst du den Weg nicht ab ???

Mfg Hajoseb

**"Zufall ist das Pseudonym Gottes, wenn er nicht selbst unterschreiben will.” **
Anatole France

S
Soibat Themenstarter:in
13 Beiträge seit 2007
vor 16 Jahren

ja aber da ich nur die startkoordinaten und endkoordinaten kenne ist das nicht einfach.
ich müsste dann endkoordinaten - startkoordinaten.
also z.b. beim turm startkoordinaten[2,5] endkoordinaten [6,5]

6-2 = 4

dann müsste ich 4 prüfungen machen, oder wie?

4.506 Beiträge seit 2004
vor 16 Jahren

Hallo Soibat,

ja das ist richtig. Du solltest natürlich jedes Feld prüfen, mit Ausnahme des Springers, da reicht dann die Zielkoordinate.

Ebenso kann man ja auch überprüfen, ob ein Zugfehler vorliegt. Ein Turm kann natürlich nicht diagonal fahren, also wäre hier die Überprüfung, ob die X-Startkoordinate mit der X-Endkoordinate oder Y-Startkoordinate mit Y-Endkoordinate übereinstimmt...

Grüße
Norman-Timo

A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”

J
3 Beiträge seit 2007
vor 16 Jahren

Hast Du schon mal etwas von einem Zuggenerator gehört? Hier wird für jede Brettstellung eine Liste mit allen möglichen und natürlich regelkonformen Zügen erstellt. So läßt sich ganz einfach überprüfen, ob der ausgeführte Zug möglich ist. Der Zuggenerator basiert auf einer definierten Zugliste für jede Figur wie zBsp. König 1 Feld in jede Richtung (8 Züge), Turm 1 Feld waagerecht oder senkrecht (4 Zugrichtungen) und mehrschrittig (jeweils in dieser Richtung 1 Feld weiter bis zu einer eigenen Figur=vorher Stop oder gegnerischen Figur=schlagen, dann Stop).

  1. Man speichert also für jede Figur(B,S,L,T,K,D) diese Zugliste, einschrittig oder mehrschrittig.
  2. Liest die aktuelle Brettstellung
  3. generiert alle Züge in einer Zugliste
  4. Zugauswahl nach Stellungsbewertung

Da nur Menschen spielen, braucht das Programm ja nur Züge auf ihre Regelwidrigkeit prüfen. Soll nun noch Matt oder Patt erkannt werden, ist eine Stellungsbewertung nötig.

Erfahrung ist eine nützliche Sache.
Leider macht man sie immer erst kurz nachdem man sie brauchte...

S
Soibat Themenstarter:in
13 Beiträge seit 2007
vor 16 Jahren

So die Figuren fahren jetzt alle zu 100% korrekt.
Das Schach wird bei einigen auch schon erkannt!
Jetzt habe ich noch das En-Passen und das Schachmatt zu erledigen 😉

Aber das wird schon noch
Ich möchte euch nochmals Danken, für eure Hilfsbereitschaft hier im Forum während des letzten Monats.

Gruss Soibat

PS: Falls jemand mein Schachprogramm möchte, soll er sich bei mir melden.