Hallo, vorab es geht um Java Programmierung und um den Alpha-Beta Algorithmus?

...komplette Frage anzeigen

2 Antworten

Aus dem Code den du sowohl als Frage als auch zusätzlich als Antwort gepostet hast, lässt sich noch nicht allzu viel  erkennen, da:

1.  Das Beispiel unvollständig ist: Sämtliche verwendete Klassen kennst ausschließlich du. - D.h. wir können nur Raten was dahinter steckt und ausführbar ist es auch nicht.

2. Der Code auch mit Syntax-Fehlern gespickt ist: z.b:

return' best; 
BOOL PVgefunden = FALSE;

3. Du noch nicht genannt hast, was dabei eigentlich dein Problem ist: Wo kommst du nicht weiter? Woran scheitert es? Wo genau drückt der Schuh?

Der Code ist kommentiert

package sc.player2016.logic;

import java.security.SecureRandom;
import java.util.List;
import java.util.Random;

import sc.player2016.Starter;
import sc.plugin2016.GameState;
import sc.plugin2016.IGameHandler;
import sc.plugin2016.Move;
import sc.plugin2016.Player;
import sc.plugin2016.PlayerColor;
import sc.shared.GameResult;

/**
* Das Herz des Simpleclients: Eine sehr simple Logik, die ihre Zuege zufaellig
* waehlt, aber gueltige Zuege macht. Ausserdem werden zum Spielverlauf
* Konsolenausgaben gemacht.
*/
public class MyLogic implements IGameHandler {

private Starter client;
private GameState gameState;
private Player currentPlayer;

/*
* Klassenweit verfuegbarer Zufallsgenerator der beim Laden der klasse
* einmalig erzeugt wird und darn immer zur Verfuegung steht.
*/
private static final Random rand = new SecureRandom();

/**
* Erzeugt ein neues Strategieobjekt, das zufaellige Zuege taetigt.
*
* @param client
* Der Zugrundeliegende Client der mit dem Spielserver
* kommunizieren kann.
*/
public MyLogic(Starter client) {
this.client = client;
}

/**
* {@inheritDoc}
*/
@Override
public void gameEnded(GameResult data, PlayerColor color,
String errorMessage) {

System.out.println("*** Das Spiel ist beendet");
}

/**
* {@inheritDoc}
*/
@Override
public void onRequestAction() {
System.out.println("*** Es wurde ein Zug angefordert");
List possibleMoves = gameState.getPossibleMoves();
System.out.println("*** sende zug: ");
Move selection = possibleMoves.get(rand.nextInt(possibleMoves
.size()));

int AlphaBeta;
int beta;
int tiefe = 0;
int alpha;
int wert;
int best = 10;
{
if (tiefe == 0)
return Bewerten();
BOOL PVgefunden = FALSE;
best = -unendlich;
GeneriereMoeglicheZuege();
while (ZuegeUebrig())
{
FuehreNaechstenZugAus();
if (PVgefunden)
{
wert = -AlphaBeta(tiefe-1, -alpha-1, -alpha);
if (wert > alpha && wert < beta)
wert = -AlphaBeta(tiefe-1, -beta, -wert);
} else
wert = -AlphaBeta(tiefe-1, -beta, -alpha);
MacheZugRueckgaengig();
if (wert > best)
{
if (wert >= beta)
return wert;
best = wert;
if (wert > alpha)
{
alpha = wert;
PVgefunden = TRUE;
}
}
}
return' best;
}

System.out.println("*** setze Strommast auf x="
+ selection.getX() + ", y="
+ selection.getY());
sendAction(selection);
}

/**
* {@inheritDoc}
*/
@Override
public void onUpdate(Player player, Player otherPlayer) {
currentPlayer = player;

System.out.println("*** Spielerwechsel: " + player.getPlayerColor());

}

/**
* {@inheritDoc}
*/
@Override
public void onUpdate(GameState gameState) {
this.gameState = gameState;
currentPlayer = gameState.getCurrentPlayer();

System.out.print("*** Das Spiel geht vorran: Zug = "
+ gameState.getTurn());
System.out.println(", Spieler = " + currentPlayer.getPlayerColor());
}

/**
* {@inheritDoc}
*/
@Override
public void sendAction(Move move) {
client.sendMove(move);
}

}

Was möchtest Du wissen?