Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Was haltet ihr von meinem Game |
Gut |
|
47% |
[ 8 ] |
Es geht |
|
35% |
[ 6 ] |
Schlecht |
|
17% |
[ 3 ] |
|
Stimmen insgesamt : 17 |
|
Autor |
Nachricht |
mortl2 Junior JLI'ler
Anmeldedatum: 18.09.2002 Beiträge: 88 Wohnort: Straubing/Bayern Medaillen: Keine
|
Verfasst am: 05.01.2003, 18:45 Titel: Was haltet ihr von meinem Game |
|
|
Hi,
Ich bin gerade mit meinem TicTacToe Spiel fertig geworden, es ist mein erstes, dass mit einer KI arbeitet. Die funktioniert aber noch nicht so wie gewollt, auch das Programm selber enthält noch ein paar Bugs(bitte hier posten). Die Punkteanzeige und die Dialoge muss ich noch verbessern bzw. erweitern. Die Sounds müssen auch noch verbessert werden.Nun, was haltet ihr davon?
Den Download findet ihr hier http://maschue.bei.t-online.de/TicTacToe.zip
Mortl |
|
Nach oben |
|
|
DaN00b JLI'ler
Anmeldedatum: 10.08.2002 Beiträge: 159
Medaillen: Keine
|
Verfasst am: 05.01.2003, 19:20 Titel: |
|
|
bei mir hat er nen kreis auf mein kreuz gesetzt!!! _________________ Carpe Diem - Seize the day - Nütze den Tag! |
|
Nach oben |
|
|
mortl2 Junior JLI'ler
Anmeldedatum: 18.09.2002 Beiträge: 88 Wohnort: Straubing/Bayern Medaillen: Keine
|
Verfasst am: 05.01.2003, 20:06 Titel: |
|
|
Ja, das ist mir auch schon passiert, das liegt an dieser dummen KI, sie hat noch einige Fehler, aber da es 46 Abfragen über das Spielfeld sind ist es schwer herauszufinden wo der Fehler liegt(ich arbeite schon dran!)
Mortl |
|
Nach oben |
|
|
gl_echse JLI'ler
Anmeldedatum: 01.01.2003 Beiträge: 105
Medaillen: Keine
|
Verfasst am: 05.01.2003, 20:07 Titel: |
|
|
64 abfragen???
ich habe mal n javascript gesehen, der kam mit 12 abfragen aus und man konnte nur verlieren oder gleichstand erreichen. |
|
Nach oben |
|
|
mortl2 Junior JLI'ler
Anmeldedatum: 18.09.2002 Beiträge: 88 Wohnort: Straubing/Bayern Medaillen: Keine
|
Verfasst am: 05.01.2003, 20:14 Titel: |
|
|
46!(wenn ich mich nicht verzählt habe)
Der Computer prüft ob er irgendwo zwei Kreise nebeneinander(23 Abfragen) oder ob der Spieler zwei Kreuze nebeneinander(auch 23 Abfragen) hat und setzt dann dementsprechend einen Kreis, wenn nicht dann setzt er zufällig.
Mortl |
|
Nach oben |
|
|
gl_echse JLI'ler
Anmeldedatum: 01.01.2003 Beiträge: 105
Medaillen: Keine
|
Verfasst am: 05.01.2003, 20:16 Titel: |
|
|
das mit den 46/64 war mein fehler
aber das is viel zu umständlich. |
|
Nach oben |
|
|
mortl2 Junior JLI'ler
Anmeldedatum: 18.09.2002 Beiträge: 88 Wohnort: Straubing/Bayern Medaillen: Keine
|
Verfasst am: 05.01.2003, 20:17 Titel: |
|
|
Ich weis, aber mir ist keine bessere Methode eingefallen(ist ja auch meine erste KI). Und da kam ich auf die Idee mit den "if" Abfragen.
Mortl |
|
Nach oben |
|
|
VerruecktesHuhn Super JLI'ler
Anmeldedatum: 30.07.2002 Beiträge: 492 Wohnort: Stuttgart Medaillen: Keine
|
Verfasst am: 05.01.2003, 21:39 Titel: |
|
|
Wenn da jemand gewonnen hat, sollten die Kreise und Kreuze so lange da bleiben, bis man auf "Neues Spiel" geht, find ich... oder zumindest ein paar Sekunden. Ansonsten find ichs gut! |
|
Nach oben |
|
|
Jörg JLI MVP
Anmeldedatum: 19.07.2002 Beiträge: 182 Wohnort: Siegen/NRW Medaillen: Keine
|
Verfasst am: 05.01.2003, 22:54 Titel: |
|
|
Bei mir stürzt das Programm manchmal mit ner Unhandled Exception ab. VS verrät mir, dass es sich um nen stack overflow handelt.
Der Fehler tritt auf, wenn ich in folgender Reihenfolge setze, wobei er Computer auch mitspielen muss:
ich: 1
cpu: 5
ich: 8
cpu: 9
ich: 7
cpu: 4
ich: 6 ... absturz.
Wie gesagt stuerzt der nur bei genau dieser Reihenfolge ab, also mal öfter hintereinander probieren. _________________ www.messiahzone.de.vu |
|
Nach oben |
|
|
mortl2 Junior JLI'ler
Anmeldedatum: 18.09.2002 Beiträge: 88 Wohnort: Straubing/Bayern Medaillen: Keine
|
Verfasst am: 06.01.2003, 08:19 Titel: |
|
|
Ok, das Problem mit dem stack overflow habe ich hinbekommen(hoffentlich )aber das mit dem Überzeichnen noch nicht. Das die Kreuze und Kreise bleiben mach ich auch noch. Die neue Version ist schon online.
Mortl |
|
Nach oben |
|
|
gl_echse JLI'ler
Anmeldedatum: 01.01.2003 Beiträge: 105
Medaillen: Keine
|
Verfasst am: 06.01.2003, 12:42 Titel: |
|
|
Wenn du wirklich nur prüfst ob 2 x oder o nebeneinander liegen ist es falsch.
beim spielfeld:
x x
o
o
Würde deine ki eigentlich nix machen oder?
aber man könnte doch
xxx
o
o
2)
1 steht hierbei für den spieler
2 für den computer
Es wäre doch einfacher zu überprüfen ob in einer reihe 2 punkte des einen spielers sind und keiner des gegners. dazu könnte man folgendes verwenden:
Code: | if((map[0][0]==1 && map[1][0]==1 && map[2][0]==0)||(map[0][0]==1 && map[1][0]==0 && map[2][0]==1)||(map[0][0]==0 && map[1][0]==1 && map[2][0]==1)) |
das wäre aber ein bischen umständlich
deswegenm:
Code: |
for(int y=0;y<3;y++)
{
int anzahl[3][2];
for(int x=0;x<3;x++)
{
if(map[x][y]==1)anzahl[y][0]++;
if(map[x][y]==2)anzahl[y][1]++;
};
if(anzahl[y][1]==2 && anzahl[y][0]==0)
{
if(map[0][y]==0)
{
map[0][y]==2;
return;
}
elseif(map[1][y])
{
map[1][y]==2;
return;
}
else
{
map[2][y]==2;
return;
};
};
//immer noch kein guter zug gefunden;jetzt horizontal überprüfen
for(int x=0;x<3;x++)
{
int anzahl[3][2];
for(int y=0;y<3;y++)
if(map[x][y]==1)anzahl[x][0]++;
if(map[x][y]==2)anzahl[x][1]++;
};
if(anzahl[x][1]==2 && anzahl[x][0]==0)
{
if(map[x][0]==0)
{
map[x][0]==2;
return;
}
elseif(map[x][1])
{
map[x][1]==2;
return;
}
else
{
map[x][2]==2;
return;
};
};
//immer noch keinen siegzug gefunden;jetzt vertikal prüfen
for(int durch=1;durch>=-1;durch-=2)
{
int anzahl[2];
for(int y=0;y<3;y++)
{
if(durch==1)int x=0;
if(durch==-1)int x=2;
if(map[x][y]==1)anzahl[0]++;
if(map[x][y]==2)anzahl[1]++;
y++;x+=durch;
};
if(durch==1){
if(anzahl[1]==2 && anzahl[0]==0)
{
if(map[0][0]==0)
{
map[0][0]==2;
return;
}
else if(map[1][1]==0)
{
map[1][1]==2;
return;
}
else{
map[2][2]==2;
return;
};
};
}
else{
if(anzahl[1]==2 && anzahl[0]==0)
{
if(map[2][0]==0)
{
map[2][0]==2;
return;
}
else if(map[1][1]==0)
{
map[1][1]==2;
return;
}
else{
map[0][2]==2;
return;
};
};
};
};
|
Du kannst jetzt noch das gleiche für verteidigungszüge verwenden und wenn es da auch nix gibt n zufallszug ausführen.
PS: sin zwar bisschen mehr als 46zeilen aber es is net des von dem java das ich gesehen habe sondern meine interpretation einer tictactoe-KI |
|
Nach oben |
|
|
DaN00b JLI'ler
Anmeldedatum: 10.08.2002 Beiträge: 159
Medaillen: Keine
|
Verfasst am: 06.01.2003, 12:46 Titel: |
|
|
die hintergrundgrafik kommt mir trotzdem ziemlich bekannt vor
könnte es sein das des nach einem tutorial gemacht wurde?
weil irgendwo hab ich sowas ähnliches schonmal gesehen...
um wieder zum thema zu kommen:
ich frag mich eh wie die großen entwickler teams die ki machen weil die ki muss gut und schnell sein und da den richtigen kompromiss zu finden :/
weil falls jemand schonmal Battle Field singleplayer probiert hat der weiß sicherlich das viele Bots den pc in die knie zwingen können (und sind trotzdem net grad die hellsten) _________________ Carpe Diem - Seize the day - Nütze den Tag! |
|
Nach oben |
|
|
mortl2 Junior JLI'ler
Anmeldedatum: 18.09.2002 Beiträge: 88 Wohnort: Straubing/Bayern Medaillen: Keine
|
Verfasst am: 06.01.2003, 12:56 Titel: |
|
|
@ gl_echse
So ungefähr mach ich es ja, sieh mal:
Code: |
...
// 000
// 100
// 100
if(spielfeld[1][1][0] && spielfeld[1][2][0] && !spielfeld[0][0][0])
{
spielfeld[1][0][0] = 1;
return TRUE;
}
...
|
Ich verwende ein 3 demensionales Array, für Spieler(0 = Spieler, 1 = Gegner),für die Zeile und für die Spalte im Spielfeld.
Zuerest prüft die KI ob irgendwo eine möglichkeit besteht zu gewinnen(wie oben), wenn ja, wird das feld auf 1 gesetz(0 = frei, 1 = besetzt), und true zurückgegeben(der Gegner hat gewonnen),wenn keine möglichkeit besteht wird geprüft ob der Spieler eine Gewinnmöglichkeit hat, wird dies normalerweise verhindert(funktioniert nicht immer), ansonsten setzt sie zufällig.
@DaN00b
ich hab's einfach mit nem Muster gefüllt
Mortl |
|
Nach oben |
|
|
gl_echse JLI'ler
Anmeldedatum: 01.01.2003 Beiträge: 105
Medaillen: Keine
|
Verfasst am: 06.01.2003, 13:16 Titel: |
|
|
ich finde es aber in dem fall unnötig eine 3dim array zu verwenden.
Da es nur 3 möglichkeiten gibt und nicht 6. du kannst auch einfach short in benutzen wenn dir int zu groß ist. |
|
Nach oben |
|
|
mortl2 Junior JLI'ler
Anmeldedatum: 18.09.2002 Beiträge: 88 Wohnort: Straubing/Bayern Medaillen: Keine
|
Verfasst am: 06.01.2003, 14:38 Titel: |
|
|
Der dritte index ist für die Render-Funktion. Wenn z.B. das "Spielfeld[0][0][0]" 1 ist, dan wird ins erste Feld ein Kreuz gezeichnet, wenn im Spielfeld aber "[1][0][0]" 1 ist, dann wird ein Kreis gezeichnet.
Mortl |
|
Nach oben |
|
|
|