package pdp.scrabble.ia.impl;
import pdp.scrabble.game.Board;
import pdp.scrabble.dictionary.Node;
import pdp.scrabble.game.Rack;
import pdp.scrabble.ia.AbstractMoveGenStep;
import pdp.scrabble.ia.MoveModel;
import pdp.scrabble.ia.AIBoardModel;
import pdp.scrabble.dictionary.GADDAGItf;
import pdp.scrabble.dictionary.GADDAGNode;
import pdp.scrabble.game.GameEnvironment;
import pdp.scrabble.game.Letter;
import pdp.scrabble.game.Player;
import pdp.scrabble.ia.MoveAccumulator;
import pdp.scrabble.game.Location;
import pdp.scrabble.game.impl.LocationImpl;
public class GaddagMoveGen extends AbstractMoveGenStep {
private GADDAGItf gaddag;
public GaddagMoveGen(GameEnvironment env, Player current, MoveAccumulator accu,GADDAGItf g){
super( env, current,accu);
gaddag =g;
}
@Override
public void generate(Board board, Rack letters) {
// TODO Auto-generated method stub
AIBoardModel aiBoard = new AIBoardModel(board);
for(int x =0; x<Board.HORI_DIM; x++)
for(int y= 0; y<Board.VERT_DIM;y++)
if(aiBoard.isAnchorSquare(x,y)){
int posRelative = 0;
Location posAbs = new LocationImpl(y,x);
generate_aux(aiBoard,posRelative,posAbs,"",letters, gaddag.getTop());
}
}
private void generate_aux(AIBoardModel iaBoard,int posRelative, Location posAbs, String word, Rack letters, GADDAGNode node){
if(!iaBoard.isFree(posAbs.getH(), posAbs.getV())){
String s= ""+iaBoard.getCharAt(posAbs);
//franchement je sais pas ce qu'il faut a la place de node.getPatent(),
//je pense pas que ce soit �a mais bon en attendant...
GoOn(posRelative,posAbs,s,word,letters,node.getParent(),node);
}
else{
for(int i=0;i<letters.getNumberOfLetters();i++)
{
char c =letters.getLetter(i).getName();
String s= ""+ c;
if(node.contains(s)){
GADDAGNode newNode = node.getChild(c);
Letter l=letters.getLetter(i);
letters.removeLetter(l);
GoOn(posRelative, posAbs,s, word,letters, newNode, node);
letters.addLetter(l);
}
if(letters.getLetter(i).getJokerChar()=='_')
for(int k=0; k<node.numberChilds();k++)
{
Letter l=letters.getLetter(i);
letters.removeLetter(l);
GoOn(posRelative,posAbs,node.getChild(k).getValue(), word ,letters,node.getChild(k),node);
letters.addLetter(l);
}
}
}
}
private void GoOn(int posRelative,Location podsAbs, String currentLetter, String word, Rack letters, GADDAGNode newNode, GADDAGNode oldNode){
if(posRelative<=0) // moving left
{
}
else // moving right
{
}
}
}