Checkers game

  1. /*
  2.  * Human.java
  3.  *
  4.  * Created on 26. november 2004, 10:11
  5.  */
  6.  
  7. package checkers;
  8. import jess.*;
  9. import java.util.LinkedList;
  10. import java.util.ListIterator;
  11. import java.util.StringTokenizer;
  12. import java.io.InputStreamReader;
  13. import java.io.BufferedReader;
  14. import java.io.FileInputStream;
  15. import java.io.FileNotFoundException;
  16. import java.io.IOException;
  17. /**
  18.  * Human player
  19.  * @author k380h11
  20.  */
  21.  
  22.  
  23. public class Human extends Player{
  24.    
  25.     /**
  26.      * Creates a new instance of Human
  27.      * @param id name of the player
  28.      * @param color color of the player
  29.      */
  30.     public Human(String id, boolean color) {
  31.         super(id, color);
  32.     }
  33.  
  34.  
  35.         /**
  36.          * This method is used for the human player to enter the commands
  37.          * of what one whats to do
  38.          */
  39.    
  40.     public void play() {
  41.         BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
  42.         boolean continu = true;
  43.         do {
  44.             continu = true;
  45.             try {
  46.                 StringTokenizer st = null;
  47.                 do {
  48.                     try {
  49.                         System.out.print("CMD " + (Checker.getInstance().getTurn() ? "white" : "red") + " >");
  50.                         st = new StringTokenizer(in.readLine());
  51.                     } catch (IOException e){ System.err.println(e);}
  52.                 } while (st.countTokens() < 1);
  53.                
  54.                 int AgumentNumber= st.countTokens()-1;
  55.                 String line[] = new String[AgumentNumber];
  56.                 String Command = st.nextToken().toLowerCase();
  57.                
  58.                 for (int i = 0;st.hasMoreTokens(); i++)
  59.                     line[i] = st.nextToken();
  60.                
  61.                 if (Command.equals("print")){
  62.                     if (line[0].equals("board"))
  63.                         System.out.println(Board.getInstance());
  64.                     else if (line[0].equals("grid"))
  65.                         System.out.println(Grid.getInstance());
  66.                     else if (line[0].equals("piece")) {
  67.                         Piece p = Board.select((short) Integer.parseInt(line[1]), Boolean.getBoolean(line[2]));
  68.                         System.out.println(p);
  69.                     } else System.out.println("syntax is: print <object> " +
  70.                     "where <object> is board or grid or piece");
  71.                 }
  72.                 else if (Command.equals("move")) {
  73.                     Piece p = selectPiece(in, color) ;
  74.                     System.out.println("\n posible movement:");
  75.                     if (p != null) {
  76.                         Grid.Square sq[] =new Grid.Square[4];
  77.                         sq[0] = p.getNLS();
  78.                         sq[1] = p.getNRS();
  79.                         sq[2] = p.getPLS();
  80.                         sq[3] = p.getPRS();
  81.                        
  82.                         if (sq[0].isFree() && sq[0].isLegal()){
  83.                             System.out.println(sq[0]);
  84.                         } else sq[0] = null;
  85.                        
  86.                         if (sq[1].isFree() && sq[1].isLegal()) {
  87.                             System.out.println(sq[1]);
  88.                         } else sq[1] = null;
  89.                        
  90.                         if (sq[2].isFree() && sq[2].isLegal() && p.isKing()) {
  91.                             System.out.println(sq);
  92.                         } else sq[2] = null;
  93.                        
  94.                         if (sq[3].isFree() && sq[3].isLegal()&& p.isKing()) {
  95.                             System.out.println(sq);
  96.                         } else sq[3] = null;
  97.                        
  98.                         if (sq[0] == null && sq[1] == null && sq[2] == null && sq[3] == null)
  99.                             System.out.println("actualy, this piece can not be moved");
  100.                         else {
  101.                             Grid.Square s = selectSquare(in);
  102.                             if (s!= null) {
  103.                                 if (s.equals(sq[0]) || s.equals(sq[1]) || s.equals(sq[2]) || s.equals(sq[3])) {
  104.                                     p.move(s);
  105.                                     continu = false;
  106.                                 } else {System.out.println("This square is not allowed");}
  107.                             } else {
  108.                                 System.out.println("error on the command");
  109.                             }
  110.                         }
  111.                     }
  112.                 }
  113.                 else if (Command.equals("jump")) {
  114.                     Piece p = selectPiece(in, color) ;
  115.                    
  116.                     Grid.Square sqJ[] =new Grid.Square[4];
  117.                     Grid.Square sq[] =new Grid.Square[4];
  118.                     sqJ[0] = p.getNLS();
  119.                     sqJ[1] = p.getNRS();
  120.                     sqJ[2] = p.getPLS();
  121.                     sqJ[3] = p.getPRS();
  122.                    
  123.                     sq[0] = p.getNNLS();
  124.                     sq[1] = p.getNNRS();
  125.                     sq[2] = p.getPPLS();
  126.                     sq[3] = p.getPPRS();
  127.                    
  128.                     System.out.println("\n posible jump:");
  129.                    
  130.                     if (sq[0].isFree() && sq[0].isLegal() && !sqJ[0].isFree()
  131.                     && sqJ[0].PieceHasNotTheColor(p.getColor())
  132.                     ) {System.out.println(sq[0].getPiece());}
  133.                     else sqJ[0] = null;
  134.                    
  135.                     if (sq[1].isFree() && sq[1].isLegal() && !sqJ[1].isFree()
  136.                     && sqJ[1].PieceHasNotTheColor(p.getColor())
  137.                     ) {System.out.println(sq[1].getPiece());}
  138.                     else sqJ[1] = null;
  139.                    
  140.                     if (sq[2].isFree() && sq[2].isLegal() && !sqJ[2].isFree()
  141.                     && sqJ[2].PieceHasNotTheColor(p.getColor())
  142.                     && p.isKing()
  143.                     ) {System.out.println(sq[2].getPiece());}
  144.                     else sqJ[2] = null;
  145.                    
  146.                     if (sq[3].isFree() && sq[3].isLegal() && !sqJ[3].isFree()
  147.                     && sqJ[3].PieceHasNotTheColor(p.getColor())
  148.                     && p.isKing()
  149.                     ) {System.out.println(sq[3].getPiece());}
  150.                     else sqJ[3] = null;
  151.                    
  152.                     if (sqJ[0] == null && sqJ[1] == null && sqJ[2] == null && sqJ[3] == null)
  153.                         System.out.println("actualy, this piece can not jump any other");
  154.                     else {
  155.                         Piece pToRemove = selectPiece(in, !color) ;
  156.                        
  157.                         if (p != null && pToRemove != null) {
  158.                             Grid.Square s = pToRemove.getSquare();
  159.                             if (s.equals(sqJ[0]) || s.equals(sqJ[1]) || s.equals(sqJ[2]) || s.equals(sqJ[3])) {
  160.                                 p.jump(s);
  161.                                 continu = false;
  162.                             } else {System.out.println("This piece is not allowed");}
  163.                         } else {
  164.                             System.out.println("error on the command");
  165.                         }
  166.                     }
  167.                 }
  168.                 else if (Command.equals("connect")) {
  169.                     Checker.r.executeCommand("(load-package jessmr.pkg)");
  170.                     int SMRNumber = 0;
  171.                     Checker.r.executeCommand("(SMRConnect smr"+ SMRNumber +")");
  172.                     Checker.r.executeCommand("(batch x)");
  173.                     Checker.r.executeCommand("(go 2)");
  174.                 }
  175.                 else if (Command.equals("SMR-move")) {
  176.                     Grid.Square sInit = selectSquare(in);
  177.                     int initPosX = sInit.getX();
  178.                     int initPosY = sInit.getY();
  179.                    
  180.                     Grid.Square sFinal = selectSquare(in);
  181.                     int finalPosX = sFinal.getX();
  182.                     int finalPosY = sFinal.getY();
  183.                    
  184.                     Checker.r.executeCommand("(assert(Move(init-pos-x " + initPosX +")(init-pos-y " +initPosY + ")(final-pos-x " + finalPosX +")(final-pos-x " + finalPosY + ")))");
  185.                     continu = false;
  186.                 }
  187.                 else if (Command.equals("SMR-jump")) {
  188.                    
  189.                 }
  190.                 else if (Command.equals("jess")) {
  191.                     String cmd;
  192.                     while (!(cmd = in.readLine()).equals("quit")) {
  193.                         Checker.r.executeCommand(cmd);
  194.                     }
  195.                 }
  196.                 else if (Command.equals("exit")) {
  197.                     String cmd;
  198.                     while (!(cmd = in.readLine()).equals("quit")) {
  199.                         Checker.r.executeCommand(cmd);
  200.                     }
  201.                 }
  202.                 else {
  203.                     System.out.println("Unknown command");
  204.                 }
  205.                
  206.             } catch (JessException e) {
  207.                 System.err.println(e);
  208.             } catch (IOException e) {
  209.                 System.err.println(e);
  210.             }
  211.         } while (continu);
  212.         next.hasTurn();
  213.     }
  214.    
  215.     /**
  216.      * This method provides a friendly way to ask the user to enter information about a specified square.
  217.      * @param in The input stream where the message will be displayed
  218.      * @throws IOException If the input stream can not be read
  219.      * @return The selected square
  220.      */    
  221.     static public Grid.Square selectSquare(BufferedReader in) throws IOException {
  222.         System.out.println("Select a square :");
  223.        
  224.         int row = 0;
  225.         int col = 0;
  226.         try {
  227.             System.out.print(" row :");
  228.             row = Integer.parseInt(in.readLine());
  229.             System.out.print(" col :");
  230.             col = Integer.parseInt(in.readLine());
  231.         } catch (NumberFormatException e) {System.out.println("row and col have to be a number");}
  232.        
  233.         return Grid.getSquare(row ,  col);
  234.     }
  235.     /**
  236.      * This method provides a friendly way to ask the user to enter information about a specified pieces nr.
  237.      * @return The selected piece's nr. and color
  238.      * @param color color of the piece selected
  239.      * @param in The input stream where the message will be displayed
  240.      * @throws IOException If the input stream can not be read
  241.      */    
  242.  
  243.     static public Piece selectPiece(BufferedReader in, boolean color) throws IOException {
  244.         System.out.println("Select a piece :");
  245.         System.out.print(" number :");
  246.         Piece p = null;
  247.         try {
  248.             int num = Integer.parseInt(in.readLine());
  249.             p = Board.select(num, color);
  250.         } catch (NumberFormatException e) {System.out.println("the piece has to be a number");}
  251.         System.out.println(p);
  252.         return p;
  253.     }
  254. }
  255.  
  256.  

contact - link to this site