Advertisement
Guest User

Untitled

a guest
Apr 19th, 2019
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.62 KB | None | 0 0
  1. import java.util.Arrays;
  2.  
  3. /**
  4.  * @author kevin.liu
  5.  */
  6. public class Reversi {
  7.   private static int[] dx = new int[]{1, 1, 1, 0, 0, -1, -1, -1};
  8.   private static int[] dy = new int[]{-1, 0, 1, 1, -1, -1, 0, 1};
  9.  
  10.   private int[][] board;
  11.   private int currentPlayer;
  12.  
  13.   public Reversi() {
  14.     this.board = new int[8][8];
  15.     board[3][4] = 1;
  16.     board[4][3] = 1;
  17.     board[3][3] = 2;
  18.     board[4][4] = 2;
  19.     this.currentPlayer = 2;
  20.   }
  21.  
  22.   public void printBoard() {
  23.     int[][] copy = new int[8][8];
  24.  
  25.     for (int i = 0; i < copy.length; i++) {
  26.       copy[i] = board[i].clone();
  27.       for (int j = 0; j < copy[0].length; j++) {
  28.         if (isValid(i, j, currentPlayer)) {
  29.           copy[i][j] = 8;
  30.         }
  31.       }
  32.     }
  33.  
  34.     for (int i = 0; i < copy.length; i++) {
  35.       System.out.println(Arrays.toString(copy[i]));
  36.     }
  37.   }
  38.  
  39.  
  40.   public boolean isValid(int r, int c, int player) {
  41.     if (this.currentPlayer != player) {
  42.       return false;
  43.     }
  44.     if (board[r][c] != 0) {
  45.       return false;
  46.     }
  47.  
  48.     // iterates over dx, dy
  49.     for (int i = 0; i < 8; i++) {
  50.       int x = r;
  51.       int y = c;
  52.       boolean foundOther = false;
  53.       while (inBounds(x += dx[i], y += dy[i])) {
  54.         if (board[x][y] == 0) {
  55.           break;
  56.         }
  57.         if (board[x][y] == player) {
  58.           if (foundOther) {
  59.             return true;
  60.           } else {
  61.             break;
  62.           }
  63.         }
  64.         if (board[x][y] == getOpponentOf(player)) {
  65.           foundOther = true;
  66.         }
  67.       }
  68.     }
  69.     return false;
  70.   }
  71.  
  72.   public void move(int r, int c, int player) {
  73.     // iterates over dx, dy
  74.     board[r][c] = player;
  75.     for (int i = 0; i < 8; i++) {
  76.       int x = r;
  77.       int y = c;
  78.       boolean foundSelf = false;
  79.       while (inBounds(x += dx[i], y += dy[i])) {
  80.         if (board[x][y] == 0) {
  81.           break;
  82.         }
  83.         if (board[x][y] == player) {
  84.           foundSelf = true;
  85.           break;
  86.         }
  87.       }
  88.       if (foundSelf) {
  89.         x -= dx[i];
  90.         y -= dy[i];
  91.         while (x != r && y != c) {
  92.           board[x][y] = player;
  93.           x -= dx[i];
  94.           y -= dy[i];
  95.         }
  96.       }
  97.  
  98.     }
  99.  
  100.     this.currentPlayer = getOpponentOf(player);
  101.   }
  102.  
  103.   private int getOpponentOf(int player) {
  104.     return player == 1 ? 2 : 1;
  105.   }
  106.  
  107.   private boolean inBounds(int r, int c) {
  108.     return (r >= 0 && c >= 0 && r < 8 && c < 8);
  109.   }
  110.  
  111.   public static void main(String[] args) {
  112.     Reversi game = new Reversi();
  113. //    boolean isValid = game.isValid(3, 5, 2);
  114. //    System.out.println(isValid);
  115.     game.move(3, 5, 2);
  116.     game.printBoard();
  117.   }
  118. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement