Facharbeit (Schachprogramm?)
-
Hi Community,
wir müssen für nächstes Jahr eine Facharbeit in der Ausbildung schreiben. Das Thema koennen wir selbst auswählen - es muss nur zugelassen werden
.
Nach langem überlegen kam ich darauf, ein Schachprogramm mit C / WinAPI zu programmieren, doch leider habe ich noch nicht wirklich sehr viel Ahnung von Schach.
Sicher möchte ich keineswegs einen Top - KI - Computer Gegner, doch ein wenig was sollte er schon koennen!
Nun meine Frage, hat von euch schon jemand ein Schach programmiert und kann mir etwa sagen, in welchem Umfang ein solches Programm sein wird? Ich habe bis etwa Ostern Zeit, doch moechte ich da eine sehr gute Note erzielen, und fände es schade, wenn ich dann nicht fertig werde, da ich mich überschätzt habe..
Desweiteren hat jemand ein Tut. zu Schach? Am besten eines für die KI der Computergegner?
Danke shconmal
-
Hallo!
Ich hab mal just for fun eine Schachengine angefangen.
Dazu habe ich u.a. folgendes Tutorial gelesen:
http://www.gamedev.net/reference/articles/article1014.aspDavon gibt es 6 Teile. Die anderen musst du dir suchen (sind nicht verlinkt).
Ansonsten ein paar Begriffe, nach denen du googeln kannst:
Minimax
Negamax
Alpha-Beta pruningBis April solltest du locker etwas brauchbares auf die Beine stellen können.
Gruß, Dr. Prokt
-
Danke für die schnelle antwort, ich werde mir die Ebooks mal durchlesen
-
Achja, was mir noch eingefallen ist:
Vielleicht wäre es besser, eine KI für ein einfacheres Spiel zu schreiben, wie z.B. 4 Gewinnt, Othello (Reversi) oder Dame.
-
Lyrix schrieb:
Hi Community,
hi, Lyrix
Nach langem überlegen kam ich darauf, ein Schachprogramm mit C / WinAPI zu programmieren, doch leider habe ich noch nicht wirklich sehr viel Ahnung von Schach.
warum C und nicht C++?
mach auf jeden fall folgendes: schreib eine tic-tac-toe-spiel. dann schreib ein 4-gewinnt-spiel. dann schreib ein schachspiel.
sachen wie negamax kannste bei gutem design unverändert übernehmen, bei nicht so gutem, machste halt ein paar anpassungen. egal. der drei-stufen-plan schützt dich vor knoten im code. vor elendiger verwurstelung und unwartbarkeit. schlicht vor dem umkippen des projekts. alles muss einfach bleiben. und ne schach-ki ist wie ein monster, das unter der tastatur lauert und dich 10-mal pro stunde dazu verlockt, scheiße zu coden. und ich kenne noch keinen, der den verlockunen widerstehen konnte. alle schach-programme sind schrecklich.
Nun meine Frage, hat von euch schon jemand ein Schach programmiert und kann mir etwa sagen, in welchem Umfang ein solches Programm sein wird?
4 tage, wenn dein 4-gewinnt-programm was taugt. maximal 30k code plus grafik-sachen.
-
implementier auf jedenfall das uci-protokoll(united chess interface). es gibt dutzende gui's die das unterstützen, damit kannst du dann viel leichter deine engine testen, debuggen, gegen andere engines antreten lasse, u.ä.
eine eigene gui kannst du dann wenn die engine fertig ist immernoch drüber klatschen. so stellst du auch sicher das du engine-code und gui-code trennst.
eine engine die keine dummen züge macht schaffst du in unter einer woche, wenn du das prinzip von alpha-beta verstanden hast. für eine engine die kluge züge machen soll brauchst du allerdings gute heuristiken, da bringt der schnellste code nichts. und das hat dann nichts mehr mit programmieren zu tun, dafür musst du dich mit der schachtheorie auseinandersetzen und selber sehr viel schach spielen, um ein gefühl dafür zu bekommen.
aber für deine facharbeit reicht ganz bestimmt eine nicht dumme engine mit gui, ich denke es ist eine gute idee.
-
Lyrix schrieb:
doch leider habe ich noch nicht wirklich sehr viel Ahnung von Schach.
Wie war das, um ein gutes Schachprogramm zu schreiben darf man nicht allzuviel Ahnung vom Schachspielen haben hat der Entwickler von Fritz gesagt
-
ddddddddddddddd schrieb:
Wie war das, um ein gutes Schachprogramm zu schreiben darf man nicht allzuviel Ahnung vom Schachspielen haben hat der Entwickler von Fritz gesagt
mit "nicht allzuviel" meinte er großmeister, also leute die mit 6 jahren angefangen haben schach zu spielen und seitdem jeden tag 8+ stunden schach spielen ;). es haben schon einige großmeister versucht schachengines zu schreiben, bisher sind alle kläglich gescheitert. ich vermute die denken einfach zu menschlich und können ihr system nicht richtig in quellcode umsetzen.
-
Doktor Prokt schrieb:
Achja, was mir noch eingefallen ist:
Vielleicht wäre es besser, eine KI für ein einfacheres Spiel zu schreiben, wie z.B. 4 Gewinnt, Othello (Reversi) oder Dame.Naja das wäre glaube ich für die Facharbeit zu wenig.
@ rest:
Ich werde mich mal reinlesen und mein bestes versuchen
-
hi lyrix ^^. tip: arbeite dich in c++ rein, das geht von c nach c++ in max 7 tagen(da du von c# das oop schon beherrscht etc). allerdings weiss ich nicht ob c++ bei euch erlaubt ist (evtl. dürft ihr nur c und c# nutzen ^^). wenn du in ansi c schreiben willst dann sag ich gleich mal: viel spass ohne klassen, variabler speicherbelegung etc. (is nicht böse gemeint ^^)
-
Sieh dir mal ein paar der folgenden Seiten an, vielleicht findest du ja was:
http://www.codeproject.com/csharp/chess.asp
http://www.c-sharpcorner.com/Code/2004/Nov/ChessProgram.asp
http://home.comcast.net/~tckerrigan/ <- der Code von dem hier soll angeblich sehr gut dokumentiert sein
http://www.chessopolis.com/cchess.htm
http://www.gnu.org/software/chess/
-
Das Thema ist schon lange verändert:
Ich Programmiere das Brettspiel Risiko mit C#
-
Achja:
hi lyrix ^^. tip: arbeite dich in c++ rein, das geht von c nach c++ in max 7 tagen(da du von c# das oop schon beherrscht etc). allerdings weiss ich nicht ob c++ bei euch erlaubt ist (evtl. dürft ihr nur c und c# nutzen ^^). wenn du in ansi c schreiben willst dann sag ich gleich mal: viel spass ohne klassen, variabler speicherbelegung etc. (is nicht böse gemeint ^^)
C# ist in meinen Augen wesentlich besser als C++
Klar wieso sollte es nicht erlaubt sein?
Zu dem Spass: naja eigentlich wollte ich das nur machen, um mich in die WinAPI reinzudenken, doch habe ich festgestellt, dass es viel zu viel arbeit wäre, das Programm damit zu schreiben. Hab mich dann also doch für C# entschieden.