blob: c291a63e58a74829df98d2cbfe9ee2414e521e6d (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
|
package org.guru.boggle;
import java.util.List;
import java.util.Random;
import com.google.common.collect.Lists;
public class SimpleBoard implements Board {
private static final int DIM = 5;
private final char[][] state = new char[DIM][DIM];
private final boolean[][] used = new boolean[DIM][DIM];
private final Random rand = new Random();
public SimpleBoard() {
reset();
dump();
}
@Override
public void reset() {
for (int i = 0; i < DIM; ++i) {
for (int j = 0; j < DIM; ++j) {
state[i][j] = randomLetter();
used[i][j] = false;
}
}
}
public void dump() {
for (int i = 0; i < DIM; ++i) {
for (int j = 0; j < DIM; ++j) {
System.out.printf("%c ", state[i][j]);
}
System.out.printf("\n");
}
}
public List<BoardPosition> allPositions() {
List<BoardPosition> result = Lists.newArrayList();
for (int i = 0; i < DIM; ++i) {
for (int j = 0; j < DIM; ++j) {
result.add(new BoardPosition(i, j));
}
}
return result;
}
private char randomLetter() {
return Character.valueOf((char) (rand.nextInt(26) + 65));
}
private void checkDimension(int i) {
if (i < 0 || i >= DIM) {
throw new IllegalArgumentException("Bad board dimension: " + i);
}
}
private void checkOnBoard(BoardPosition p) {
checkDimension(p.x());
checkDimension(p.y());
}
@Override
public char letterAt(BoardPosition p) {
checkOnBoard(p);
return state[p.x()][p.y()];
}
@Override
public void markUsed(BoardPosition p) {
checkOnBoard(p);
used[p.x()][p.y()] = true;
}
@Override
public void clearUsed(BoardPosition p) {
checkOnBoard(p);
used[p.x()][p.y()] = false;
}
@Override
public boolean isUsed(BoardPosition p) {
checkOnBoard(p);
return used[p.x()][p.y()];
}
@Override
public List<BoardPosition> adjacentNeighborPositions(BoardPosition p) {
List<BoardPosition> result = Lists.newArrayList();
int x = p.x();
int y = p.y();
for (int i = x - 1; i <= x + 1; ++i) {
for (int j = y - 1; j <= y + 1; ++j) {
if (i == x && y == j) continue;
if (i < 0 || j < 0) continue;
if (i >= DIM || j >= DIM) continue;
result.add(new BoardPosition(i, j));
}
}
return result;
}
@Override
public List<BoardPosition> adjacentUnusedNeighborPosition(BoardPosition p) {
List<BoardPosition> result = Lists.newArrayList();
int x = p.x();
int y = p.y();
for (int i = x - 1; i <= x + 1; ++i) {
for (int j = y - 1; j <= y + 1; ++j) {
if (i == x && y == j) continue;
if (i < 0 || j < 0) continue;
if (i >= DIM || j >= DIM) continue;
if (used[i][j] == true) continue;
result.add(new BoardPosition(i, j));
}
}
return result;
}
}
|