/**
* Muehlegame
* Copyright (c) 2015, Thomas Ammann, Johannes Finckh
*
* @author Thomas Amann, Johannes Finckh
* @version 1.0
*/
package view;
import controller.IController;
import model.IPlayer;
import observer.IObserver;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
import java.util.logging.Logger;
public class Tui implements IObserver {
private IController controller;
private Scanner sc = new Scanner(System.in);
private Logger logger = Logger.getLogger("Muehle");
public Tui(IController controller) {
this.controller = controller;
controller.registerObserver(this);
this.display();
}
private void loggerMethod(String log) {
logger.info("\n" + log);
}
public boolean handleInput(int vertex) {
if (controller.getCurrentStonesToDelete() > 0) {
controller.millDeleteStone(vertex);
} else if (controller.requireInitial()) {
if (!controller.setStone(vertex)) {
String log = "Falsche Eingabe!";
this.loggerMethod(log);
}
} else {
String log;
log = "Bitte Endknoten eingeben: ";
this.loggerMethod(log);
int end = sc.nextInt();
if (!controller.moveStone(vertex, end)) {
log = "Falsche Eingabe!";
this.loggerMethod(log);
}
}
return true;
}
public String display() {
String log;
log = "%1-----------%2-----------%3\t\t" + "1-----------2-----------3\n" +
"| | |\t\t" + "| | |\n" +
"| %4-------%5-------%6 |\t\t" + "| 4-------5-------6 |\n" +
"| | | | |\t\t" + "| | | | |\n" +
"| | %7---%8---%9 | |\t\t" + "| | 7---8---9 | |\n" +
"| | | | | |\t\t" + "| | | | | |\n" +
"%10---%11---%12 %13---%14---%15\t\t" + "10--11--12 13--14--15\n" +
"| | | | | |\t\t" + "| | | | | |\n" +
"| | %16---%17---%18 | |\t\t" + "| | 16--17--18 | |\n" +
"| | | | |\t\t" + "| | | | |\n" +
"| %19-------%20-------%21 |\t\t" + "| 19------20------21 |\n" +
"| | |\t\t" + "| | |\n" +
"%22-----------%23-----------%24\t\t" + "22----------23----------24\n";
Map<Integer, Character> map = new HashMap<>();
for(int i = 1; i <= 24; i++) {
map.put(i, controller.getVertexColor(i));
}
StringBuilder builder = new StringBuilder(log);
for(Map.Entry<Integer, Character> e : map.entrySet()) {
String key = e.getKey().toString();
String value = e.getValue().toString();
String pattern = "%" + key;
int start = builder.indexOf(pattern);
builder.replace(start, start + pattern.length(), value);
}
this.loggerMethod(builder.toString());
return builder.toString();
}
private void clear() {
String log = "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n";
this.loggerMethod(log);
}
@Override
public void update(IPlayer currentPlayer, int anzMills, boolean gameEnded) {
String log = "";
if (gameEnded) {
log = currentPlayer.getName() + " hat gewonnen!";
} else if (anzMills > 0) {
if (anzMills == 1) {
log = currentPlayer.getName() + " hat eine Muehle, loesche einen Stein!";
} else if (anzMills == 2) {
log = currentPlayer.getName() + " hat zwei Muehlen, loesche zwei Steine!";
}
} else {
log = currentPlayer.getName() + " ist an der Reihe!";
}
this.clear();
this.display();
this.loggerMethod(log);
}
}