Zurück   Flashforum > Flash > ActionScript > Softwarearchitektur und Entwurfsmuster

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 31-12-2002, 14:51   #1 (permalink)
helpQLODhelp
 
Benutzerbild von bokel
 
Registriert seit: Feb 2002
Ort: Köln
Beiträge: 8.505
Wettbewerb: KI für 4 gewinnt

Um die plötzlich aufkeimende Begeisterung für "4 gewinnt"
auszunutzen, schlage ich einen Wettbewerb vor, der
verschiedene KIs miteinander vergleicht.

Das soll so ablaufen, dass ein Hauptfilm zwei KIs von
den Servern der jeweiligen Autoren lädt und dann
abwechselnd über LocalConnection deren Methode
"berechneZug" aufruft und das Ergebnis anzeigt.

Hier ist das Grundgerüst für eine KI.
Zwischen den Sternchen kann dann jeder seine eigene KI
implementieren. Das ist im wesentlichen eine Routine, die als
Parameter das Spielfeld als 2d Array (Zeilen x Spalten) bekommt
und daraus Zeile und Spalte für den nächsten Stein berechnet.

Da die KI vorher nicht weiss, welche Farbe sie spielt, bekommt
sie zusaetzlich die Werte für ihre eigene Farbe, fuer ein leeres
Feld und fuer ein Feld des Gegners mitgeteilt. Hier ein paar
Beispiele wie man das innerhalb der KI benutzen kann:

ActionScript:
  1. //Feld mit eigenem Stein besetzen:
  2. spielfeld[3][2] = eigenerWert;
  3.  
  4. //Ist das Feld leer ?
  5. if(spielfeld[4][2] == leerWert){
  6. }
  7.  
  8. //Steht der Gegner auf dem Feld
  9. if(spielfeld[4][2] == gegnerWert){
  10. }

Der ganze Rest muss euch nicht (kann aber) interessieren,
die Kommunikation mit dem Hauptfilm sollte so funktionieren.

ActionScript:
  1. //
  2. //mainId und spielerId werden von aussen (ueber die url) gesetzt
  3. mainId = externMainId;
  4. playerId = externPlayerId;
  5. //
  6. //lc Objekt erzeugen
  7. my_lc = new LocalConnection();
  8. //
  9. //Erlaube Zugriff von allen Domains
  10. my_lc.allowDomain = function(){
  11.     return true;
  12. }
  13. //
  14. //Verbindung herstellen
  15. //Darueber kan der Hauptfilm berechneZug aufrufen
  16. my_lc.connect(playerId);
  17. //
  18. //**
  19. //@method berechneZug(spielfeld, eigenerWert, leerWert, gegnerWert)
  20. //
  21. //Diese Methode wird vom Hauptfilm aufgerufen,
  22. //wenn der nächste Zug berechnet werden soll
  23. //
  24. //@param spielfeld    2d-array zeilen x spalten
  25. //@param eigenerWert    Dieser Wert repräsentiert einen eigenen Stein
  26. //@param leerWert      Dieser Wert repräsentiert ein leeres Feld
  27. //@param gegnerWert  Dieser Wert repräsentiert einen gegnerischen Stein
  28. //
  29. //Das Ergebnis wird an den Hauptfilm an die Methode
  30. //ziehe(id, zeile, spalte, wert) zurück geschickt
  31. //*
  32. my_lc.berechneZug = function(spielfeld, eigenerWert, leerWert, gegnerWert) {
  33.     trace("berechneZug " + this);
  34.     //
  35.     var zeilenAnzahl = spielfeld.length;
  36.     var spaltenAnzahl = spielfeld[0].length;
  37.     //
  38.     //******************************************
  39.     //Hier kommt die KI hin
  40.     //Finde den "optimalen" Zug, d.h. die Zeile und Spalte
  41.     //des eigenen Steins, der als nächstes gesetzt werden soll
  42.     //Das Ergebnis wird in den Variablen zeile und spalte
  43.     //geliefert
  44.     //
  45.     //Diese "KI" ist sehr simpel, sie sucht einfach per Zufall
  46.     //eine Spalte, in die sie ziehen darf.
  47.     var zeile = 0;
  48.     do {
  49.         var spalte = random(spaltenAnzahl);
  50.     } while (spielfeld[0][spalte] != leerWert);
  51.     //******************************************
  52.     //
  53.     //Das Ergebnis an main zurueckschicken
  54.     my_lc.send(mainId, "ziehe", playerId, zeile, spalte, eigenerWert);
  55. };
  56. //
  57. //"Habe fertig" an den Hauptfilm schicken, wenn
  58. //die KI geladen und bereit ist.
  59. my_lc.send(mainId, "fertigGeladen", playerId);

Im (noch zu produzierenden) Hauptfilm kann man dann
eine KI (ueber ihre URL) anmelden. Dann wählt man zwischen
Einzelspiel oder Turnier. Im Einzelspiel wählt man die beteiligten
KIs aus und los gehts. Im Falle eines Unentschiedens gewinnt
die KI, die weniger Rechenzeit verbraucht hat. Die Rechenzeit
pro Zug sollte 15 Sekunden nicht überschreiten.

Im Turniermodus wird ein Turnier jeder gegen jeden aller
angemeldeten KIs ausgeführt und am Ende eine Rangliste
ausgegeben.

Fehlt noch was ?
Ach ja ein Termin: Nächstes Jahr würde ich sagen


Guten Rutsch,
r.

Geändert von bokel (31-12-2002 um 16:18 Uhr)
bokel ist offline   Mit Zitat antworten
Alt 31-12-2002, 15:05   #2 (permalink)
HAY
Neuer User
 
Benutzerbild von HAY
 
Registriert seit: Aug 2002
Ort: Faust-Stadt
Beiträge: 2.577
super idee
wann gehts los!?
gruss hay
HAY ist offline   Mit Zitat antworten
Alt 31-12-2002, 15:13   #3 (permalink)
Flashworker
 
Benutzerbild von sebastian
 
Registriert seit: Nov 2001
Ort: Wiesbaden
Beiträge: 10.945
hehe..coole idee
sebastian ist offline   Mit Zitat antworten
Alt 31-12-2002, 15:15   #4 (permalink)
muh
 
Benutzerbild von Janoscharlipp
 
Registriert seit: Apr 2002
Ort: Freiburg / Stuttgart
Beiträge: 4.338
Cool

coole Idee!!!
allerdings hab ihc keine Ahnung wie das dann mit der Kommunikation klappt, aber das schafft ihr sicher
mein Code steht ja zur Verfügung...
Janoscharlipp ist offline   Mit Zitat antworten
Alt 31-12-2002, 15:20   #5 (permalink)
hOk
Neuer User
 
Benutzerbild von hOk
 
Registriert seit: Jun 2001
Ort: berlin
Beiträge: 829
Hammer Idee, das mit Localconnection
zu machen, damit lassen sich bestimmt
auch noch andere nette Wettbewerbe
machen.
Bin auf jeden Fall dabei,
netten Gruß und guten Rutsch, Holger
__________________
gobogo
hOk ist offline   Mit Zitat antworten
Alt 31-12-2002, 15:41   #6 (permalink)
Neuer User
 
Benutzerbild von Pingu
 
Registriert seit: Nov 2001
Beiträge: 2.089
1a idee
Bin auf jeden Fall dabei.
Allerdings..wozu eigenerWert übergeben?
Naja..das wird sicher erklärt ..dann..*g*

freu mich druf

gruss
pingu
__________________

'n altes Game
neu entdeckt *g*
Reine
Pingu ist offline   Mit Zitat antworten
Alt 31-12-2002, 15:58   #7 (permalink)
helpQLODhelp
 
Benutzerbild von bokel
 
Registriert seit: Feb 2002
Ort: Köln
Beiträge: 8.505
Freut mich, dass euch die Idee gefällt.

@Pingu:
Ich habe die Erklärung oben dazu geschrieben

@LordMort:
Deine Routine musst du schon selber anpassen,
ich habe die Erklärung oben nochmal stark erweitert.
Ich bin mir aber sicher, dass dir jemand helfen kann.

@hOk
Ob wir Minimax und Konsorten überhaupt zulassen
sollten ? Vielleicht begrenzen wir die Tiefe ?

@all:
Sobald ich die Plattform ansatzweise fertig habe,
poste ich sie hier. Dann kann jeder seine KI selbst
testen, bevor er sie auf die Menschheit loslaesst.

Gegen Ende der Woche wird es losgehen.
Bis dahin könnt ihr ja alle mit LordMorts oder Pingus
4gewinnt üben und euch Strategien überlegen.

Jetzt wird aber erstmal gefeiert,
bis zum nächsten Jahr

mfg r.
bokel ist offline   Mit Zitat antworten
Alt 31-12-2002, 16:04   #8 (permalink)
Neuer User
 
Benutzerbild von Pingu
 
Registriert seit: Nov 2001
Beiträge: 2.089
oki danke @ bokel.
Hatte vergessen, dass die Farbe ja wechseln kann*duck*

So ist dann soweit ales klar
Werd das dann mal verfeinern..aber nicht heute..löl

was is mit MiniMax gemeint..? is das was zum essen..oder trinken?

gruss
__________________

'n altes Game
neu entdeckt *g*
Reine
Pingu ist offline   Mit Zitat antworten
Alt 02-01-2003, 10:18   #9 (permalink)
[Matthias K.] - Moderator
 
Benutzerbild von Madokan
 
Registriert seit: Jun 2001
Ort: Berlin/Germany - and the hole World !
Beiträge: 9.971
Ah schön zu sehen, dass die Idee bereits Formen angenommen hat. bokel sag bescheid, wann es soweit ist - dann kann man ja einen entsprechenden Thread toppen.

Liebe Grüsse
Matze K.
Madokan ist offline   Mit Zitat antworten
Alt 02-01-2003, 12:06   #10 (permalink)
zeitreisender
 
Benutzerbild von emax
 
Registriert seit: Aug 2001
Ort: Hannover
Beiträge: 1.577
Thumbs up

bin auf jeden fall dabei megadaumen für ralf für die leitung!!

allerdings brauch ich länger als eine woche ...vielleicht sollten
wir uns auf einen endgültigen abgabetermin einigen. und die KIs
erst nach der entscheidung vorstellen. erste partien können
natürlich schon vorher gespielt werden.

mein vorschlag 03.03.2003
__________________
Website: www.thomas-vogel.de
emax ist offline   Mit Zitat antworten
Alt 02-01-2003, 12:43   #11 (permalink)
Bugfixer
 
Registriert seit: Nov 2001
Ort: #
Beiträge: 572
bis märz würde ich vielleicht auch was schaffen. Wie ist denn der ablauf? soll man die spiele dann im web mitverfolgen können? das wär geil
secp ist offline   Mit Zitat antworten
Alt 02-01-2003, 13:54   #12 (permalink)
helpQLODhelp
 
Benutzerbild von bokel
 
Registriert seit: Feb 2002
Ort: Köln
Beiträge: 8.505
Ich habe heute Morgen auf die Schnelle mal
was zusammengeschustert:

In der "main...." fla ist alles enthalten,
um zwei KIs gegeneinander spielen zu lassen

In der "randomKI.fla" ist ein Beispiel für eine
extrem simple KI, sie wählt einfach per Random
den nächsten möglichen Zug aus.

Im ersten Frame der main.fla könnt ihr die Urls
der beiden KIs eintragen. Wenn ihr dann den
Film startet, spielen die beiden KIs endlos
gegeneinander.

Ueber die Framerate der main.fla koennt ihr die
Geschwindigkeit der Anzeige einstellen.
An der Geschwindigkeit der Berechnung eines
Zuges ändert das natürlich nichts. Es ist nur zum
Anschauen etwas hübscher, wenn die Anzeige etwas
abgebremst wird.

Im Tracefenster gibt es einige Ausgaben zum Spiel.

Das sollte zum Testen einer eigenen KI erstmal reichen.
Wenn deine eigene KI signifikant oefter gewinnt als die
randomKI, dann bist du auf dem richtigen Weg.

Wegen des Termins und der Gesamtzeit des Wettbewerbs
ist noch nichts raus. Drei Monate finde ich sehr lang, mal
sehen, was Matze dazu sagt.

Falls es noch Fragen gibt, dann richtet diese bitte an
diesen Thread.


mfg r.
Angehängte Dateien
Dateityp: zip 4gewinnt_010102_01.zip (10,2 KB, 399x aufgerufen)
bokel ist offline   Mit Zitat antworten
Alt 02-01-2003, 14:15   #13 (permalink)
◘ ◘
 
Benutzerbild von beachmeat
 
Registriert seit: Dec 2001
Ort: Amsterdam
Beiträge: 6.126
Superklasse Idee!
Hoffe das ich Zeit finde da einzusteigen.....bin schon sehr gespannt :-)
__________________
jeden Tag frisch
beachmeat ist offline   Mit Zitat antworten
Alt 02-01-2003, 15:24   #14 (permalink)
zeitreisender
 
Benutzerbild von emax
 
Registriert seit: Aug 2001
Ort: Hannover
Beiträge: 1.577
frage:

sind zugriffe auf datenbanken erlaubt ? in diesem fall müssten
natürlich auch serverseitige scriptsprachen erlaubt werden.

denn ohne datenbank ist eine möglichst menschliche KI
sehr schwer zu realisieren.
__________________
Website: www.thomas-vogel.de

Geändert von emax (02-01-2003 um 15:25 Uhr)
emax ist offline   Mit Zitat antworten
Alt 02-01-2003, 15:41   #15 (permalink)
helpQLODhelp
 
Benutzerbild von bokel
 
Registriert seit: Feb 2002
Ort: Köln
Beiträge: 8.505
Ich finde, wir sollten erstmal alles zulassen.
Die Bandbreite an Lösungen und deren
Vergleich ist sicher auch interessant.

mfg r.
bokel ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 16:52 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele