|
|
@ -23,8 +23,8 @@ public class AIGridGUI extends JPanel { |
|
|
|
boolean[] cellsHit; |
|
|
|
boolean[] cellsKilled; |
|
|
|
boolean randomGuess = true; |
|
|
|
int f; // it is the first |
|
|
|
Color Red = new Color(100, 0, 0); // |
|
|
|
int firstHit; |
|
|
|
Color darkRed = new Color(100, 0, 0); // |
|
|
|
Border loweredBevel = BorderFactory.createLoweredBevelBorder(); |
|
|
|
Border raisedbevel = BorderFactory.createRaisedBevelBorder(); |
|
|
|
Border defaultBorder; |
|
|
@ -252,7 +252,7 @@ public class AIGridGUI extends JPanel { |
|
|
|
} else { |
|
|
|
//If nonrandom guess (locked onto a particular ship that has been hit but not killed), determine where to guess. |
|
|
|
|
|
|
|
int attempts = 1; |
|
|
|
int attempts = 0; |
|
|
|
|
|
|
|
while(!isClear) { |
|
|
|
attempts++; |
|
|
@ -261,7 +261,7 @@ public class AIGridGUI extends JPanel { |
|
|
|
|
|
|
|
//Starting from the location of the first hit on the ship, test each direction to determine how many consecutive hits have been made in that direction. |
|
|
|
|
|
|
|
int u = f; |
|
|
|
int u = firstHit; |
|
|
|
int upCount = -1; |
|
|
|
while(u >= 0 && cellsHit[u] && !cellsKilled[u]) { |
|
|
|
u = moveUp(u); |
|
|
@ -270,7 +270,7 @@ public class AIGridGUI extends JPanel { |
|
|
|
up.setCell(u); |
|
|
|
up.setCount(upCount); |
|
|
|
|
|
|
|
int d = f; |
|
|
|
int d = firstHit; |
|
|
|
int downCount = -1; |
|
|
|
while(d >= 0 && cellsHit[d] && !cellsKilled[d]) { |
|
|
|
d = moveDown(d); |
|
|
@ -279,7 +279,7 @@ public class AIGridGUI extends JPanel { |
|
|
|
down.setCell(d); |
|
|
|
down.setCount(downCount); |
|
|
|
|
|
|
|
int r = f; |
|
|
|
int r = firstHit; |
|
|
|
int rightCount = -1; |
|
|
|
while(r >= 0 && cellsHit[r] && !cellsKilled[r]) { |
|
|
|
r = moveRight(r); |
|
|
@ -288,7 +288,7 @@ public class AIGridGUI extends JPanel { |
|
|
|
right.setCell(r); |
|
|
|
right.setCount(rightCount); |
|
|
|
|
|
|
|
int l = f; |
|
|
|
int l = firstHit; |
|
|
|
int leftCount = -1; |
|
|
|
while(l >= 0 && cellsHit[l] && !cellsKilled[l]) { |
|
|
|
l = moveLeft(l); |
|
|
@ -306,15 +306,15 @@ public class AIGridGUI extends JPanel { |
|
|
|
|
|
|
|
//If first guess is not clear or is out of bounds, continue trying other directions until one is found that works. |
|
|
|
|
|
|
|
if(attempts == 1) { |
|
|
|
if(attempts == 2) { |
|
|
|
guessLocation = directions.get(1).getCell(); |
|
|
|
} |
|
|
|
|
|
|
|
if(attempts == 2) { |
|
|
|
if(attempts == 3) { |
|
|
|
guessLocation = directions.get(2).getCell(); |
|
|
|
} |
|
|
|
|
|
|
|
if(attempts == 3) { |
|
|
|
if(attempts == 4) { |
|
|
|
guessLocation = directions.get(3).getCell(); |
|
|
|
} |
|
|
|
|
|
|
@ -353,12 +353,12 @@ public class AIGridGUI extends JPanel { |
|
|
|
for(BSButton bu : buttons) { |
|
|
|
//Mark killed cells. |
|
|
|
if(bu.getCellContents() == s) { |
|
|
|
bu.setBackground(Red); |
|
|
|
bu.setBackground(darkRed); |
|
|
|
cellsKilled[bu.getGridLocation()] = true; |
|
|
|
} |
|
|
|
//Mark if any cell remains that has been hit but not yet killed. If so, lock onto that cell. |
|
|
|
if(cellsHit[bu.getGridLocation()] && !cellsKilled[bu.getGridLocation()]) { |
|
|
|
f = bu.getGridLocation(); |
|
|
|
firstHit = bu.getGridLocation(); |
|
|
|
unkilledCells = true; |
|
|
|
} |
|
|
|
} |
|
|
@ -372,7 +372,7 @@ public class AIGridGUI extends JPanel { |
|
|
|
b.setBackground(Color.red); |
|
|
|
//If previously random guessing, switch to locking onto the hit cell. |
|
|
|
if(randomGuess) { |
|
|
|
f = b.getGridLocation(); |
|
|
|
firstHit = b.getGridLocation(); |
|
|
|
randomGuess = false; |
|
|
|
} |
|
|
|
cellsHit[guessLocation] = true; |
|
|
|