5 |
|
*/ |
6 |
|
|
7 |
|
import java.awt.*; |
8 |
– |
import javax.swing.*; |
9 |
– |
import java.util.*; |
8 |
|
import java.awt.event.*; |
9 |
< |
import javax.swing.event.*; |
9 |
> |
import java.util.*; |
10 |
|
import java.util.concurrent.*; |
11 |
+ |
import javax.swing.*; |
12 |
+ |
import javax.swing.event.*; |
13 |
|
|
14 |
|
|
15 |
|
/** |
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() { |
1005 |
|
Finder forked = null; // list of forked subtasks when level > 1 |
1006 |
|
|
1007 |
|
long open = ~(ours | theirs); // currently empty cells |
1008 |
< |
long here = 1; // travserse through bits |
1008 |
> |
long here = 1; // traverse through bits |
1009 |
|
|
1010 |
|
for (int k = 0; k < Board.CELLS; ++k, here <<= 1) { |
1011 |
|
if ((here & ours) != 0) { |
1173 |
|
long nextOurs = bestFinder.theirs; |
1174 |
|
long nextTheirs = bestFinder.ours; |
1175 |
|
long blue = player.isBlue() ? nextOurs : nextTheirs; |
1176 |
< |
long green = player.isBlue() ? nextTheirs: nextOurs; |
1176 |
> |
long green = player.isBlue() ? nextTheirs : nextOurs; |
1177 |
|
move = new Move(player, new Board(blue, green), true); |
1178 |
|
} |
1179 |
|
automover.relay(move); |