479 |
|
* threads (instead new ones are constructed), so don't |
480 |
|
* need any synch. |
481 |
|
*/ |
482 |
< |
static final class Board { |
482 |
> |
static final class Board { |
483 |
|
|
484 |
|
/* |
485 |
|
First, some Constants and utilities that might as well be here |
606 |
|
// place a tile, taking all adjacent tiles of opponent |
607 |
|
|
608 |
|
public void take(Player player, int row, int col) { |
609 |
< |
int k = (row + col * RANKS); |
609 |
> |
int k = row + col * RANKS; |
610 |
|
long dest = 1L << k; |
611 |
|
long nbrMask = adjacentMasks[k]; |
612 |
|
long sourceBlue = blue_; |
617 |
|
} |
618 |
|
else { |
619 |
|
blue_ = sourceBlue & ~(sourceBlue & nbrMask); |
620 |
< |
green_ = sourceGreen | dest | (sourceBlue & nbrMask); |
620 |
> |
green_ = sourceGreen | dest | (sourceBlue & nbrMask); |
621 |
|
} |
622 |
|
} |
623 |
|
|
751 |
|
|
752 |
|
// setters: |
753 |
|
|
754 |
< |
synchronized void player(Player p) { player_ = p; } |
755 |
< |
synchronized void board(Board b) { board_ = b; } |
756 |
< |
synchronized void from(int sr, int sc) { fromRow = sr; fromCol = sc; } |
754 |
> |
synchronized void player(Player p) { player_ = p; } |
755 |
> |
synchronized void board(Board b) { board_ = b; } |
756 |
> |
synchronized void from(int sr, int sc) { fromRow = sr; fromCol = sc; } |
757 |
|
synchronized void to(int dr, int dc) { toRow = dr; toCol = dc; } |
758 |
|
|
759 |
|
// accessors: |
761 |
|
synchronized boolean isFrom(int r, int c) { |
762 |
|
return fromRow== r && fromCol == c; |
763 |
|
} |
764 |
< |
synchronized boolean isTo(int r, int c) { |
764 |
> |
synchronized boolean isTo(int r, int c) { |
765 |
|
return toRow == r && toCol == c; |
766 |
|
} |
767 |
|
synchronized Board board() { |