-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathBoard.java
More file actions
88 lines (80 loc) · 2.87 KB
/
Board.java
File metadata and controls
88 lines (80 loc) · 2.87 KB
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
package TEST;
public class Board {
private final int SIZE = 7; // Adjust size for A-G, 1-7
private char[][] grid;
public Board() {
grid = new char[SIZE][SIZE];
for (int i = 0; i < SIZE; i++) {
for (int j = 0; j < SIZE; j++) {
grid[i][j] = '~'; // ~ represents water
}
}
}
// Convert letter to column index
public int letterToIndex(char letter) {
return Character.toUpperCase(letter) - 'A';
}
public boolean placeShip(Ship ship, int startX, int startY, int endX, int endY) {
// Ensure ship is in a straight line and correct length
if (startX == endX) { // Horizontal placement
int length = Math.abs(endY - startY) + 1;
if (length != ship.getLength()) return false;
for (int y = Math.min(startY, endY); y <= Math.max(startY, endY); y++) {
if (grid[startX][y] != '~') return false;
}
for (int y = Math.min(startY, endY); y <= Math.max(startY, endY); y++) {
grid[startX][y] = 'S';
ship.addPosition(startX, y);
}
} else if (startY == endY) { // Vertical placement
int length = Math.abs(endX - startX) + 1;
if (length != ship.getLength()) return false;
for (int x = Math.min(startX, endX); x <= Math.max(startX, endX); x++) {
if (grid[x][startY] != '~') return false;
}
for (int x = Math.min(startX, endX); x <= Math.max(startX, endX); x++) {
grid[x][startY] = 'S';
ship.addPosition(x, startY);
}
} else {
return false; // Not a valid placement
}
return true;
}
public String receiveAttack(int x, int y) {
if (grid[x][y] == 'S') {
grid[x][y] = 'X'; // X for hit
return "Hit!";
} else if (grid[x][y] == '~') {
grid[x][y] = 'O'; // O for miss
return "Miss!";
}
return "Already attacked here!";
}
public boolean allShipsSunk() {
for (int i = 0; i < SIZE; i++) {
for (int j = 0; j < SIZE; j++) {
if (grid[i][j] == 'S') return false;
}
}
return true;
}
public void displayBoard(boolean hideShips) {
System.out.print(" ");
for (char c = 'A'; c < 'A' + SIZE; c++) {
System.out.print(c + " ");
}
System.out.println();
for (int i = 0; i < SIZE; i++) {
System.out.print((i + 1) + " ");
for (int j = 0; j < SIZE; j++) {
if (hideShips && grid[i][j] == 'S') {
System.out.print("~ "); // Hide ships
} else {
System.out.print(grid[i][j] + " ");
}
}
System.out.println();
}
}
}