package nl.sogyo.mancala.ui; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import nl.sogyo.mancala.bootstrap.MancalaFactory; import nl.sogyo.mancala.domein.IMancala; public class MancalaConsoleUI implements IMancalaUI { /** * Lees een regel uit de standard input en geef deze terug als String * * @return de gelezen regel */ private String leesRegelUitInput() { String regel = null; try { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); regel = reader.readLine(); } catch (IOException ioe) { ioe.printStackTrace(); } return regel; } /** * De game loop, waarbij zolang het spel nog niet is afgelopen steeds * om de volgende zet wordt gevraagd. Tussendoor wordt telkens * de stand geprint naar de standard output. * * @param args */ public void run() { int komNummer = -1; boolean klaar = false; String naamSpeler1 = null; String naamSpeler2 = null; int aantalKommen = 0; int aantalStenenPerKom = 0; System.out.print("Geef aantal kommen: "); aantalKommen = Integer.valueOf(leesRegelUitInput()).intValue(); System.out.print("Geef aantal stenen per kom: "); aantalStenenPerKom = Integer.valueOf(leesRegelUitInput()).intValue(); System.out.print("Geef naam speler1: "); naamSpeler1 = leesRegelUitInput(); System.out.print("Geef naam speler2: "); naamSpeler2 = leesRegelUitInput(); IMancala mancala = new MancalaFactory().maakMancalaSpel(naamSpeler1, naamSpeler2, aantalKommen, aantalStenenPerKom); System.out.print("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"); while (!klaar){ printStand(mancala.getStand()); System.out.println("Speel een kom " + mancala.getNaamSpelerAanDeBeurt() + ":"); try { komNummer = Integer.parseInt(leesRegelUitInput()); mancala.doeZet(komNummer); if (mancala.isAfgelopen()) { String winnaar = mancala.bepaalWinnaar(); if (winnaar == null) { System.out.println("Spel afgelopen. Het is gelijkspel!\n"); } else { System.out.println("Spel afgelopen. De winnaar is: " + winnaar + "\n"); } klaar = true; } else { System.out.print("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"); } } catch(Exception e) { e.printStackTrace(); } } } /** * Methode die de stand print naar standard out, aan de hand van * de String array die de stand informatie bevat. * * @param stand */ private void printStand(String[] stand) { String[] stenenInKommetjes = stand[1].split("\\|"); String standSpeler2 = ""; for (int i = stenenInKommetjes.length - 1; i >= 0 ; i--) { standSpeler2 += stenenInKommetjes[i]; if (i > 0) { standSpeler2 += "|"; } } System.out.println(standSpeler2); System.out.println(" " + stand[0]); } }