-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathTareaJuegoVida.java
84 lines (76 loc) · 1.85 KB
/
TareaJuegoVida.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
import java.math.BigInteger;
import java.util.concurrent.*;
import java.util.concurrent.atomic.AtomicInteger;
class TareaJuegoVida implements Runnable{
int[][] reticulaBase_,reticulaGenerada_;
int inicio_,fin_,height_,width_;
CyclicBarrier barrera_;
AtomicInteger living_;
TareaJuegoVida(int[][] anteriorGen,int[][] nuevaGen,int inicio,int fin,CyclicBarrier barrera,int Alto,int Ancho,AtomicInteger viv){
reticulaBase_=anteriorGen;
reticulaGenerada_=nuevaGen;
inicio_=inicio;
fin_=fin;
barrera_=barrera;
height_=Alto;//height es el número de filas al fin y al cabo
width_=Ancho;
living_=viv;
}
int Nvecinas(int i, int j)
{
int nvecinas=0;
if(i>=1)
{
nvecinas+=reticulaBase_[i-1][j];
if(j<=height_-2)
nvecinas+=reticulaBase_[i-1][j+1];
if(j>=1)
nvecinas+=reticulaBase_[i-1][j-1];
}
if(i<=width_-2)
{
nvecinas+=reticulaBase_[i+1][j];
if(j<=height_-2)
nvecinas+=reticulaBase_[i+1][j+1];
if(j>=1)
nvecinas+=reticulaBase_[i+1][j-1];
}
if(j>=1)
nvecinas+=reticulaBase_[i][j-1];
if(j<=height_-2)
nvecinas+=reticulaBase_[i][j+1];
return nvecinas;
}
public void run()
{
for(int i=inicio_;i<fin_;++i)
{
for(int j=0;j<height_;++j)
{
int vecindad=Nvecinas(i,j);
if(reticulaBase_[i][j]==1)
{
if(vecindad<2 || vecindad>3)
reticulaGenerada_[i][j]=0;
else
reticulaGenerada_[i][j]=1;
}
else if(vecindad==3)
reticulaGenerada_[i][j]=1;
}
}
try{
barrera_.await();
}catch(BrokenBarrierException e){ e.getMessage(); }
catch(InterruptedException e){ e.getMessage(); }
for(int i=inicio_;i<fin_;++i)
{
for(int j=0;j<height_;++j)
{
reticulaBase_[i][j]=reticulaGenerada_[i][j];
if(reticulaBase_[i][j]==1)
living_.incrementAndGet();
}
}
}
}