Schach-Programm (Anfangs-tipps)



  • Mechanics schrieb:

    Hacker schrieb:

    Ich spiele ziemlich gut Schach.

    Wie gut? Wie hoch ist deine ELO bzw. DWZ?

    Was erwartest Du denn bei jemandem der geschützte und nicht geschützte Figuren frisst? 😉



  • Mechanics schrieb:

    Hacker schrieb:

    Ich spiele ziemlich gut Schach.

    Wie gut? Wie hoch ist deine ELO bzw. DWZ?

    Ich spiele nicht im Verein.

    Edit: Nun, im Vergleich zu den Top 200. Deutschen spiele ich natürlich nicht gut Schach. Aber gut genug, um (seit ca. 1 Jahr durchgehend) bester in der Schach-AG meiner Schule zu sein (was was heißt, denn dann bin ich bester der Schule).



  • Jester schrieb:

    Mechanics schrieb:

    Hacker schrieb:

    Ich spiele ziemlich gut Schach.

    Wie gut? Wie hoch ist deine ELO bzw. DWZ?

    Was erwartest Du denn bei jemandem der geschützte und nicht geschützte Figuren frisst? 😉

    Tu ich nicht (?)



  • Mario Sandler schrieb:

    http://de.wikipedia.org/wiki/Schach#Grundbegriffe_und_Spielziel

    In der Schachnotation wird immer eine weiße und eine anschließende schwarze Figurenbewegung zusammen nummeriert und als Zug bezeichnet.

    Mit deinen 3 Zügen im voraus bist du dann bei 60^6 = 50 Milliarden.
    Die Abschätzung passt also schon 😉

    Bin schon etwas wirr im Kopf. Danke. 🤡



  • Hacker schrieb:

    Mechanics schrieb:

    Hacker schrieb:

    Ich spiele ziemlich gut Schach.

    Wie gut? Wie hoch ist deine ELO bzw. DWZ?

    Ich spiele nicht im Verein.

    Edit: Nun, im Vergleich zu den Top 200. Deutschen spiele ich natürlich nicht gut Schach. Aber gut genug, um (seit ca. 1 Jahr durchgehend) bester in der Schach-AG meiner Schule zu sein (was was heißt, denn dann bin ich bester der Schule).

    Das kann ich schlecht einschätzen. Kann ja durchaus sein, dass alle anderen total schlecht spielen. Ich bin mir ziemlich sicher, dass ich in der Schule damals auch alle locker geschlagen hätte, bis auf einen. Hast du mal auf größeren Portalen im Internet gespielt, wo man die Spielstärke halbwegs einschätzen kann?



  • Mechanics schrieb:

    Hacker schrieb:

    Mechanics schrieb:

    Hacker schrieb:

    Ich spiele ziemlich gut Schach.

    Wie gut? Wie hoch ist deine ELO bzw. DWZ?

    Ich spiele nicht im Verein.

    Edit: Nun, im Vergleich zu den Top 200. Deutschen spiele ich natürlich nicht gut Schach. Aber gut genug, um (seit ca. 1 Jahr durchgehend) bester in der Schach-AG meiner Schule zu sein (was was heißt, denn dann bin ich bester der Schule).

    Das kann ich schlecht einschätzen. Kann ja durchaus sein, dass alle anderen total schlecht spielen. Ich bin mir ziemlich sicher, dass ich in der Schule damals auch alle locker geschlagen hätte, bis auf einen. Hast du mal auf größeren Portalen im Internet gespielt, wo man die Spielstärke halbwegs einschätzen kann?

    Nope. Empfehl mal eins. Oder lass mal zusammen spielen.



  • rofl, bester in der Schule. 😃
    Kannst du hier den Hard mode schlagen? http://www.chess.com/play/computer.html



  • Hacker schrieb:

    Nope. Empfehl mal eins. Oder lass mal zusammen spielen.

    Naja, der größte kostenlose ist wohl FICS, oder zumindest kenne ich keine größeren.
    Nicht dass du jetzt meinst, ich würde gut spielen... Ich finde eher, dass ich total schlecht spiele. Keine Chance gegen Vereinsspieler.



  • cooky451 schrieb:

    rofl, bester in der Schule. 😃
    Kannst du hier den Hard mode schlagen? http://www.chess.com/play/computer.html

    Ja, ich dich auch rofl. Und: Ich bin weit gekommen... nur leider hat er mir eine völlig unerwartete Gabel gestellt.



  • Wenn hier schon ein wenig abgedriftet wird, dann möchte ich noch die Seite chesstempo.com in den Raum werfen, bei der man sehr gut seine taktischen Fähigkeiten trainieren kann und je nach Spielstärke entsprechend schwere/leichte AUfgaben gestellt bekommt.



  • Ganz nette Seite, ja.



  • Ach danke and _cu für die Seite! Echt ziemlich gut.



  • SeppJ schrieb:

    Viel zu konkrete Planung bei viel zu vagem Konzept. Definier doch erst einmal genau, was deine Klassen sind und was sie können, bevor du dir Gedanken um die technische Umsetzung vonwegen Kindklassenzeigern, Nullpointern & Co. machst.

    Kacke. Wer nicht hören will muss fühlen. Hab grad ~800 Zeilen Code gelöscht, war alles Crap-Code... Bin gerade bei Heft und Stift. 😃



  • Hacker schrieb:

    SeppJ schrieb:

    Viel zu konkrete Planung bei viel zu vagem Konzept. Definier doch erst einmal genau, was deine Klassen sind und was sie können, bevor du dir Gedanken um die technische Umsetzung vonwegen Kindklassenzeigern, Nullpointern & Co. machst.

    Kacke. Wer nicht hören will muss fühlen. Hab grad ~800 Zeilen Code gelöscht, war alles Crap-Code... Bin gerade bei Heft und Stift. 😃

    durch müllcode lernt man am meisten. die fehler wären dir doch auf stift und papier garnicht erst aufgefallen.



  • Tipp: Das Schachbrett ist nicht die zentrale Entität, um die sich die OO-Modellierung drehen sollte. Imho kann die Klasse des Bretts sehr klein und dumm sein und evtl sogar nur ein Array der Figuren wegkapseln sowie kleine Hilfsfunktionen anbieten (z.B: bool Inside(x,y)).

    Andere Dinge sind wichtiger und stellen die zentralen Klassen dar: Figuren, Züge und dazu gekoppelt eine History (für das Durchprobieren der KI).



  • µ schrieb:

    Tipp: Das Schachbrett ist nicht die zentrale Entität, um die sich die OO-Modellierung drehen sollte. Imho kann die Klasse des Bretts sehr klein und dumm sein und evtl sogar nur ein Array der Figuren wegkapseln sowie kleine Hilfsfunktionen anbieten (z.B: bool Inside(x,y)).

    Andere Dinge sind wichtiger und stellen die zentralen Klassen dar: Figuren, Züge und dazu gekoppelt eine History (für das Durchprobieren der KI).

    KA wie du das meinst. Aber meine (Board-)Klasse wird ziemlich groß (so sieht der Header bisher aus):

    #ifndef BOARD_HXX_INCLUDED
    #define BOARD_HXX_INCLUDED
    
    #include "coordinate.hxx"
    #include <array>
    
    namespace chess
    {
          class figure;
    
          class Board
          {
                struct ChessBoardError;
    
                std::array<std::array<figure*, 8>, 8> m_figureArray;
    
                std::vector<figure*> m_blackFigures,
                                     m_blackEatenFigures,
                                     m_whiteFigures,
                                     m_whiteEatenFigures;
    
                size_t m_amountOfMoves;
    
          public:
    
                Board();
    
                void move(coordinate, coordinate);
                static bool check(coordinate, bool = true);
    
                std::array<figure*, 8> operator [](size_t);
                std::array<figure*, 8> at(size_t);
    
                std::array<figure*, 8> const operator [](size_t) const;
                std::array<figure*, 8> const at(size_t) const;
    
                figure* at(coordinate);
                figure const* at(coordinate) const;
    
                void add(coordinate, figure*);
    
                bool 
    
                size_t amountOfMoves();
          };
    }
    
    #endif // BOARD_HXX_INCLUDED
    


  • Wenn die Schachklasse für "moves" verantwortlich ist, reicht ein std::array<std::array<figure*, 8>, 8> nicht aus, damit die KI Züge durchprobieren kann. (Die KI muss Züge beider Farben mehrere Schritte weit simulieren und zu jederzeit rückgängig machen können)
    Wie willst Du damit einen Testzug realisieren? Es muss eine Art History geben, einen Stack oder so, der während dem abwechselnden ziehen der KI auf und abgebaut wird.
    Eine andere Möglichkeit wäre, den Figuren selbst eine History zu geben. Aber soll sich eine Figur wirklich merken, welche anderen Figuren sie während dem KI-Lauf geschlagen hat? Klingt nach zu vielen Abhängigkeiten.

    Jetzt kannst Du die interne Repräsentation des Bretts aufbohren. Z.b. durch ein 2D-Array aus Stacks. Dann ist das Brett sowohl für Züge als auch für ein komplexes internes Objekt verantwortlich. Früher oder später kommt grafische Ausgabe dazu. Dann kommt noch X dazu. Dann noch Y. Und am Ende hast Du eine Monsterklasse.

    Eine imho bessere Möglichkeit: Halte die Board-Klasse extrem schlank. Lagere alles aus was nur geht. Abstrahiere das Konzept "Zug" bzw. "Move" als eigene Klasse. Abstrahiere die "History" als Klasse die intern einen Move-Stack vorhält.

    Mal ein Beispiel aus einem anderen Bereich: Du hast Bitmaps und Bildverarbeitungsalgorithmen. Der naheliegende Ansatz ist eine Bitmapklasse stetig zu erweitern um neue Bildfilter und Algorithmen. Ganz schnell hast Du eine Klasse mit 5000 Zeilen und es dämmert, dass da etwas falsch läuft. Tatsächlich ist ein Bitmap nur ein Datenobjekt mit einfachsten Methoden (bzw. sollte es sein). Alle Algorithmen sind in einer externen Klassenhierarchie und operieren auf Bildern. Das Bitmap weiß nichtmal dass es sowas wie Algorithmen gibt.

    Beim Schach ist es nicht soooo wichtig, weil die Anzahl der Operationen und beteiligten Entitäten sehr überschaubar sind. Aber Du hast angedeutet, ein sauberes Design zu wollen. Deshalb diese Anmerkungen.



  • µ schrieb:

    Wenn die Schachklasse für "moves" verantwortlich ist, reicht ein std::array<std::array<figure*, 8>, 8> nicht aus, damit die KI Züge durchprobieren kann. (Die KI muss Züge beider Farben mehrere Schritte weit simulieren und zu jederzeit rückgängig machen können)
    Wie willst Du damit einen Testzug realisieren? Es muss eine Art History geben, einen Stack oder so, der während dem abwechselnden ziehen der KI auf und abgebaut wird.

    Ich möchte die Board-Klasse so lassen wie sie ist. Ich finde, mehr Methoden als jetzt kommen eh nicht hinzu(!), und search/evaluation Funktionen sind global (bzw. im chess-Namespace). Aber deine Idee für 'ne History Hast du mir Gegeben: Mit einer Klasse Move und einem std::stack (sowie noch anderen Klassen History & CO. (werd ich noch planen))dürfts was werden...
    Was die graphische Oberfläche angeht: Hmm. Ich habe mich entschieden, 3D zu benutzen (mit Irrlicht, dass ich momentan "entdeckt" habe). Dort kommt noch eine Klasse (oder mehr) hinzu. Das mit dem Bewegen und so hab ich bereits alles geplant.



  • Kennst du eigentlich die Seite?

    http://www.frayn.net/beowulf/theory.html



  • Hacker schrieb:

    Was die graphische Oberfläche angeht

    Würde ich an Deiner Stelle vorerst drauf verzichten, bis das Ding in der Console läuft.


Anmelden zum Antworten