Kod wygląda tak:
int ileKomorek=40; int wysKomorki = 8; int ileStartowych=300; boolean[][] przed, po; int ileSasiadow(int i, int j, int rozmiar) { int ile=0; int[] xoff = { i-1, i, i+1 }; int[] yoff = { j-1, j, j+1 }; for (int ii=0; ii<3; ii++) { if (xoff[ii] < 0) xoff[ii]+=rozmiar; if (yoff[ii] < 0) yoff[ii]+=rozmiar; if (xoff[ii] >= rozmiar) xoff[ii]-=rozmiar; if (yoff[ii] >= rozmiar) yoff[ii]-=rozmiar; } for (int x=0; x<3; x++) for (int y=0; y<3; y++) if (x!=1 || y!=1) if (przed[xoff[x]][yoff[y]]) ile++; assert(ile>=0 && ile<=8); return ile; } void setup() { size(ileKomorek*wysKomorki, ileKomorek*wysKomorki); background(255); przed = new boolean[ileKomorek][ileKomorek]; po = new boolean[ileKomorek][ileKomorek]; int i=0; while (i<ileStartowych) { if (!przed[int(random(0, ileKomorek))][int(random(0, ileKomorek))]) { przed[int(random(0, ileKomorek))][int(random(0, ileKomorek))] = true; i++; } } fill(204, 102, 0); noStroke(); } void draw() { background(255); for (int i=0; i<ileKomorek; i++) { for (int j=0; j<ileKomorek; j++) { if (przed[i][j]) { rect(i*wysKomorki, j*wysKomorki, wysKomorki, wysKomorki); po[i][j] = (ileSasiadow(i, j, ileKomorek) >=2 && ileSasiadow(i, j, ileKomorek) <= 3); } else if (ileSasiadow(i, j, ileKomorek) ==3) po[i][j] = true; } } for (int i=0; i<ileKomorek; i++) for (int j=0; j<ileKomorek; j++) przed[i][j]=po[i][j]; delay(1000); }A teraz wyobraź sobie, że masz to samo napisać w C++ lub czymś jeszcze bardziej niskopoziomowym.
BTW: Przymierzam się do zrobienia implementacji w Haskell
Brak komentarzy:
Prześlij komentarz