Package pdp.scrabble.ia.impl

Source Code of pdp.scrabble.ia.impl.SimpleSimulator

package pdp.scrabble.ia.impl;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import pdp.scrabble.dictionary.DAWGItf;
import pdp.scrabble.game.Bag;
import pdp.scrabble.game.Board;
import pdp.scrabble.game.GameEnvironment;
import pdp.scrabble.game.Player;
import pdp.scrabble.game.exception.BoardWrongWordPlace;
import pdp.scrabble.ia.AbstractAlgoStep;
import pdp.scrabble.ia.AbstractMoveGenStep;
import pdp.scrabble.ia.AbstractSimulationStep;
import pdp.scrabble.ia.MoveModel;

public class SimpleSimulator extends AbstractSimulationStep {

    private int simulationDepth = 2;
    private AbstractMoveGenStep generationAlgo;

    public SimpleSimulator(AbstractAlgoStep previous, GameEnvironment env,
      Player current) {
  super(env, current, previous);
  generationAlgo = new DawgMoveGen(environment, current,
    (DAWGItf) env.getDictionary(),
    new BestMoves(moves, new EvaluatorImpl(internalEnv, null), 1));
    }

    @Override
    public int simulate(MoveModel move) {
  /*TODO clone current player
  /* create virtual opponent
  /* for each simulation :
  /*   give him unseen letters
  /*   run simulation
  /*   get result
  /* return average */

  GameEnvironment localEnv = internalEnv.clone();
  Player simPlayer = localEnv.getPlayer(usedPlayer.getID());

  //filling opponents racks with unseen letters
  for (Player p : localEnv.getPlayerList())
      if (p.getID()!=simPlayer.getID())
    p.getRack().fill();

  //playing submitted move
  move.play(localEnv.board(), simPlayer);
  simPlayer.addScore(localEnv.board().getWordPoints());
  try {
      localEnv.board().validate(true);
  } catch (BoardWrongWordPlace e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
  }
  simPlayer.getRack().fill();
 
  //completing first turn
  for (Player p : localEnv.getPlayerList()) {
      if (p.getID()!=simPlayer.getID()) {
    generationAlgo.generate(localEnv.board(), p.getRack());
    generationAlgo.getBestMove().play(localEnv.board(), p);
    p.addScore(localEnv.board().getWordPoints());
    try {
        localEnv.board().validate(true);
    } catch (BoardWrongWordPlace e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
      }
  }

  //playing remaining turns
  for (int i=0 ; i<simulationDepth ; i++) {
      for (Player p : localEnv.getPlayerList()) {
    generationAlgo.generate(localEnv.board(), p.getRack());
    generationAlgo.getBestMove().play(localEnv.board(), p);
    p.addScore(localEnv.board().getWordPoints());
    try {
        localEnv.board().validate(true);
    } catch (BoardWrongWordPlace e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
      }
  }

  //computing point differences
  Player first=localEnv.getPlayer((simPlayer.getID()==0?1:0));
  for (Player p : localEnv.getPlayerList()) {
      if (p!=simPlayer && p.getScore()>first.getScore())
    first=p;
  }
 
  return simPlayer.getScore()-first.getScore();
    }


}
TOP

Related Classes of pdp.scrabble.ia.impl.SimpleSimulator

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.