Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package go;
- import java.io.BufferedReader;
- import java.io.BufferedWriter;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.InputStreamReader;
- import java.io.OutputStream;
- import java.io.OutputStreamWriter;
- import java.util.InputMismatchException;
- import java.util.Scanner;
- import java.util.logging.Level;
- import java.util.logging.Logger;
- /**
- *
- * @author Chris
- */
- public class Go_ConsoleIO implements Go_IO {
- int size=0;
- Board myboard;
- InputStreamReader input = new InputStreamReader(System.in);
- OutputStreamWriter output = new OutputStreamWriter(System.out);
- // Singleton
- private static Go_ConsoleIO instance = null;
- private Go_ConsoleIO() {
- }
- public static Go_ConsoleIO getInstance() {
- if (instance == null) {
- instance = new Go_ConsoleIO();
- }
- return instance;
- }
- @Override
- public void setBoard(Board b){
- myboard=b;
- }
- @Override
- public void printTurn(int turn){
- try {
- printTurn(turn , output);
- } catch (IOException ex) {
- Logger.getLogger(Go_ConsoleIO.class.getName()).log(Level.SEVERE, null, ex);
- }
- }
- public void printTurn(int turn, OutputStreamWriter outputstream) throws IOException{
- BufferedWriter writer = new BufferedWriter(outputstream);
- clear();
- writer.newLine();
- writer.write("------ TURN "+turn+ " ------");
- writer.flush();
- }
- @Override
- public void printCapturedStones(int p1stones, int p2stones){
- try {
- printCapturedStones(p1stones, p2stones,output);
- } catch (IOException ex) {
- Logger.getLogger(Go_ConsoleIO.class.getName()).log(Level.SEVERE, null, ex);
- }
- }
- public void printCapturedStones(int p1stones, int p2stones, OutputStreamWriter outputstream) throws IOException {
- BufferedWriter writer = new BufferedWriter(outputstream);
- writer.newLine();
- writer.write("--- CAPTURED STONES ---");
- writer.newLine();
- writer.write("Black: "+p1stones+" White: "+p2stones);
- writer.newLine();
- writer.flush();
- }
- @Override
- public void printBoard(){
- try {
- printBoard(output);
- } catch (IOException ex) {
- Logger.getLogger(Go_ConsoleIO.class.getName()).log(Level.SEVERE, null, ex);
- }
- }
- public void printBoard(OutputStreamWriter outputstream) throws IOException{
- BufferedWriter writer = new BufferedWriter(outputstream);
- String str;
- writer.newLine();
- size=myboard.getDimension();
- writer.write(" ");
- for(int i=65; i<(size+65);i++){
- char b = (char) i;
- str=" "+b+" ";
- writer.write(str);
- }
- writer.newLine();
- for(int y = size - 1; y >= 0 ; y--) {
- writer.write(y + 1 + "| ");
- for(int x = y * size; x < size * y + size; x++) {
- String stone;
- if (myboard.getStone(x).getColor() == 1) {
- stone = "B";
- }
- else if (myboard.getStone(x).getColor() == 2) {
- stone = "W";
- }
- else {
- stone = " ";
- }
- // System.out.print("["+myboard.getStone(x).getColor()+"]");
- str="["+stone+"]";
- writer.write(str);
- }
- writer.newLine();
- }
- writer.newLine();
- writer.flush();
- /*for(int i=0; i<size;i++){
- System.out.println(" "+(i+1)+" ");
- for(int y=i; y<size;y++){
- System.out.print("("+myboard.getStone(i+(y*size)).getColor()+")"); //TODO beautify this
- //TODO unsicher, ob try/catch noch n?tig zwecks theoretisch m?glichem myboard=null
- }
- }*/
- }
- @Override
- public int getPlayerInput (int id){
- try {
- return(getPlayerInput(id, input, output));
- } catch (IOException ex) {
- Logger.getLogger(Go_ConsoleIO.class.getName()).log(Level.SEVERE, null, ex);
- }
- return -9999;
- }
- public int getPlayerInput (int id, InputStreamReader inputstream, OutputStreamWriter outputstream) throws IOException {
- BufferedReader reader = new BufferedReader(inputstream);
- BufferedWriter writer = new BufferedWriter(outputstream);
- size = myboard.getDimension();
- String yourmove = "";
- if (id == 1) {
- yourmove = "Black";
- }
- else if (id == 2) {
- yourmove = "White";
- }
- int input = -1;
- int x = 0;
- int y = 0;
- while(input<0){
- writer.newLine();
- writer.write("Available commands: 'undo', 'surrender', 'pass' or an existing coordinate (for example: A1)");
- writer.newLine();
- writer.write("Your move (" + yourmove + "): ");
- writer.flush();
- String inputstring = reader.readLine();
- // undo
- if(inputstring.equals("undo")) return -1;
- // pass
- if(inputstring.equals("pass")) return -2;
- // surrender
- if(inputstring.equals("surr") || inputstring.equals("surrender")) return -3;
- if (inputstring.length() != 2) {
- writer.newLine();
- writer.write("Please enter a valid coordinate (for example: A1)!");
- }
- else {
- char first = inputstring.charAt(0);
- char second = inputstring.charAt(1);
- if (Character.isLetter(first) && Character.isDigit(second)) {
- x = (int) first;
- y = (int) second;
- if (x >= 97) {
- x = x - 97;
- }
- else {
- x = x - 65;
- }
- y = y - 49;
- if ((x >= 0 && x < size) && (y >= 0 && y < size)) {
- input = x + (y * size);
- }
- else {
- writer.write("Please enter a valid coordinate (for example: A1)!");
- }
- }
- else {
- writer.write("Please enter a valid coordinate (for example: A1)!");
- }
- }
- /* char[] c = inputstring.toCharArray();
- for(int i=0; i<c.length ; i++){
- if(c[i]!=' '){
- if(x<=0){
- if(Character.isLetter(c[i])){
- x = c[i] -0;
- if(x>=97) x=x-32;
- x=x-65;
- }
- }
- else{
- int num1 = c[i]-49;
- if(num1<9 &&num1>-1){
- if(y<=0) y=num1;
- else y=y*10+num1;
- }
- }
- }
- }
- if(x<=size && y<=size) input=x+(size*y);
- if(input<0){
- System.out.println("The position you entered could not get matched:");
- } */
- }
- return input;
- }
- @Override
- public int getMenu(){
- int r=-1;
- try {
- r=getMenu(input, output);
- } catch (IOException ex) {
- Logger.getLogger(Go_ConsoleIO.class.getName()).log(Level.SEVERE, null, ex);
- }
- return r;
- }
- public int getMenu(InputStreamReader inputstream, OutputStreamWriter outputstream) throws IOException {
- BufferedReader reader = new BufferedReader(inputstream);
- BufferedWriter writer = new BufferedWriter(outputstream);
- int r=0;
- clear();
- writer.newLine();
- writer.write("----- MAIN MENU -----");
- writer.newLine();
- writer.write("1: Start the game");
- writer.newLine();
- writer.write("2: Configure game settings");
- writer.newLine();
- writer.write("Select an option: ");
- writer.flush();
- while(r==0){
- int num = Integer.parseInt(reader.readLine());
- if (num==1 || num==2) r=num;
- else {
- writer.write("Not a valid selection, please try again: ");
- writer.flush();
- }
- }
- return r;
- }
- @Override
- public int getDimension() {
- int r=-1;
- while(r==-1){
- try {
- r=getDimension(input, output);
- } catch (IOException ex) {
- Logger.getLogger(Go_ConsoleIO.class.getName()).log(Level.SEVERE, null, ex);
- }
- }
- return r;
- }
- public int getDimension(InputStreamReader inputstream, OutputStreamWriter outputstream) throws IOException {
- BufferedReader reader = new BufferedReader(inputstream);
- BufferedWriter writer = new BufferedWriter(outputstream);
- clear();
- writer.newLine();
- writer.write("----- CONFIGURATION -----");
- int r=0;
- writer.newLine();
- writer.write("Choose the size of the board (must be 9, 13 or 19): ");
- writer.flush();
- while(r!=9 || r!=13 || r!=19) {
- r=Integer.parseInt(reader.readLine());
- if (r!=9 && r!=13 && r!=19) {
- writer.newLine();
- writer.write("Not a valid board size, please choose 9, 13 and 19: ");
- writer.flush();
- }
- }
- setSize(r);
- return r;
- }
- @Override
- public int getPlayer(int i){
- int r=-1;
- while(r==-1){
- try {
- r=getPlayer(i,input,output);
- } catch (IOException ex) {
- Logger.getLogger(Go_ConsoleIO.class.getName()).log(Level.SEVERE, null, ex);
- }
- }
- return r;
- }
- public int getPlayer(int i,InputStreamReader inputstream, OutputStreamWriter outputstream) throws IOException {
- BufferedReader reader = new BufferedReader(inputstream);
- BufferedWriter writer = new BufferedWriter(outputstream);
- // clear();
- int r=0;
- writer.newLine();
- writer.write("Enter '1' if you want the player to be human controlled, else enter '2'");
- writer.flush();
- if(i==1)writer.write("Player 1 (Black): ");
- else if(i==2)writer.write("Player 2 (White): ");
- writer.flush();
- while(r<1 || r>2){
- r=Integer.parseInt(reader.readLine());
- if(r<1||r>2) {
- writer.newLine();
- writer.write("Not a valid choice, enter '1' for human or '2' for AI: ");
- writer.flush();
- }
- }
- return r;
- }
- public void printUndoError(){
- System.out.println("Undo not allowed at this point!");
- }
- private void clear(){
- System.out.print("\033[H\033[2J");
- }
- /* private int getInput(){
- int num;
- Scanner input = new Scanner(System.in);
- try{
- num= input.nextInt();
- }
- catch(InputMismatchException ex){
- System.out.println("Incorrect input: an integer is required");
- return -1;
- }
- return num;
- }*/
- private void setSize(int s){
- size=s;
- }
- @Override
- public void printForfeitMessage(int loser){
- try {
- printForfeitMessage(loser, input, output);
- } catch (IOException ex) {
- Logger.getLogger(Go_ConsoleIO.class.getName()).log(Level.SEVERE, null, ex);
- }
- }
- public void printForfeitMessage(int loser,InputStreamReader inputstream, OutputStreamWriter outputstream) throws IOException {
- BufferedReader reader = new BufferedReader(inputstream);
- BufferedWriter writer = new BufferedWriter(outputstream);
- System.out.println("");
- switch(loser){
- case 1:
- writer.newLine();
- writer.write("----- WHITE WON THE GAME VIA FORFEIT -----");
- writer.flush();
- break;
- case 2:
- writer.newLine();
- writer.write("----- BLACK WON THE GAME VIA FORFEIT -----");
- writer.flush();
- break;
- }
- System.out.println("Thanks for playing!");
- }
- @Override
- public void printEndGameMessage(double p1score, double p2score){
- //printEndGameMessage()
- }
- public void printEndGameMessage(double p1score, double p2score, OutputStreamWriter outputstream) {
- BufferedWriter writer = new BufferedWriter(outputstream);
- System.out.println("----- GAME HAS ENDED -----");
- System.out.println();
- System.out.println("Final score (captured stones + komi): BLACK " + p1score + " - " + p2score + " WHITE");
- System.out.println("Thanks for playing. You can now calculate the winner!");
- System.out.println();
- }
- @Override
- public void printBackToMenuMessage() {
- Scanner scanner = new Scanner(System.in);
- System.out.print("Press ENTER once you are ready to return to the main menu... ");
- scanner.nextLine();
- }
- @Override
- public void printNoMoreValidPlaysMessage(int player){
- try {
- printNoMoreValidPlaysMessage(player,output);
- } catch (IOException ex) {
- Logger.getLogger(Go_ConsoleIO.class.getName()).log(Level.SEVERE, null, ex);
- }
- }
- public void printNoMoreValidPlaysMessage(int player, OutputStreamWriter outputstream) throws IOException {
- BufferedWriter writer = new BufferedWriter(outputstream);
- Scanner scanner = new Scanner(System.in);
- writer.newLine();
- switch(player) {
- case(1):
- writer.write("Black has no more valid plays left.");
- writer.flush();
- break;
- case(2):
- writer.write("White has no more valid plays left.");
- break;
- }
- writer.write("Press ENTER to confirm... ");
- writer.flush();
- scanner.nextLine();
- }
- @Override
- public void printNotValidTurnMessage() {
- Scanner scanner = new Scanner(System.in);
- System.out.print("You can't place a stone on this field! Press ENTER to confirm...");
- scanner.nextLine();
- }
- @Override
- public int getStartingPlayer(){
- int r=-1;
- while(r==-1){
- try {
- r=getStartingPlayer(input,output);
- } catch (IOException ex) {
- Logger.getLogger(Go_ConsoleIO.class.getName()).log(Level.SEVERE, null, ex);
- }
- }
- return r;
- }
- public int getStartingPlayer(InputStreamReader inputstream, OutputStreamWriter outputstream) throws IOException {
- BufferedReader reader = new BufferedReader(inputstream);
- BufferedWriter writer = new BufferedWriter(outputstream);
- writer.newLine();
- writer.write("Who should start the game? (Enter 'human' or 'AI'): ");
- writer.flush();
- boolean run = true;
- while (run) {
- String inputstring = reader.readLine();
- if (inputstring.equals("human") || inputstring.equals("Human")) {
- return 1;
- }
- else if (inputstring.equals("ai") || inputstring.equals("AI")) {
- return 2;
- }
- else {
- writer.newLine();
- writer.write("Invalid command, please try again: ");
- writer.flush();
- }
- }
- return 0;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement