Advertisement
kivaari

Untitled

Jan 6th, 2017
125
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 16.26 KB | None | 0 0
  1. package go;
  2.  
  3. import java.io.BufferedReader;
  4. import java.io.BufferedWriter;
  5. import java.io.IOException;
  6. import java.io.InputStream;
  7. import java.io.InputStreamReader;
  8. import java.io.OutputStream;
  9. import java.io.OutputStreamWriter;
  10. import java.util.InputMismatchException;
  11. import java.util.Scanner;
  12. import java.util.logging.Level;
  13. import java.util.logging.Logger;
  14.  
  15.  
  16. /**
  17.  *
  18.  * @author Chris
  19.  */
  20. public class Go_ConsoleIO implements Go_IO {
  21.    
  22.    
  23.     int size=0;
  24.     Board myboard;
  25.     InputStreamReader input = new InputStreamReader(System.in);
  26.     OutputStreamWriter output = new OutputStreamWriter(System.out);
  27.    
  28.     // Singleton
  29.    
  30.     private static Go_ConsoleIO instance = null;
  31.    
  32.     private Go_ConsoleIO() {
  33.        
  34.     }
  35.    
  36.     public static Go_ConsoleIO getInstance() {
  37.         if (instance == null) {
  38.             instance = new Go_ConsoleIO();
  39.         }
  40.         return instance;
  41.     }
  42.  
  43.     @Override
  44.     public void setBoard(Board b){
  45.         myboard=b;
  46.     }
  47.  
  48.     @Override
  49.     public void printTurn(int turn){
  50.         try {
  51.             printTurn(turn , output);
  52.         } catch (IOException ex) {
  53.             Logger.getLogger(Go_ConsoleIO.class.getName()).log(Level.SEVERE, null, ex);
  54.         }
  55.     }
  56.     public void printTurn(int turn, OutputStreamWriter outputstream) throws IOException{
  57.         BufferedWriter writer = new BufferedWriter(outputstream);
  58.         clear();
  59.         writer.newLine();
  60.         writer.write("------ TURN "+turn+ " ------");
  61.         writer.flush();
  62.     }
  63.  
  64.     @Override
  65.     public void printCapturedStones(int p1stones, int p2stones){
  66.         try {
  67.             printCapturedStones(p1stones, p2stones,output);
  68.         } catch (IOException ex) {
  69.             Logger.getLogger(Go_ConsoleIO.class.getName()).log(Level.SEVERE, null, ex);
  70.         }
  71.     }
  72.    
  73.     public void printCapturedStones(int p1stones, int p2stones, OutputStreamWriter outputstream) throws IOException {
  74.         BufferedWriter writer = new BufferedWriter(outputstream);
  75.         writer.newLine();
  76.         writer.write("--- CAPTURED STONES ---");
  77.         writer.newLine();
  78.         writer.write("Black: "+p1stones+"    White: "+p2stones);
  79.         writer.newLine();
  80.         writer.flush();
  81.     }
  82.  
  83.     @Override
  84.     public void printBoard(){
  85.         try {
  86.             printBoard(output);
  87.         } catch (IOException ex) {
  88.             Logger.getLogger(Go_ConsoleIO.class.getName()).log(Level.SEVERE, null, ex);
  89.         }
  90.     }
  91.    
  92.     public void printBoard(OutputStreamWriter outputstream) throws IOException{
  93.    
  94.         BufferedWriter writer = new BufferedWriter(outputstream);
  95.         String str;
  96.         writer.newLine();
  97.         size=myboard.getDimension();
  98.         writer.write("   ");
  99.         for(int i=65; i<(size+65);i++){
  100.             char b = (char) i;
  101.             str=" "+b+" ";
  102.             writer.write(str);
  103.         }
  104.  
  105.         writer.newLine();
  106.         for(int y = size - 1; y >= 0 ; y--) {
  107.             writer.write(y + 1 + "| ");
  108.  
  109.             for(int x = y * size; x < size * y + size; x++) {
  110.                 String stone;
  111.                 if (myboard.getStone(x).getColor() == 1) {
  112.                     stone = "B";
  113.                 }
  114.                 else if (myboard.getStone(x).getColor() == 2) {
  115.                     stone = "W";
  116.                 }
  117.                 else {
  118.                     stone = " ";
  119.                 }
  120.  
  121.                 // System.out.print("["+myboard.getStone(x).getColor()+"]");
  122.                 str="["+stone+"]";
  123.                 writer.write(str);
  124.                
  125.  
  126.             }
  127.  
  128.             writer.newLine();        
  129.         }
  130.  
  131.         writer.newLine();
  132.         writer.flush();
  133.     /*for(int i=0; i<size;i++){
  134.         System.out.println(" "+(i+1)+" ");
  135.         for(int y=i; y<size;y++){
  136.             System.out.print("("+myboard.getStone(i+(y*size)).getColor()+")");      //TODO beautify this
  137.             //TODO unsicher, ob try/catch noch n?tig zwecks theoretisch m?glichem myboard=null
  138.         }
  139.     }*/
  140.     }
  141.        
  142.     @Override
  143.     public int getPlayerInput (int id){
  144.         try {
  145.             return(getPlayerInput(id, input, output));
  146.         } catch (IOException ex) {
  147.             Logger.getLogger(Go_ConsoleIO.class.getName()).log(Level.SEVERE, null, ex);
  148.         }
  149.         return -9999;
  150.     }
  151.     public int getPlayerInput (int id, InputStreamReader inputstream, OutputStreamWriter outputstream) throws IOException {
  152.         BufferedReader reader = new BufferedReader(inputstream);
  153.         BufferedWriter writer = new BufferedWriter(outputstream);
  154.         size = myboard.getDimension();
  155.         String yourmove = "";
  156.         if (id == 1) {
  157.             yourmove = "Black";
  158.         }
  159.         else if (id == 2) {
  160.             yourmove = "White";
  161.         }
  162.         int input = -1;
  163.         int x = 0;
  164.         int y = 0;
  165.         while(input<0){
  166.             writer.newLine();
  167.             writer.write("Available commands: 'undo', 'surrender', 'pass' or an existing coordinate (for example: A1)");
  168.             writer.newLine();
  169.             writer.write("Your move (" + yourmove + "): ");
  170.             writer.flush();
  171.             String inputstring = reader.readLine();
  172.             // undo
  173.             if(inputstring.equals("undo")) return -1;
  174.             // pass
  175.             if(inputstring.equals("pass")) return -2;
  176.             // surrender
  177.             if(inputstring.equals("surr") || inputstring.equals("surrender")) return -3;
  178.            
  179.             if (inputstring.length() != 2) {
  180.                 writer.newLine();
  181.                 writer.write("Please enter a valid coordinate (for example: A1)!");
  182.             }
  183.             else {
  184.                 char first = inputstring.charAt(0);
  185.                 char second = inputstring.charAt(1);
  186.                
  187.                 if (Character.isLetter(first) && Character.isDigit(second)) {
  188.                     x = (int) first;
  189.                     y = (int) second;
  190.                    
  191.                     if (x >= 97) {
  192.                         x = x - 97;
  193.                     }
  194.                     else {
  195.                         x = x - 65;
  196.                     }
  197.                    
  198.                     y = y - 49;
  199.                    
  200.                     if ((x >= 0 && x < size) && (y >= 0 && y < size)) {
  201.                         input = x + (y * size);
  202.                     }
  203.                     else {
  204.                         writer.write("Please enter a valid coordinate (for example: A1)!");
  205.                     }
  206.                 }
  207.                 else {
  208.                     writer.write("Please enter a valid coordinate (for example: A1)!");
  209.                 }
  210.             }
  211.                    
  212.             /* char[] c = inputstring.toCharArray();
  213.             for(int i=0; i<c.length ; i++){
  214.                 if(c[i]!=' '){
  215.                     if(x<=0){
  216.                         if(Character.isLetter(c[i])){
  217.                        
  218.                    
  219.                             x = c[i] -0;
  220.                             if(x>=97) x=x-32;
  221.                             x=x-65;
  222.                         }  
  223.                     }
  224.                     else{
  225.                     int num1 = c[i]-49;
  226.                         if(num1<9 &&num1>-1){
  227.                         if(y<=0) y=num1;
  228.                         else y=y*10+num1;
  229.                         }
  230.                     }
  231.                 }
  232.            
  233.             }
  234.             if(x<=size && y<=size) input=x+(size*y);
  235.             if(input<0){
  236.                 System.out.println("The position you entered could not get matched:");
  237.            
  238.             } */
  239.            
  240.         }
  241.  
  242.         return input;
  243.     }
  244.    
  245.     @Override
  246.    public int getMenu(){
  247.        int r=-1;
  248.         try {
  249.             r=getMenu(input, output);
  250.         } catch (IOException ex) {
  251.             Logger.getLogger(Go_ConsoleIO.class.getName()).log(Level.SEVERE, null, ex);
  252.         }
  253.         return r;
  254.     }
  255.     public int getMenu(InputStreamReader inputstream, OutputStreamWriter outputstream) throws IOException {
  256.         BufferedReader reader = new BufferedReader(inputstream);
  257.         BufferedWriter writer = new BufferedWriter(outputstream);
  258.         int r=0;
  259.         clear();
  260.         writer.newLine();
  261.         writer.write("----- MAIN MENU -----");
  262.         writer.newLine();
  263.         writer.write("1: Start the game");
  264.         writer.newLine();
  265.         writer.write("2: Configure game settings");
  266.         writer.newLine();
  267.         writer.write("Select an option: ");
  268.         writer.flush();
  269.         while(r==0){
  270.             int num = Integer.parseInt(reader.readLine());
  271.             if (num==1 || num==2) r=num;
  272.             else {
  273.                 writer.write("Not a valid selection, please try again: ");
  274.                 writer.flush();
  275.             }
  276.            
  277.             }
  278.         return r;
  279.     }
  280.    
  281.     @Override
  282.     public int getDimension() {
  283.         int r=-1;
  284.         while(r==-1){
  285.             try {
  286.                 r=getDimension(input, output);
  287.             } catch (IOException ex) {
  288.                 Logger.getLogger(Go_ConsoleIO.class.getName()).log(Level.SEVERE, null, ex);
  289.             }
  290.         }
  291.         return r;
  292.     }
  293.     public int getDimension(InputStreamReader inputstream, OutputStreamWriter outputstream) throws IOException {
  294.         BufferedReader reader = new BufferedReader(inputstream);
  295.         BufferedWriter writer = new BufferedWriter(outputstream);
  296.         clear();
  297.         writer.newLine();
  298.         writer.write("----- CONFIGURATION -----");
  299.         int r=0;
  300.         writer.newLine();
  301.         writer.write("Choose the size of the board (must be 9, 13 or 19): ");
  302.         writer.flush();
  303.         while(r!=9 || r!=13 || r!=19) {
  304.           r=Integer.parseInt(reader.readLine());
  305.           if (r!=9 && r!=13 && r!=19) {
  306.               writer.newLine();
  307.               writer.write("Not a valid board size, please choose 9, 13 and 19: ");
  308.               writer.flush();
  309.           }
  310.         }
  311.         setSize(r);
  312.         return r;
  313.     }
  314.    
  315.     @Override
  316.     public int getPlayer(int i){
  317.         int r=-1;
  318.         while(r==-1){
  319.             try {
  320.                 r=getPlayer(i,input,output);
  321.             } catch (IOException ex) {
  322.                 Logger.getLogger(Go_ConsoleIO.class.getName()).log(Level.SEVERE, null, ex);
  323.             }
  324.         }
  325.         return r;
  326.     }
  327.    
  328.     public int getPlayer(int i,InputStreamReader inputstream, OutputStreamWriter outputstream) throws IOException {
  329.         BufferedReader reader = new BufferedReader(inputstream);
  330.         BufferedWriter writer = new BufferedWriter(outputstream);
  331.         // clear();
  332.         int r=0;
  333.         writer.newLine();
  334.         writer.write("Enter '1' if you want the player to be human controlled, else enter '2'");
  335.         writer.flush();
  336.         if(i==1)writer.write("Player 1 (Black): ");
  337.         else if(i==2)writer.write("Player 2 (White): ");
  338.         writer.flush();
  339.         while(r<1 || r>2){
  340.             r=Integer.parseInt(reader.readLine());
  341.             if(r<1||r>2) {
  342.                 writer.newLine();
  343.                 writer.write("Not a valid choice, enter '1' for human or '2' for AI: ");
  344.                 writer.flush();
  345.             }
  346.         }
  347.         return r;
  348.     }
  349.    
  350.     public void printUndoError(){
  351.         System.out.println("Undo not allowed at this point!");
  352.     }
  353.    
  354.     private void clear(){
  355.         System.out.print("\033[H\033[2J");
  356.     }
  357.    
  358.  /*   private int getInput(){
  359.         int num;
  360.         Scanner input = new Scanner(System.in);
  361.         try{
  362.             num= input.nextInt();
  363.            
  364.         }
  365.         catch(InputMismatchException ex){
  366.            System.out.println("Incorrect input: an integer is required");
  367.            return -1;
  368.         }
  369.         return num;        
  370.     }*/
  371.    
  372.     private void setSize(int s){
  373.         size=s;
  374.     }
  375.  
  376.     @Override
  377.     public void printForfeitMessage(int loser){
  378.         try {
  379.             printForfeitMessage(loser, input, output);
  380.         } catch (IOException ex) {
  381.             Logger.getLogger(Go_ConsoleIO.class.getName()).log(Level.SEVERE, null, ex);
  382.         }
  383.     }
  384.     public void printForfeitMessage(int loser,InputStreamReader inputstream, OutputStreamWriter outputstream) throws IOException {
  385.         BufferedReader reader = new BufferedReader(inputstream);
  386.         BufferedWriter writer = new BufferedWriter(outputstream);
  387.         System.out.println("");
  388.         switch(loser){
  389.            case 1:
  390.                writer.newLine();
  391.                writer.write("----- WHITE WON THE GAME VIA FORFEIT -----");
  392.                writer.flush();
  393.                break;
  394.            
  395.            case 2:
  396.                writer.newLine();
  397.                writer.write("----- BLACK WON THE GAME VIA FORFEIT -----");
  398.                writer.flush();
  399.                break;
  400.        
  401.        }
  402.        
  403.         System.out.println("Thanks for playing!");
  404.            
  405.     }
  406.  
  407.     @Override
  408.     public void printEndGameMessage(double p1score, double p2score){
  409.         //printEndGameMessage()
  410.     }
  411.     public void printEndGameMessage(double p1score, double p2score, OutputStreamWriter outputstream) {
  412.         BufferedWriter writer = new BufferedWriter(outputstream);
  413.         System.out.println("----- GAME HAS ENDED -----");
  414.        
  415.         System.out.println();
  416.         System.out.println("Final score (captured stones + komi): BLACK " + p1score + " - " + p2score + " WHITE");
  417.         System.out.println("Thanks for playing. You can now calculate the winner!");
  418.         System.out.println();
  419.        
  420.     }
  421.  
  422.     @Override
  423.     public void printBackToMenuMessage() {
  424.         Scanner scanner = new Scanner(System.in);
  425.         System.out.print("Press ENTER once you are ready to return to the main menu... ");
  426.         scanner.nextLine();
  427.     }
  428.  
  429.     @Override
  430.     public void printNoMoreValidPlaysMessage(int player){
  431.         try {
  432.             printNoMoreValidPlaysMessage(player,output);
  433.         } catch (IOException ex) {
  434.             Logger.getLogger(Go_ConsoleIO.class.getName()).log(Level.SEVERE, null, ex);
  435.         }
  436.     }
  437.     public void printNoMoreValidPlaysMessage(int player, OutputStreamWriter outputstream) throws IOException {
  438.         BufferedWriter writer = new BufferedWriter(outputstream);
  439.         Scanner scanner = new Scanner(System.in);
  440.         writer.newLine();
  441.         switch(player) {
  442.             case(1):
  443.                
  444.                 writer.write("Black has no more valid plays left.");
  445.                 writer.flush();
  446.                 break;
  447.            
  448.             case(2):
  449.                
  450.                 writer.write("White has no more valid plays left.");
  451.                 break;
  452.         }
  453.         writer.write("Press ENTER to confirm... ");
  454.         writer.flush();
  455.         scanner.nextLine();
  456.     }
  457.  
  458.     @Override
  459.     public void printNotValidTurnMessage() {
  460.         Scanner scanner = new Scanner(System.in);
  461.         System.out.print("You can't place a stone on this field! Press ENTER to confirm...");
  462.         scanner.nextLine();
  463.        
  464.     }
  465.  
  466.     @Override
  467.     public int getStartingPlayer(){
  468.         int r=-1;
  469.         while(r==-1){
  470.             try {
  471.                 r=getStartingPlayer(input,output);
  472.             } catch (IOException ex) {
  473.                 Logger.getLogger(Go_ConsoleIO.class.getName()).log(Level.SEVERE, null, ex);
  474.             }
  475.         }
  476.         return r;
  477.     }
  478.     public int getStartingPlayer(InputStreamReader inputstream, OutputStreamWriter outputstream) throws IOException {
  479.         BufferedReader reader = new BufferedReader(inputstream);
  480.         BufferedWriter writer = new BufferedWriter(outputstream);
  481.         writer.newLine();
  482.         writer.write("Who should start the game? (Enter 'human' or 'AI'): ");
  483.         writer.flush();
  484.         boolean run = true;
  485.        
  486.         while (run) {
  487.             String inputstring = reader.readLine();
  488.            
  489.             if (inputstring.equals("human") || inputstring.equals("Human")) {
  490.                 return 1;
  491.             }
  492.             else if (inputstring.equals("ai") || inputstring.equals("AI")) {
  493.                 return 2;
  494.             }
  495.             else {
  496.                 writer.newLine();
  497.                 writer.write("Invalid command, please try again: ");
  498.                 writer.flush();
  499.             }
  500.         }
  501.         return 0;
  502.     }
  503. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement