Advertisement
gertsog

Kalakh - Java

Dec 15th, 2019
442
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.15 KB | None | 0 0
  1. import java.util.*;
  2. import java.lang.*;
  3.  
  4. import static java.lang.System.*;
  5.  
  6. class Main
  7. {
  8.     public static void main(String[] args)
  9.     {
  10.         GameServer server = new GameServer(new HumanPlayer(), new ComputerPlayer(2));
  11.         server.play();
  12.         out.println(server.whoWon());
  13.     }
  14. }
  15.  
  16. class BoardConfiguration
  17. {
  18.     public static final String ANSI_RESET = "\u001B[0m";
  19.     public static final String ANSI_BLACK = "\u001B[30m";
  20.     public static final String ANSI_RED = "\u001B[31m";
  21.     public static final String ANSI_GREEN = "\u001B[32m";
  22.     public static final String ANSI_YELLOW = "\u001B[33m";
  23.     public static final String ANSI_BLUE = "\u001B[34m";
  24.     public static final String ANSI_PURPLE = "\u001B[35m";
  25.     public static final String ANSI_CYAN = "\u001B[36m";
  26.     public static final String ANSI_WHITE = "\u001B[37m";
  27.  
  28.     private byte B[];
  29.     private int Turn;
  30.     private boolean Empty;
  31.     int Value;
  32.  
  33.     public BoardConfiguration()
  34.     {
  35.         B = new byte[14];
  36.         for (int i = 0; i < 6; i++)
  37.             B[i] = 6;
  38.         for (int i = 7; i < 13; i++)
  39.             B[i] = 6;
  40.         Turn = 0;
  41.         Empty = false;
  42.     }
  43.  
  44.     public boolean move( int bowl )
  45.     {
  46.         int inhalt;
  47.         int h;
  48.         boolean kalah = false;
  49.  
  50.         if (Turn == 0) // Player1
  51.         {
  52.             h = bowl;
  53.             inhalt = B[h];
  54.             B[h] = 0;
  55.  
  56.             while (inhalt > 0)
  57.             {
  58.                 h++;
  59.                 if (h >= 13)
  60.                     h = 0;
  61.                 B[h]++;
  62.                 inhalt--;
  63.             }
  64.  
  65.             if (h < 6 && B[h] == 1)
  66.                 { B[h] = 0; B[6]++; B[6] += B[12 - h]; B[12 - h] = 0; }
  67.  
  68.             if (h != 6)
  69.                 Turn = 1;
  70.             else
  71.                 kalah = true;
  72.         }
  73.         else         // Player2
  74.         {
  75.             h = 7 + bowl;
  76.             inhalt = B[h];
  77.             B[h] = 0;
  78.             while (inhalt > 0)
  79.             {
  80.                 h++;
  81.                 if (h == 6)
  82.                     h=7;
  83.                 if (h >= 14)
  84.                     h=0;
  85.                 B[h]++;
  86.                 inhalt--;
  87.             }
  88.  
  89.             if (h > 6 && h < 13 && B[h] == 1)
  90.                 { B[h] = 0; B[13]++; B[13] += B[12 - h]; B[12 - h] = 0; }
  91.             if (h != 13)
  92.                 Turn = 0;
  93.             else
  94.                 kalah = true;
  95.         }
  96.  
  97.         // Emptyness test
  98.         // Player1
  99.         Empty = true;
  100.         for (h = 0; h < 6; h++)
  101.             if (B[h] != 0)
  102.             {
  103.                 Empty = false;
  104.                 break;
  105.             }
  106.  
  107.         if (Empty)
  108.         {
  109.             for (h = 7; h < 13; h++)
  110.                 { B[13] += B[h]; B[h] = 0; }
  111.             return kalah;
  112.         }
  113.  
  114.         // Player2
  115.         Empty = true;
  116.         for (h = 7; h < 13; h++)
  117.             if (B[h] != 0)
  118.             {
  119.                 Empty = false;
  120.                 break;
  121.             }
  122.  
  123.         if (Empty)
  124.             for (h = 0; h < 6; h++)
  125.                 { B[6] += B[h]; B[h] = 0; }
  126.  
  127.         return kalah;
  128.     }
  129.  
  130.     private void print1()
  131.     {
  132.         for (int i = 0; i < 6; i++)
  133.             out.print(B[i] + " ");
  134.         out.println(ANSI_RED + B[6] + " " + ANSI_RESET);
  135.     }
  136.  
  137.     private void print2()
  138.     {
  139.         for (int i = 7; i < 13; i++)
  140.             out.print(B[i] + " ");
  141.         out.println(ANSI_GREEN + B[13] + " " + ANSI_RESET);
  142.     }
  143.  
  144.     public void print()
  145.     {
  146.         out.println("*******************");
  147.  
  148.         if (Turn == 0)
  149.             { out.println("Now it's your turn, " + ANSI_RED + "player1" + ANSI_RESET); print2(); print1(); }
  150.         else
  151.             { out.println("Now it's your turn, " + ANSI_GREEN + "player2" + ANSI_RESET); print1(); print2(); }
  152.  
  153.         out.println("*******************");
  154.     }
  155.  
  156.     public boolean makeMove( int bowl ) throws RuntimeException
  157.     {
  158.         if (bowl < 0 || bowl > 6)
  159.             throw new RuntimeException("CHEATER!!!!!!!!111!!1!!");
  160.  
  161.         return move(bowl);
  162.     }
  163.  
  164.     public int getMyBowl( int bowl, int playerNum )
  165.     {
  166.         if (bowl < 0 || bowl > 6 || playerNum < 1 || playerNum > 2)
  167.             return -1;
  168.         return B[bowl + 7 * --playerNum];
  169.     }
  170. }
  171.  
  172. interface Player
  173. {
  174.     public boolean makeMove( BoardConfiguration board );
  175. }
  176.  
  177. class HumanPlayer implements Player
  178. {
  179.     static Scanner inputStream = new Scanner(in);
  180.  
  181.     public boolean makeMove( BoardConfiguration board )
  182.     {
  183.         int bowl;
  184.  
  185.         while (true)
  186.         {
  187.             if (inputStream.hasNextInt())
  188.             {
  189.                 bowl = inputStream.nextInt();
  190.                 if (bowl <= 6 && bowl >= 0)
  191.                     break;
  192.             }
  193.             out.println("Incorrect input!!");
  194.         }
  195.  
  196.         return board.makeMove(bowl);
  197.     }
  198. }
  199.  
  200. class ComputerPlayer implements Player
  201. {
  202.     int myNum = 0;
  203.  
  204.     public ComputerPlayer( int num )
  205.     {
  206.         myNum = num;
  207.     }
  208.  
  209.     public boolean makeMove( BoardConfiguration board )
  210.     {
  211.         int max = 0, bowl = 0, tmp;
  212.  
  213.         for (int i = 0; i < 6; i++)
  214.         {
  215.             tmp = board.getMyBowl(i, myNum);
  216.             if (max < tmp)
  217.             {
  218.                 max = tmp;
  219.                 bowl = i;
  220.             }
  221.         }
  222.  
  223.         out.println("I choose " + bowl);
  224.  
  225.         return board.makeMove(bowl);
  226.     }
  227. }
  228.  
  229. class GameServer
  230. {
  231.     private Player player1;
  232.     private Player player2;
  233.     private BoardConfiguration board;
  234.     private int winner;
  235.  
  236.     public GameServer(Player pl1, Player pl2)
  237.     {
  238.         player1 = pl1;
  239.         player2 = pl2;
  240.         board = new BoardConfiguration();
  241.     }
  242.  
  243.     public int play()
  244.     {
  245.         while (true)
  246.         {
  247.             board.print();
  248.             if (player1.makeMove(board))
  249.             {
  250.                 winner = 1;
  251.                 break;
  252.             }
  253.  
  254.             board.print();
  255.             if (player2.makeMove(board))
  256.             {
  257.                 winner = 2;
  258.                 break;
  259.             }
  260.         }
  261.         return winner;
  262.     }
  263.  
  264.     public String whoWon()
  265.     {
  266.         return "Player" + winner + " won!!!";
  267.     }
  268. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement