Hallo, ich würde gerne einen Schachcomputer bauen. So wie aus den guten alten zeiten. Ein Holzbrett mit 64 Dioden und einen Prozessor, der alles im Innern steuert. Ich fange bei "Null" an. Könnt Ihr mir sagen wie ich so ein Projekt strukuriert "aufziehen" kann? Wie und wo komme ich an Entwicklungssoftware und wie kommt die Software auf meine Prozessoren? Über Infos dazu würde ich mich sehr freuen. gruß Duracell
Hallo, nachdem du schreibst, das du bei "Null" anfangen musst, beziehe ich das auch mal auf deine Erfahrung in der Programmierung eines Spiels. Falls dem so ist, kann ich dir nur raten, versuch dich erst mal an ein paar einfachen Spielen. Du wirst sehr schnell merken, wie komplex so etwas sein kann. Ich glaube wenn du tatsächlich in der Lage bist ein halbwegs vernünftiges Schachspiel zu entwicklen, dass die Umsetzung in Hardware dann kein großes Problem für dich darstellt. Solltest du bisher weder Erfahrung in der Spieleentwicklung haben, als auch noch keine Erfahrung mit Mikrocontrollern haben, so würde ich dir z.B. die Umsetzung von Tic-Tac-Toe auf einer 3x3 großen Matrix aus Duo-Led und Tastern empfehlen.
Kuemmer dich zuerst mal um die Sensorik (Detektion der Spielzuege des menschlichen Spielers) und die Anzeige der Computer-Spielzuege. Dass allein kann man mit nem kleinen uC wie dem AVR erledigen. Je nach verwendeter Technologie (ich hab mich mal mit Reed-Relais im Board und kleinen Permanent-Magneten in den Figuren herumgeschlagen) kann das schon recht komplex werden. Parallel entwickelst du die Spiel-Software am PC. Spaetestens jetzt merkst du, dass du hier eine Menge Grips einbauen musst, wenn die Spielstaerke nicht auf dem Niveau von z.B. Battle-Chess stecken bleiben soll. Hast du das Schach-Programm mit dem GCC geschrieben, kannst du es mit dem AVR-GCC uebersetzen um den Speicherbedarf zu ermittlen. Ich vermute aber, dass nichtmal der ATMega128 ausreicht. Alternativ koennte man das Board an einen PC anschliessen und ein existierendes Schach-Programm pimpen.
@ irgwer @ The Daz ja, mit null meine ich leider "Null". Anfangen würde ich gerne mit der Programmierung! Was ist GCC? Wie und wo bekomme ich Entwicklungssoftware her? Sind diese vom Prozessor abhängig, oder ist das egal? Ja, sicherlich sollte schon am Ende eine hohe Spielstärke rauskommen. Auch wenn das alles Jahre dauern wird - der Wille ist da! Liebe Grüße Duracell
GCC ist ein freier C/C++ Compiler den man ueberall fuer alle Betriebssysteme herunterladen kann.
Hallo Duracell, 'auch wenn das alles Jahre dauern wird' hört sich schon ein wenig masochistisch an. Du mußt dir auch manchmal ein Erfolgserlebnis gönnen. Nicht's gegen hohe Ziele, aber die Chance das du es irgendwann hinschmeisst ist bei so einem Projekt schon recht groß. Ich kann dir wirklich nur raten erst mal einen kleinen Schritt zu machen, um überhaupt abschätzen zu können, auf was du dich da einlassen willst.
Such mal nach "KIM-1 Microchess" das war das erste kleine Schachprogramm für den 6502-Prozessor, nicht sehr schlau, aber dafür nur 1 kByte groß. Der Quelltext ist veröffentlicht und sicher irgendwo zu finden, ich habe mir damals das ganze auf meinen AIM-65 umgeschrieben und assembliert.
Sicherlich ist das Ziel sehr hoch, aber ich kann nur durch Probieren sehen, ob ich das wirklich durchziehe. Fangen wir mal mit c/c++ GCC an! Also was benötige ich C oder C++ und ist der GCC die Schnittstelle zum Prozessor oder das Entwicklungsprogramm? Gruß Duracell
Du brauchst den Compiler und generierst auf einem PC damit eine .hex Datei. Diese Datei transferierst du dann mit einem weiteren Programm wie z.B. avrdude zu einem Programmer (eine kleine Box am RS232 oder Printer-Port), der die Daten dann in den uC schreibt. Zum experimentieren solltest du dir ein entsprechendes Board besorgen (z.B. Atmel STK500 oder sowas). Diese boards schliesst man an den PC per Kabel an, steckt den uC-Chip in den entsprechende Sockel, programmiert den uC und kann mit den auf dem Board vorhandenen Anschluessen und Dingelchen (Taster, LEDs, etc.) seine ersten Gehversuche in der Thematik machen.
@The Daz hmm, das hört sich gut an - wo bekomme ich solche Boards und diese Box etc.? Damit könnte ich wirklich mal anfangen :-) Gruß Duracell
Atmel STK500 wäre wirklich okay? Oder doch besser etwas anderes? Entwicklungssoftware ist da ja auch dabei - dannbräuchte ich nicht weiteres oder? :-)
Ich habs und bin zufrieden damit, mir fehlt allerdings der Vergleich. Wenn du SMD uCs von Atmel proggen willst, brauchst du noch einen der STK501 Adapter, das STK500 kann nur dir DIP Typen brennen. Bei meinem STK lag ein AT90S8515 und ein ATMega16 bei. Wenn du aber die eher komplexen Dinger auf dem uC abziehen willst und folglich viel Speicher brauchst, dann kommst du bei Atmel an den SMD Typen nicht vorbei und dazu brauchst du im Falle des STK noch den erwaehnten Adapter was dann in der Summe auf knapp 200 Euro kommt. Wenn du dann feststellst, dass ein AVR fuer dein Projekt nicht ausreicht ist ein Haufen Geld futsch.
Ach ja, das beiliegende AVR Studio enthaelt alle noetige Software, ausser einem C-Compiler. Den ACR-GCC kannst du aber von dieser Site gratis runterladen und ins AVR-Studio integrieren. Damit hast du dann alles was man zum Anfangen braucht.
Vielleicht ist zu empfehlen, dass du dir erstmal ein Billig-Schachengine unter C/C++ bastelst. Damit ist man auch schon eine Zeit beschäftigt - und wenn man etwas Erfahrung hat, baut man sich eine solche Engine an einem Wochenende :-) (die natürlich nicht besonder gut ist ^^) Als weiteren Tipp, könnte ich dir empfehlen die Engine konsolenbasiert zu basteln (also ohne Klicki-Bunti :-), dann kann sie nämlich auch von WinBoard/XBoard verwendet werden und Online bei www.freechess.org spielen. Und wenn du dann rausgefunden hast, wie die Engine tickt - was da alles berücksichtigt wird bei guten Engines ist der absolute Wahnsinn - dann würde ich mir Gedanken darüber machen, wie man das ganze in VHDL gießen kann. Mfg Thomas Pototschnig
Ich glaube, auch nur eine halbwegs funktionierende Chessengine zu entwickeln, ist alles andere als einfach. Ich habe über sowas auch schonmal nachgedacht, würde aber auf bestehene Software zurückgreifen. GNUchess z.B. ist Open Source und liesse sich dafür zweckentfremden. Also die Chessengine würde dann auf 'nem kleinen PC laufen, die ganze Sensorik würde ich mit einem Atmel machen. Naja, das ganze erscheint mir so, als wolle jemand, der vom Maurerhandwerk keine Ahnung hat, ein Hochhaus bauen. :)
Wir sind zwar hier ein Hardware Forum aber denoch empfehle ich dir folgendes: 1.) vergiß alle Hardware und lerne erstmal programmieren 2.) PC haste schon, entscheide dich für eine Programmiersprache 3.) programmiere dann erstmal mehrer beliebige Softwares für den PC, die nicht mehr 500 Zeilen benötigen. 4.) programmiere dann erst deine Schach Software die auf dem PC läuft 5.) so schaltest du alle Fehler aus die dann mit Hardware zu tuen haben, und das können für einen Anfänger sehr sehr viele sein. Selbst ein LCD per AVR anzusteuern ohne vorher programmiert zu haben halte ich persönlich nicht in 3 Monaten machbar. (vorrausgesetzt man hat wirklich alles selber gemacht und nicht den Source zusammengechustert aus dem WEB). 6.) wenn deine PC Schach Software dann richtig gut läuft portiere sie in Hardware. Mein, im Vergleich zu professionellen Programmen, sehr bescheidenes Schachprogram für den PC benötigt allein für die Schachengine über 100.000 Zeilen Source !! Da ist die Datenbank der Eröffnungsbibliothek noch nicht eingerechnet. Ok, das Ding spielt "besser" als ich aber längst noch nicht so gut wie ein 100 Euro Schachgame. Insgesamt werde ich wohl so über die Jahre mindestens 11 Monate dran gearbeitet haben, und ehrlich gesagt habe ich die Lust daran verloren. Also wirklich kein leichtes Ziel und schongarnicht eine Aufgabe für einen Anfänger. Was aber eben NICHT heissen soll das DU es nicht versuchen solltest, denn nur mit der Aufgabe wächst der Mensch ;) Gruß Hagen
[OT-Mode-On] >Mein, im Vergleich zu professionellen Programmen, sehr bescheidenes >Schachprogram für den PC benötigt allein für die Schachengine über >100.000 Zeilen Source !! Hast du die Engine mal bei freechess.org spielen lassen? Oder kannst du ungefähr einschätzen wieviele Elo-Punkt sie hat? Sowas interessiert mich immer :-) [OT-Mode-Off] ACK :-)
@ Hagen ja, bestimmt hast du Recht! ich werde erstmal mit C++ aus Grundstein anfangen. Dann werde ich ja sehen, wie weit mich meine Motivation bringt. Aber ich würde auch gerne wissen wie stark deine Engine spielt??? Könnte man dann diese in irgendeiner Form in einer Prozessor hauen und einen Schachcomputer daraus machen, oder? Aber erstmal C++..... Danke Duracell
@Thomas: >>Hast du die Engine mal bei freechess.org spielen lassen? Nein. >>Oder kannst du ungefähr einschätzen wieviele Elo-Punkt sie hat? keine Ahnung aber ich schätze nicht mehr als 1700, Hinzukommt das ich an dem Ding schon mehrere Jahre nichts mehr gemacht habe und Schach längst nicht mehr mein Lieblingsspiel ist. Gruß Hagen
@ hagen Du hast aber hoffentlich nicht alle der 100.000 Zeilen eigenhändig geschrieben, oder? Für einen Buchtipp über C++ würde ich mich freuen! :-) Gruß Duracell
@Duracell Wenn Du nicht nur PC sondern auch uC proggen möchtest wäre wohl C ohne ++ ein guter Einstieg in die Compilerwelt. Die C-Anfänger-Bücher, welche ich bisher sah, waren recht unterschiedlich und keines erschien mir optimal. Viele online verfügbare Sachen erschienen mir gleichwertig. such mal nach ANSI-C (das ist eine genormte Syntax, welche verbreitet ist und die wohl noch lange geben wird) da gibt´s einiges auch für Anfänger.
Doch schon - "++" unterstützt aber noch objektorientierte Programmierung, die man meistens bei Controllern nicht benötigt. C ist erstmal als Grundlage zu empfehlen und dann kann man sich das ++ mal ankucken.
> @ hagen > Du hast aber hoffentlich nicht alle der 100.000 Zeilen eigenhändig > geschrieben, oder? Ohne jetzt 'hagen' oder seine Schach-Engine zu kennen: Klar hat er! Und 100.000 Zeilen sind fuer Profis immer noch ein 'kleines' Projekt. Um eine gute Schach-Engine zu schreiben muss man aber besser als, ich wuerde mal sagen, 80% aller Profi-Programmierer sein. Ich will Dich nicht entmutigen, aber Schach ist ein Ziel dass Du nicht unter 3 bis 4 Jahren Lernzeit beginnen kannst. Wenn Du fleissig bist. Im ersten 1/2 Jahr stehen fuer Dich mal die Einsteiger- Tuecken der Programmierung und der Sprache auf dem Program. Danach geht es in die dynamische Speicherverwaltung hinein. Bis Du mit der auf Du-und-Du bist vergeht locker noch mal ein halbes Jahr. Danach kennst Du glundlegende Algorithmen und beherrscht so ca. 80% Deiner Zielsprache aus dem FF. In diesem Jahr wirst Du wahrscheinlich schon mal die ersten kleinen Spiele programmiert haben: zb. Tic-Tac-Toe, Nimm, 17+4, ... (Wir sprechen immer noch von Programmen in der Groessenordnung von max ca. 500 bis vielleicht 1000 Zeilen) Im zweiten Jahr lernst Du dann, Deinen Kraut-und-Rueben Code zu organisieren, denn die Programme werden mit der Zeit groesser. Du faengst vielleicht an eine graphische Oberflaeche zu programmieren. Du gibst die ersten Programme an Freunde weiter und lernst sehr schnell, dass Theorie und Praxis 2 verschiedene Paar Schuhe sind. Was in der Theorie voellig vernachlaessigt wird, Benutzereingaben idiotensicher zu machen, wird jetzt immer wichtiger und Du entwickelst dafuer Techniken oder studierst sie bei anderen Leuten. Ueberhaupt: das Thema 'fremden Code analysieren' wird jetzt immer wichtiger. Zusammen mit ausgefeilteren Debug-Techniken macht das einen Loewenanteil aus. Irgendwann erinnerst Du Dich daran, dass Du ja eigentlich Mikroprozessoren programmieren wolltest, d.h. ohne die Hilfe eines Betriebssystems. Da steigst Du jetzt ein und lernst sehr schnell, dass vieles was am PC noch einfach ging, ploetzlich gar nicht mehr so simpel ist. Das naechste Problem das auf Dich wartet, ist das Problem der Optimierung. Um ein Schachprogramm zu schreiben muss man schon sehr genau seinen Compiler kennen bzw in ausgewaehlten Teilen auf Assembler ausweichen, sonst kriegt man Laufzeiten jenseits von gut und boese. Dann kommt die Spiele-Theorie. Studium wie andere Leute so was aufgebaut haben. Welche Tricks gibt es um den Suchbaum zu beschneiden und was ist ueberhaupt ein Suchbaum und wie baut man ihn auf? Welche Bewertungsfunktionen sind sinnvoll? Wie implementiert man die im Suchbaum? Tja. Und so vergehen die Jahre. Bis Du dann tatsaechlich ein funktionierendes Programm in einem eigenstaendigen Brett hast und feststellst, dass jedes Wald- und Wiesen Fertiggeraet um 55 Euro von Aldi Dein Program mit links schlaegt. Wie gesagt, ich will Dich nicht entmutigen. Aber Du solltest der Realitaet ins Auge schauen. Sich selbst grosse Ziele zu stecken ist eine Sache, aber sie muessen halbwegs realistisch sein.
> @ hagen > Du hast aber hoffentlich nicht alle der 100.000 Zeilen eigenhändig > geschrieben, oder? Ich muß leider Karl Heinz Recht geben, ist alles selber geschrieben und es ist tatsächlich so das es ein überschaubares Projekt darstellt. Das was ein Projekt so unübersichtlich macht sind drei Punkte 1.) schlechter Programmierstil und keine Disziplin, weil keine Lust 2.) Teamwork ;) 3.) die Komplexität der verwendeten Algorithmen Gerade der 3. Punkt ist es aber der Schach so saumäßig kompliziert macht. Immerhin es haben viele Mathematiker, die sich mit der Spieletheorie beschäfftigen, unmengen an Dissertationen etc.pp. darüber geschrieben. Alleine die Selektion welche dieser propagierten Algorithmen in das eigene Projekt passt, bzw. welcher der Algos auch im Realen wirklich was bringt, kann eine Menge an Zeit kosten. In meiner Engine zb. hatte ich versucht mit neuronalen Netzen die Bewertungsfunktion der Stellung zu bechleunigen, bzw. intelligenter und lernfähiger zu machen. Funktioniert aber nicht, bzw. längst nicht so gut wie die normaleren Standardalgorithmen. Denn so ein NN macht nur Sinn wenn man die Trainingsphase auch automatisieren kann und nicht erst 1 Million Spiele als Mensch gegen die Engine spielen muß. Nur gerade das war das Problem, denn zwei dumme NNs gegeneinander spielen zu lassen wird diesen eben nicht Intelligenz einhauchen. Auch 1000 solcher neuronalen Netze gegeneinander spielen zu lassen bringt nichts ausser einer Generation aus dummen Computer Spielern. In fakt, bisher gibt es noch keine Computer Methode um zielorientierte Kreativität zu simulieren ! Und das war mein damaliger "Denkfehler" über den ich heute nur noch lächeln kann. Um so erstaunlicher ist es wie die Natur dieses Evolutionsziel erreichen konnte. Immerhin meine geschätzen 1700 ELO Punkte der Spielstärke sind im Vergleich zu einer guten Engine echt demotivierend gering. Deshalb hab ich eben auch schon Jahre nichts mehr daran gemacht. Fazit: Setze dir das persönliche Ziel eine super gute Schach Engine zu coden, aber gehe schrittweise Step by Step vor. Du kannst nicht programmieren ? dann lerne erstmal das. Du verstehst die höhere Mathematik nicht ? dann studiere sie. Du hast keine Elektronik Kenntnisse ? dann lerne das. Du kennst dich nicht mit komplizierten Algorithmen und Spieletheorie aus ? dann lerne es. Wenn du dann das alles perfekt beherrscht dann wirst du auch in der Lage sein, mit entsprechend genügend Zeit, das beste Schachprogram zu coden. Nur soviel, ICH kann es NICHT ! Gruß Hagen
Wenn du dich damit anfreunden kannst, dass du nicht den besten Schachcomputer bauen kannst, aber zumindest einen, der Schach spielen kann, dann such dir am besten im Internet eine freie Schachengine, die in C geschrieben wurde. Ich hatte mal eine für meinen TI92 compiliert. Der TI92 hat einen MC68000 mit ca.10MHz und 128kb RAM. Es sollte also kein Problem sein, sowas auch auf einem ATMega 128 vielleicht mit extra RAM zum laufen zu bringen. Die Spielstärke war im übrigen unterirdisch schlecht. Ich als Schachlaie hab fast immer gewonnen. Also erwarte nicht zu viel.
Nun ja, vor Jahren habe ich ein Schach-Programm unter DOS ausprobiert. Es simulierte die Spielart "attackiere wenn möglich", was einen recht derben psychologischen Effekt hatte. Das Spiel zeichnete das Schachbrett in CGA-Auflösung (320x200) und war nur 10kb groß. Ich denke, ein Mega128 würde allenfalls hinhalten, insbesondere wenn man die Züge textuell ausgibt. mfG, ejd
Der OP hatte doch überhaupt nichts davon gesagt, dass er die weltstärkste Engine basteln will. Meine kleine Engine, die mit <1500 Zeilen auskommt und online bei Fics gespielt hat, hat's immerhin auf 1500 Elo gebracht. Die 1500 Elo hab ich schon hingekriegt indem ich als Bewertungsfunktion einfach nur das Material gewichtet und zusammengezählt habe. Die Engine hatte zwar keinen Blick für Strukturen, aber das Result hat mich trotzdem überrascht :-) Aber ein ganz großes Problem: Je mehr Brute-Force man verwendet - also weniger intelligente Stellungsbewertungen und Strategieen - desto schwieriger wird es so eine Engine auf einen Controller zu portieren.
Hmm, die letzten Beiträge haben mich nun doch etwas demotiviert. Ich glaube kaum, dass ich eine solche Masse an Informationen noch in mich reinkloppen kann?! Sicherlich ist es bestimmt ein sehr schwieriges Unterfangen, aber Ziele muss ein Mensch haben. ich werde es auch in Angriff nhemen, obwohl ich mittlerweile denke es nicht zu schaffen. Aber ich werde mal mit C anfangen. Es interessiert mich ja auch so die Programmierung. Momentan bin ich nur im Webdesign tätig. Dort plage ich mich mit xhtml, css und php rum. Okay, dann Dank an eure tatkräftigen Hilfestellungen und Kommentare, die mich bestimmt auf den Boden der Realität zurück gebracht haben. Frohe Weihnachten Gruß Duracell
Tut mir leid, wenn wir dich jetzt demotiviert haben. Das ist nicht unbedingt unsere Absicht. Aber ein gewisser Realismus muss schon sein. Wenn Dich das Thema Schach interessiert, dann hab ich einen anderen Vorschlag: Vergiss fuers erst mal, dass dein Programm eigenstaendig spielen koennen soll. Nimm Dir fuers erste vor, ein Programm zu schreiben, dass ein Schachbrett simuliert. D.h. 2 menschliche Spieler spielen gegeneinander und das Programm nimmt die Zuege entgegen, stellt das Brett dar, speichert die Zuege (fur Zugruecknahme) intern, schreibt sie auf eine Datei, kann eine Partie von einer Datei laden und anzeigen, etc. Das ist fuer sich alleine schon eine nette Uebung, fuer die man schon ganz gut programmieren koennen muss. Da kommen Themen wie Datenstruturen, schreiben/lesen von Files, Anzeige, Benutzereingabe entgegennehmen und auswerten, Gueltigkeits- pruefung der Eingabe (fuer ungueltige Zuege) etc. vor. Alles nicht trivial und doch einfach genug, dass da auch irgendwann ein Ende herausschaut. Da Du mit Web arbeitest, koennte das Ganze ja zb. auch als CGI realisiert werden (aber nicht gleich: Debuggen mit CGI ist ein Horror). Am Anfang muss es ja nicht gleich eine graphische Anzeige sein, ein simple textuelle Ausgabe, ala T L S D K S L T B B B B B B B B . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . b b b b b b b b t l s d k s l t Ihre Eingabe> wuerde es ja fuer den Anfang tun. Und Du wuerdest eine Menge ueber Programmierung dabei lernen.
Der zweite Schritt wäre dann, dass dein Programm eine Zugüberprüfung vornimmt, also dass kein Benutzer illegale Züge machen kann. Das ist dann schon quasi ein großteil des Zuggenerators, den man dann für die Engine sowiso braucht. Aber alles step by step :-)
hehe, ich sehe ihr gebt auch nicht auf. Sehr gut :-) Okay, wer kann mir denn mal einen Buchtipp für C geben? Gruß Duracell
C/ C++ von Galileo Computing Autor : Kaiser/Kecher. Ist ne Demo-CD und ein Compiler drinne. Und fängt ganz klein an. Ist aber wirklich nur was für absolute Anfänger.
@Karl Heinz Buchegger: Seit wann kommt neben den turm der läufer????? T L S D K S L T B B B B B B B B . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . b b b b b b b b t l s d k s l t
Hi Duracell. "C von A bis Z" von Galileo Computing, Author: Jürgen Wolf ist auch sehr gut. http://www.amazon.de/exec/obidos/ASIN/3898426432/qid=1135281675/sr=1-3/ref=sr_1_10_3/028-5273455-3092569 Zumindest hat es mir als C-Neuling alles von grund-auf und verständlich erklärt. Du kannst es auch unter www.pronix.de als Open-Book lesen. Falls es dir gefällt, kannst es ja bestellen. Menz
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.