Custopootimus

Connect *

Apr 28th, 2014
623
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.55 KB | None | 0 0
  1. enum Piece {
  2.     RED,
  3.     BLACK,
  4. }
  5.  
  6. enum SearchDirection {
  7.     LEFT,
  8.     RIGHT,
  9.     UP,
  10.     DOWN,
  11.     LEFT_UP
  12.     LEFT_DOWN,
  13.     RIGHT_UP,
  14.     RIGHT_DOWN;
  15.  
  16. }
  17.  
  18. /* Some constants */
  19. int BOARD_HEIGHT = 10;
  20. int BOARD_WIDTH = 10;
  21. Pieces[][] board = new Pieces[BOARD_HEIGHT][BOARD_WIDTH];
  22.  
  23. int WIN_COUNT = 5;
  24.  
  25. private boolean connected_five(Pieces[][] board, int i, int j) {
  26.     Piece match = board[i][j];
  27.  
  28.     return WIN_COUNT <= -1 + count(board, match, RIGHT, i, j)    + count(board, match, LEFT, i, j)
  29.         || WIN_COUNT <= -1 + count(board, match, DOWN, i, j)     + count(board, match, UP, i, j)
  30.         || WIN_COUNT <= -1 + count(board, match, LEFT_UP, i, j)  + count(board, match, RIGHT_DOWN, i, j)
  31.         || WIN_COUNT <= -1 + count(board, match, RIGHT_UP, i, j) + count(board, match, LEFT_DOWN, i, j);
  32. }
  33.  
  34. private int count(Pieces[][] board, Piece match, SearchDirection direction, int i, int j) {
  35.     if  (i < 0)
  36.      || (j < 0)
  37.      || (i >= BOARD_HEIGHT)
  38.      || (j >= BOARD_WIDTH)
  39.      || (board[i][j] != match)
  40.         return 0;
  41.  
  42.     switch(direction) {
  43.     case LEFT:
  44.         return 1 + count(board, match, LEFT, i+1, j);
  45.     case RIGHT:
  46.         return 1 + count(board, match, RIGHT, i-1, j);
  47.     case UP:
  48.         return 1 + count(board, match, UP, i, j+1);
  49.     case DOWN:
  50.         return 1 + count(board, match, DOWN, i, j-1);
  51.     case LEFT_UP:
  52.         return 1 + count(board, match, LEFT_UP, i+1, j+1);
  53.     case LEFT_DOWN:
  54.         return 1 + count(board, match, LEFT_DOWN, i+1, j-1);
  55.     case RIGHT_UP:
  56.         return 1 + count(board, match, RIGHT_UP, i+1, j+1);
  57.     case RIGHT_DOWN:
  58.         return 1 + count(board, match, RIGHT_DOWN, i-1, j-1);
  59.     }
  60.  
  61. }
Advertisement
Add Comment
Please, Sign In to add comment