Wie der Name schon sagt: Ein Othellospiel mit AI und Gui
Othello ist auch als Reversi bekannt.
Wikipedia: Othello#Regeln
Fehler: In der alten AI Öfters mal Stack-overflow
Überarbeitet am 12.5.2008.
Screenshot:
Hi,
Zum Thema Ki habe ich einen Link der dir helfen könnte:
http://www.fierz.ch/strategy.htm
Gruß Thomas
In der neuen Version ist folgendes neu:
+Statusanzeige hinzugefügt
-Fehler bei Übergabe von Bewertung an übergeordneten Knoten behoben
-Negamax zu
+Alpha-Beta
-Heuristik rausgeschnissen
Stackoveflow ist weiterhin ein großes Problem und ich weiß nicht, wie ich es beheben kann oder warum es am Ende von Spielen vermehrt auftritt.
So ich heb das Programm halb neu geschrieben:
+Man kann jetzt auswählen, welche AI man haben will.
+Eine neue AI in 2 Varianten ist dazugekommen: etwas schneller, mir ist noch kein stackoverflow untergekommen, bessere heuristik
+Berechnungen in einen anderen Thread ausgelagert -> Gui blockiert nicht mehr
+Undo+Redo funzt jetzt
+Man kann Stellungen als Zahlen und Bustabencode ausgeben und laden lassen.
+AIs werden jetzt beim Start in Dateien im gleichen verzeichnis gesucht. (Theoretisch kann man eine eigene schreiben.)
Fehlt noch ein Statusbalken und ein chickeres Spielbrett. 😉
Die Ladefunktion könnte sich noch als Bananenfunktion herrausstellen.
Hallo floste,
was mir grad eingefallen ist und was ich persönlich cool finden würde: Ein generisches Netzwerkinterface über das man andere Reversi Applikationen gegen deine Spielen lassen kann - wäre doch eine schöne Challenge hier fürs Forum 😉
Grüsse,
Egon
egrath's Blog: http://egonrath.eg.funpic.de/wordpress
So kann man seine eigene AI einbinden:
Eine Dll erstellen
Die .exe referenzieren
Den Index hinzufügen:
using Reverci;
using MeineNeueAiDll;//wichtig
[assembly: Index()]
namespace MeineNeueAiDll
{
public class Index : AIFactoryAttribute
{
public Index()
{
//wenn die AI-klasse IAI implementiert:
AIFactory ai1 = AIFactory.FromIAI(typeof(MeineErsteAi));//bitte diese Überladung benutzen und einen parameterlosen Konstruktor anbieten.
ai1.StandardParms["strength"] = 4;//Hier kann man [B]irgendwelche[/B] Parameter mit dem Namen festlegen
ai1.Name = "Meine_AI_Nr1";
//wenn die Klasse IAIParms Implementiert (oder von StandardAIParms erbt):
AIFactory ai2=new AIFactory(typeof(MeineZweiteAi));
ai2.StandardParms["strength"] = 4;//Hier kann man [B]irgendwelche[/B] Parameter mit dem Namen festlegen
ai2.Name = "Meine_AI_Nr2";
this.Factorys = new AIFactory[2] { ai1, ai2 };
}
}
}
Wenn amn mit der stärkeeinstellung zufrieden ist, kann man IAI implementieren.
Wenn man weitere Einstellungen auf der GUI anbieten möchte, muss man IAIParms implementieren. Ich rate aber eher dazu, von StandardAIParms zu erben und folgendes zu Überschreiben:
SetProperty(string name, object value)//AUF JEDEN FALL bese aufrufen. Hier die gui updaten
System.Windows.Forms.Control Gui //bitte NICHT base. aufrufen.
int Rechne(FeldStatus[,] Felder,FeldStatus dran,IProcess p)
Der Rückgaberwert ist bei der Rechne-Methode in beiden Fällen die zu setzende Position: x+(y*8 )8)
Die Dll muss man dann bloß noch in den Ordner der exe packen.