Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Du erwartest nicht tatsächlich, dass hier jemand ein Thema breitklopft, mit dem man eine ganze Enzyklopädie füllen
kann, oder? Komm schon, recherchiere bisschen, lese Grundlagenartikel zum Thema, suche nach frei verfügbaren
Beispielen, Hilfsbibliotheken etc.
Kommt auch drauf an, wie intelligent der Computerspieler sein soll. Du kannst auch Feinde machen, die zufällig irgendwohinlaufen - da kann man dann halt kaum mehr von Intelligenz sprechen (es soll aber auch Menschen geben die sich intelligent nennen und genauso wenig drauf haben... aber lassen wir das).
Mal als Beispiel, ich hab irgendwann mal ein Pacman geschrieben, mit einer KI, die sich über Plugins austauschen ließ. Die KI-Klasse muss dann dieses Interface implementieren:
Code:
package de.illu.pac3d.enemy;
import de.illu.pac3d.*;
import java.awt.*;
/**
* Klasse implementieren, um eigene Verhaltensweisen der Feinde zu implementieren.
* Die Klasse bekommt über die Methoden setGamefield und setPosition Informationen über das Spielfeld und den Standort des Geists.
* Über computePoint wird dann zurückgegeben, an welchen Punkt der Geist sich bewegt. setPosition wird darauf normal wieder direkt von außen aufgerufen.
* getGhostRot muss eine Konstante aus de.illu.pac3d.GlobalPrefs zurückgeben (NORTH/SOUTH/EAST/WEST), die angibt, in welche Richtung der Geist sieht.
*/
public interface EnemyBehavior
{
public void setGamefield (Gamefield gf);
public void setPosition (Point p);
public Point computePosition();
public int getGhostRot();
/**
* Liefert eine kurze Beschreibung über den Behavior, auch in HTML.
*/
public String getDescription();
/**
* Mit diesem Factor wird der Highscore multipliziert
*/
public double getFactor();
}
Es gibt z.B. eine Implementierung, die zufällige Werte zurückgibt - das ist dann gar nicht so viel Code
Die intelligenteste Implementierung, die ich geschrieben habe, sieht folgendermaßen aus:
Code:
package de.illu.pac3d.enemy;
import de.illu.pac3d.enemy.EnemyBehavior;
import de.illu.pac3d.*;
import java.awt.Point;
import java.util.*;
import java.io.*;
import de.illu.math.AStar;
/**
*
[b]Intelligentes Feindverhalten[/b]</p>
Die Feinde benutzen den A-Star-Wegfindungs-Algorithmus, um
* sich auf kürzestmöglichem Wege zu Pacman zu begeben, laufen aber weg, wenn Pacman ein Schild hat.</p>
[i]Faktor: 1,3[/i]</p>
*/
public class IntelligentEnemyBehavior extends StandardEnemyBehavior
{
public int getGhostRot()
{
if (!mustRedo){
return rot;
}
int ret = rot;
if (gf.getPrefs().view.getPacman().hasArmor()){
Point pac = gf.getP3dPos();
int xdiff = pac.x - p.x;
int ydiff = pac.y - p.y;
//System.out.println ("xdiff: " + xdiff + "; ydiff: " + ydiff);
if (Math.abs(xdiff) > Math.abs(ydiff)){
if (xdiff > 0){
ret = GlobalPrefs.WEST;
}else{
ret = GlobalPrefs.EAST;
}
}else{
if (ydiff > 0){
ret = GlobalPrefs.NORTH;
}else{
ret = GlobalPrefs.SOUTH;
}
}
}else{
boolean[][] b = new boolean[25][25];
int[][] f = gf.getField();
for (int i = 0; i < 25; i++){
for (int j = 0; j < 25; j++){
b[i][j] = (f[i][j] != Leveleditor.CURSOR_MAUER);
}
}
for (Point p : gf.getGhosts()){
b[p.x][p.y] = false;
}
try {
AStar.Node node = AStar.getPathInArray(b, this.p, gf.getP3dPos());
AStar.Node lastNode = node;
while (node.getParent() != null){
lastNode = node;
node = node.getParent();
}
//System.out.println (lastNode);
int x = p.x;
int nx = lastNode.getX();
int y = p.y;
int ny = lastNode.getY();
if (nx - x == 1){
ret = GlobalPrefs.EAST;
}else if (nx - x == -1){
ret = GlobalPrefs.WEST;
}else if (ny - y == 1){
ret = GlobalPrefs.SOUTH;
}else if (ny - y == -1){
ret = GlobalPrefs.NORTH;
}
}catch (NoSuchElementException ex) {
//System.out.println ("no node found");
}
}
rot = ret;
mustRedo = false;
return ret;
}
public String getDescription()
{
return "<html><h3>Intelligentes Feindverhalten</h3>
Die Feinde benutzen den A-Star-Wegfindungs-Algorithmus, um sich auf kürzestmöglichem Wege zu Pacman"
+ "zu begeben, laufen aber weg, wenn Pacman ein Schild hat.</p>
[i]Faktor: 1,3[/i]</p></html>";
}
public double getFactor()
{
return 1.3;
}
}
Das ist abgeleitet aus der Klasse mit der Standard-KI (das sind auch nochmal 50 Zeilen, das überschriebene nicht eingerechnet) und benötigt zusätzlich noch das hier. Und das alles, um nur eine Richtung und den nächsten Punkt in diese Richtung zu berechnen.
Soll heißen, zu deiner Frage kann man eigentlich keine Antwort geben Das hängt von so vielen Faktoren ab. Überleg dir einfach: Wenn das Spiel so und so aussieht - was soll die KI dann machen? Wie kann ich das am besten und einfachsten in Java ausdrücken? - und schreib das dann hin.
Note: Uh jö, beim Durchlesen merk ich doch deutlich, dass der Code schon älter ist... bei jedem Aufruf ein neues 25x25 Array und so Sachen... naja darum gehts ja nich
Ich glaube, hier hat der Anwender weniger Probleme mit Java sondern eher damit überhaupt zu programmieren und dann auch noch welche Vorgehensweisen und Möglichkeiten KI bietet...
Suche eher:
Grundkurs Programmieren
was ist if.....
Basis Künstliche Intelligenz
z.B. Neuronale Netze, Expertensysteme, Regeln, ....
Danach viel Freude bei der Umsetzung.
Eher 4 Monate, 23 Tage und 35 Stunden.....
als 4 Stunden 23 Minuten 35 Sekunden.
wtf? KIs werden in der Sprache programmiert, in der sie benötigt werden. Was nützt dir eine Prolog-KI für 4-Gewinnt, wenn dein 4-Gewinnt in Java geschrieben ist???
@The-Forgotten
schlaf mal dein weihnachtsrausch aus, les deine sinnlose Frage nochmal durch und dann nochmal die Antworten. Wenn du anschließend immer noch (dieselben) Fragen hast, dann solltest du dir Gedanken machen.
Es gibt doch fast zu jeder SPrache eine Java Einbettung. Jython zum Beispiel für die Schlange
Also ich habe schon die ein oder andere kleine Sache mit Jiprolog gemacht. Versuch mal in Java ne Digitale Schaltung zu simulieren. Nen RS-FlipFlop zum Beispiel. Da programmiert man sich nen Wolf. In Prolog ne Sache von max 15 Zeilen.
ich hab auch nie behauptet, dass man prolog nicht in java einbinden kann. Ich fände es nur äußerst unsinnig, wenn ich in Java ein 4-Gewinnt habe, die dazugehörige KI aber in Prolog schreiben würde.
ich hab auch nie behauptet, dass man prolog nicht in java einbinden kann. Ich fände es nur äußerst unsinnig, wenn ich in Java ein 4-Gewinnt habe, die dazugehörige KI aber in Prolog schreiben würde.
Nicht unbedingt. Du schreibst die Logik in Prolog, das ergebnis ist aber generierter Java-Code (ähnlich Compilerbau).
OK, das ist jetzt Science Fiction, keine Ahnung, ob es sowas gibt. Für mich ist KI eine Blondine mit gefärbten Haaren.