@@ -64,12 +64,23 @@ public void imprimirMatriz() {
64
64
}
65
65
}
66
66
67
+ /*
68
+ * Retorna la matriz con las nuevas generaciones aplicando las reglas del GOL
69
+ */
70
+
67
71
public void vecindario (int n ) {
68
72
int [][] matrizAux = new int [this .matrizGOL .length ][this .matrizGOL [0 ].length ];
69
73
for (int i = 0 ; i < this .matrizGOL .length ; i ++) {
70
74
for (int j = 0 ; j < this .matrizGOL [i ].length ; j ++) {
71
75
// 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
+ };
73
84
// Reglas del GOL
74
85
if (this .matrizGOL [i ][j ] == 1 ) {
75
86
if (vecinos < 2 || vecinos > 3 ) {
@@ -88,8 +99,8 @@ public void vecindario(int n) {
88
99
89
100
90
101
/*
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
93
104
*/
94
105
private int [][] vecinadrioCopiado (int i , int j ) {
95
106
int [][] vecinos = new int [3 ][3 ];
@@ -110,6 +121,7 @@ private int vecindario1(int i, int j) {
110
121
int [][] vecinosCopiados = vecinadrioCopiado (i , j );
111
122
for (int k =0 ;k <vecinosCopiados .length ;k ++){
112
123
for (int l =0 ;l <vecinosCopiados [k ].length ;l ++){
124
+ // Omite las celdas diagonales y anti-diagonales segun el modelo de vecindario 1
113
125
if (k ==l || k +l == vecinosCopiados .length -1 ){
114
126
continue ;
115
127
}
@@ -121,19 +133,76 @@ private int vecindario1(int i, int j) {
121
133
return vecinos ;
122
134
}
123
135
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
+
124
153
125
154
private int vecindario3 (int i , int j ) {
126
155
int vecinos = 0 ;
127
156
int [][] vecinosCopiados = vecinadrioCopiado (i , j );
128
157
129
158
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 ) {
132
162
vecinos ++;
133
163
}
134
164
}
135
165
}
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
136
184
return vecinos - this .matrizGOL [i ][j ];
137
185
}
138
186
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
+ }
139
208
}
0 commit comments