-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathBoard.java
155 lines (131 loc) · 4.03 KB
/
Board.java
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
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
import usantatecla.utils.*;
public class Board {
public static final int nRow = 6;
public static final int nColumn = 7;
public static final int MAX_TOKEN = 42;
public static final int TOKEN_WINNER = 4;
private char board[][];
private int lastColumn;
public Board() {
board = new char[nRow][nColumn];
}
/**
* Nos permitirá obtener el tablero
* @return - devuelve el tablero
*/
public char[][] getBoard() {
return board;
}
/**
* Inicializa nuestro tablero con las dimensiones
* pasadas como constantes
*/
public void initBoard() {
for (int i = 0; i < nRow; i++) {
for (int j = 0; j < nColumn; j++)
board[i][j] = ' ';
}
}
/**
* Rellenará cada coordenada del tablero
* con una linea vertical
*/
public void showBoard() {
for (int i = 0; i < nRow; i++) {
for (int j = 0; j < nColumn; j++)
System.out.print("|" + board[i][j]);
System.out.print("|");
System.out.print("\t\n");
}
}
/**
* Nos permitirá saber si en la posición de la columna pasada por parámetro
* hay ya una ficha o no
* @param columnInput
* @return
*/
public boolean isEmpty(int columnInput) {
if (board[nRow - 1][columnInput] == ' ')
return true;
return false;
}
/**
* Método que nos devuelve la posición de la fila que se encuentra libre
* para saber donde colocar la ficha (según la columna pasada por parámetro)
* @param column - le pasamos el numero de columna
* @return - si esta libre devolverá fila libre , si no -1
*/
public int freeGap(int column) {
for (int i = nRow - 1; i >= 0; i--) {
if (board[i][column] == ' ')
return i;
}
return -1;
}
/**
* Pondrá la ficha que proceda en cada coordenada
* @param color - nos dirá el valor de cada ficha
* @param column - le pasaremos la columna
* @return - nos devolverá la fila libre
*/
public int putToken(Color color, int column) {
int freeRow = freeGap(column);
lastColumn = column;
if (color == Color.R)
board[freeRow][column] = 'R';
else
board[freeRow][column] = 'Y';
return freeRow;
}
/**
* Nos permitirá saber si el tablero esta lleno
* @return - un valor boooleano en cada caso, true si esta lleno, false si no lo está
*/
public boolean fullBoard() {
boolean isFull = true;
for (int i = 0; i < nColumn; i++) {
if (board[nRow - 1][i] == ' ')
isFull = false;
}
return isFull;
}
/**
* Este método nos mostrará la interfaz que queremos usar en nuestro juego
*/
public void showInterface(){
Console console = new Console();
console.writeln(Message.TITLE.toString());
console.writeln(Message.HORIZONTAL_LINE.toString());
this.showBoard();
console.writeln(Message.HORIZONTAL_LINE.toString());
}
/**
* Ns pedirá por consola que ingresemos una valor para la columna
* @return - nos devolvera el valor de la columna
*/
public int getColumn(){
Console console = new Console();
return console.readInt(Message.ENTER_COLUMN_TO_PUT.toString());
}
/**
* Nos permitirá borrar la ficha del tablero (una vez realizado el undo)
* para así poder actualizarlo
* @param column - le pasamos el valor de la columna
*/
public void deleteToken(int column){
for (int i = 0; i < nRow; i++){
if (board[i][column] != ' ') {
board[i][column] = ' ';
return;
}
}
}
/**
* Obtendremos la ultima columna que nos será útil para realizar
* las operaciones de undo y redo
* @return - el valor de la ultima columna
*/
public int getLastColumn() {
return lastColumn;
}
}