Skip to content

Commit 92b3fd9

Browse files
committed
Projecto funcional
1 parent a8125d1 commit 92b3fd9

File tree

2 files changed

+79
-5
lines changed

2 files changed

+79
-5
lines changed

src/GameOfLife.java

+5
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,11 @@ public int getN() {
4949
return n;
5050
}
5151

52+
public boolean readyToGo() {
53+
return this.width != -1 && this.height != -1 && this.generations != -1 && this.speed != -1
54+
&& tablero.getMatrizGOL().length != 0;
55+
}
56+
5257
public void mostrarInfo() {
5358
System.out.println(this.width==0 ? "Width=[No presente]" :this.width==-1?"Width=[Invalido]" : "width: " + this.width);
5459
System.out.println(this.height==0 ? "Height=[No presente]" :this.height==-1?"Height=[Invalido]" : "height: " + this.height);

src/Tablero.java

+74-5
Original file line numberDiff line numberDiff line change
@@ -64,12 +64,23 @@ public void imprimirMatriz() {
6464
}
6565
}
6666

67+
/*
68+
* Retorna la matriz con las nuevas generaciones aplicando las reglas del GOL
69+
*/
70+
6771
public void vecindario(int n) {
6872
int[][] matrizAux = new int[this.matrizGOL.length][this.matrizGOL[0].length];
6973
for (int i = 0; i < this.matrizGOL.length; i++) {
7074
for (int j = 0; j < this.matrizGOL[i].length; j++) {
7175
// Toma en cuenta el valor de n para calcular el tipo de vecindario
72-
int vecinos = n == 3 ? vecindario3(i, j) : vecindario1(i, j);
76+
int vecinos = switch (n) {
77+
case 1 -> vecindario1(i, j);
78+
case 2 -> vecindario2(i, j);
79+
case 3 -> vecindario3(i, j);
80+
case 4 -> vecindario4(i, j);
81+
case 5 -> vecindario5(i, j);
82+
default -> 0;
83+
};
7384
// Reglas del GOL
7485
if (this.matrizGOL[i][j] == 1) {
7586
if (vecinos < 2 || vecinos > 3) {
@@ -88,8 +99,8 @@ public void vecindario(int n) {
8899

89100

90101
/*
91-
* Crea una matriz de 3x3 con los vecinos de la celda i,j
92-
* Si la celda esta en el borde de la matriz, se rellena con 0
102+
* Devuelve una matriz de 3x3 con los vecinos de la celda i,j
103+
* Si la celda esta en el borde de la matriz, se rellena con 0 los espacios vacios
93104
*/
94105
private int[][] vecinadrioCopiado(int i, int j) {
95106
int[][] vecinos = new int[3][3];
@@ -110,6 +121,7 @@ private int vecindario1(int i, int j) {
110121
int[][] vecinosCopiados = vecinadrioCopiado(i, j);
111122
for(int k=0;k<vecinosCopiados.length;k++){
112123
for(int l=0;l<vecinosCopiados[k].length;l++){
124+
// Omite las celdas diagonales y anti-diagonales segun el modelo de vecindario 1
113125
if(k==l || k+l == vecinosCopiados.length-1){
114126
continue;
115127
}
@@ -121,19 +133,76 @@ private int vecindario1(int i, int j) {
121133
return vecinos;
122134
}
123135

136+
private int vecindario2(int i, int j) {
137+
int vecinos = 0;
138+
int[][] vecinosCopiados = vecinadrioCopiado(i, j);
139+
for(int k=0;k<vecinosCopiados.length;k++){
140+
for(int l=0;l<vecinosCopiados[k].length;l++){
141+
//Omite anti-diagonales segun el modelo de vecindario 2
142+
if(k+l == vecinosCopiados.length-1){
143+
continue;
144+
}
145+
if(vecinosCopiados[k][l]==1){
146+
vecinos++;
147+
}
148+
}
149+
}
150+
return vecinos;
151+
}
152+
124153

125154
private int vecindario3(int i, int j) {
126155
int vecinos = 0;
127156
int[][] vecinosCopiados = vecinadrioCopiado(i, j);
128157

129158
for (int[] vecino : vecinosCopiados) {
130-
for (int i1 : vecino) {
131-
if (i1 == 1) {
159+
for (int l = 0; l < vecinosCopiados[0].length; l++) {
160+
//Toma en cuenta solo las celdas diagonales segun el modelo de vecindario 3
161+
if (vecino[l] == 1) {
132162
vecinos++;
133163
}
134164
}
135165
}
166+
// Resta el valor de la celda actual para no contarla como vecino
167+
return vecinos - this.matrizGOL[i][j];
168+
}
169+
170+
private int vecindario4(int i, int j) {
171+
int vecinos = 0;
172+
int[][] vecinosCopiados = vecinadrioCopiado(i, j);
173+
for(int k=0;k<vecinosCopiados.length;k++){
174+
for(int l=0;l<vecinosCopiados[k].length;l++){
175+
//Toma en cuenta solo las celdas diagonales segun el modelo de vecindario 4
176+
if(k==l || k+l == vecinosCopiados.length-1){
177+
if(vecinosCopiados[k][l]==1){
178+
vecinos++;
179+
}
180+
}
181+
}
182+
}
183+
// Resta el valor de la celda actual para no contarla como vecino
136184
return vecinos - this.matrizGOL[i][j];
137185
}
138186

187+
private int vecindario5(int i, int j) {
188+
int vecinos = 0;
189+
int[][] vecinosCopiados = vecinadrioCopiado(i, j);
190+
for(int k=0;k<vecinosCopiados.length;k++){
191+
// Omitir la fila central segun el modelo de vecindario 5
192+
if(k==1){
193+
continue;
194+
}
195+
for(int l=0;l<vecinosCopiados[k].length;l++){
196+
if(vecinosCopiados[k][l]==1){
197+
vecinos++;
198+
}
199+
}
200+
}
201+
return vecinos;
202+
}
203+
204+
205+
public int[][] getMatrizGOL() {
206+
return matrizGOL;
207+
}
139208
}

0 commit comments

Comments
 (0)