/** * Muehlegame * Copyright (c) 2015, Thomas Ammann, Johannes Finckh * * @author Thomas Amann, Johannes Finckh * @version 1.0 */ package controller.impl; import com.google.inject.Inject; import controller.IGamefieldGraphAdapter; import model.IGamefieldGraph; import model.impl.Mills; import java.util.List; public class GamefieldAdapter implements IGamefieldGraphAdapter { private static final int MAXVERTEX = 24; private Mills mill; private IGamefieldGraph field; @Inject public GamefieldAdapter(IGamefieldGraph pField) { field = pField; mill = new Mills(); } @Override public boolean setStone(int v, char w) { if (field.getStoneColorVertex(v) != 'n') { return false; } return field.setStoneVertex(v, w); } @Override public boolean removeStone(int v) { char stoneColor = field.getStoneColorVertex(v); if ((field.getStoneColorVertex(v) == 'n') || (numberOfMills(v, stoneColor) > 0)) { return false; } return field.setStoneVertex(v, 'n'); } @Override public char getColor(int v) { return field.getStoneColorVertex(v); } @Override public boolean move(int startVertex, int endVertex, char w) { if (w == 'n') { return false; } if ((w != 'w') && (w != 's')) { return false; } if ('n' != field.getStoneColorVertex(endVertex)) { return false; } if (w != field.getStoneColorVertex(startVertex)) { return false; } List<Integer> temp1 = field.getAdjacencyList(startVertex); if (!temp1.contains(endVertex - 1)) { return false; } field.setStoneVertex(startVertex, 'n'); field.setStoneVertex(endVertex, w); return true; } @Override public int numberOfMills(int v, char c) { if ((v < 1) || (v > MAXVERTEX) || ((c != 'w') && (c != 's'))) { return 0; } List<Integer> mill1 = mill.getMill1(v); List<Integer> mill2 = mill.getMill2(v); int numberMills = 0; if ((getColor(mill1.get(0)) == getColor(mill1.get(1))) && (c == getColor(mill1.get(0)))) { numberMills++; } if ((getColor(mill2.get(0)) == getColor(mill2.get(1))) && (c == getColor(mill2.get(0)))) { numberMills++; } return numberMills; } }