JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.phpMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Was haltet ihr von meinem Game
Gehe zu Seite 1, 2, 3  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Projekte
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  

Was haltet ihr von meinem Game
Gut
47%
 47%  [ 8 ]
Es geht
35%
 35%  [ 6 ]
Schlecht
17%
 17%  [ 3 ]
Stimmen insgesamt : 17

Autor Nachricht
mortl2
Junior JLI'ler



Anmeldedatum: 18.09.2002
Beiträge: 88
Wohnort: Straubing/Bayern
Medaillen: Keine

BeitragVerfasst am: 05.01.2003, 19:45    Titel: Was haltet ihr von meinem Game Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
DaN00b
JLI'ler



Anmeldedatum: 10.08.2002
Beiträge: 159

Medaillen: Keine

BeitragVerfasst am: 05.01.2003, 20:20    Titel: Antworten mit Zitat

bei mir hat er nen kreis auf mein kreuz gesetzt!!!
_________________
Carpe Diem - Seize the day - Nütze den Tag!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
mortl2
Junior JLI'ler



Anmeldedatum: 18.09.2002
Beiträge: 88
Wohnort: Straubing/Bayern
Medaillen: Keine

BeitragVerfasst am: 05.01.2003, 21:06    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
gl_echse
JLI'ler



Anmeldedatum: 01.01.2003
Beiträge: 105

Medaillen: Keine

BeitragVerfasst am: 05.01.2003, 21:07    Titel: Antworten mit Zitat

64 abfragen???

ich habe mal n javascript gesehen, der kam mit 12 abfragen aus und man konnte nur verlieren oder gleichstand erreichen.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
mortl2
Junior JLI'ler



Anmeldedatum: 18.09.2002
Beiträge: 88
Wohnort: Straubing/Bayern
Medaillen: Keine

BeitragVerfasst am: 05.01.2003, 21:14    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
gl_echse
JLI'ler



Anmeldedatum: 01.01.2003
Beiträge: 105

Medaillen: Keine

BeitragVerfasst am: 05.01.2003, 21:16    Titel: Antworten mit Zitat

das mit den 46/64 war mein fehler Crying or Very sad

aber das is viel zu umständlich.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
mortl2
Junior JLI'ler



Anmeldedatum: 18.09.2002
Beiträge: 88
Wohnort: Straubing/Bayern
Medaillen: Keine

BeitragVerfasst am: 05.01.2003, 21:17    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
VerruecktesHuhn
Super JLI'ler



Anmeldedatum: 30.07.2002
Beiträge: 492
Wohnort: Stuttgart
Medaillen: Keine

BeitragVerfasst am: 05.01.2003, 22:39    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Jörg
JLI MVP
JLI MVP



Anmeldedatum: 19.07.2002
Beiträge: 182
Wohnort: Siegen/NRW
Medaillen: Keine

BeitragVerfasst am: 05.01.2003, 23:54    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
mortl2
Junior JLI'ler



Anmeldedatum: 18.09.2002
Beiträge: 88
Wohnort: Straubing/Bayern
Medaillen: Keine

BeitragVerfasst am: 06.01.2003, 09:19    Titel: Antworten mit Zitat

Ok, das Problem mit dem stack overflow habe ich hinbekommen(hoffentlich Laughing )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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
gl_echse
JLI'ler



Anmeldedatum: 01.01.2003
Beiträge: 105

Medaillen: Keine

BeitragVerfasst am: 06.01.2003, 13:42    Titel: Antworten mit Zitat

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 Wink

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
Benutzer-Profile anzeigen Private Nachricht senden
DaN00b
JLI'ler



Anmeldedatum: 10.08.2002
Beiträge: 159

Medaillen: Keine

BeitragVerfasst am: 06.01.2003, 13:46    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
mortl2
Junior JLI'ler



Anmeldedatum: 18.09.2002
Beiträge: 88
Wohnort: Straubing/Bayern
Medaillen: Keine

BeitragVerfasst am: 06.01.2003, 13:56    Titel: Antworten mit Zitat

@ 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 Laughing

Mortl
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
gl_echse
JLI'ler



Anmeldedatum: 01.01.2003
Beiträge: 105

Medaillen: Keine

BeitragVerfasst am: 06.01.2003, 14:16    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
mortl2
Junior JLI'ler



Anmeldedatum: 18.09.2002
Beiträge: 88
Wohnort: Straubing/Bayern
Medaillen: Keine

BeitragVerfasst am: 06.01.2003, 15:38    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Projekte Alle Zeiten sind GMT
Gehe zu Seite 1, 2, 3  Weiter
Seite 1 von 3

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum