make life work

patternplayer ok
master
georges 2013-08-03 19:20:00 +01:00
parent a7519e6a88
commit d17d28b9b4
2 changed files with 66 additions and 25 deletions

View File

@ -13,16 +13,16 @@
#define C A2 #define C A2
RGBmatrixPanel matrix(A, B, C, CLK, LAT, OE, false); RGBmatrixPanel matrix(A, B, C, CLK, LAT, OE, false);
// number of windows in a row (e.g. 12) // number of cells in a row (e.g. 12)
#define MAXX 4 #define MAXX 8
// number of stories, eg 8 // number of rows, eg 8
#define MAXY 5 #define MAXY 7
int lifearray[MAXX][MAXY]; int lifearray[MAXX][MAXY];
void setup() { void setup() {
matrix.begin(); matrix.begin();
Serial.begin(9600);
//myWindows(random(1,21)); //myWindows(random(1,21));
int window = 13; int window = 13;
int brightness = 255; int brightness = 255;
@ -34,34 +34,59 @@ for(int y=0;y<MAXY;y++)
for(int x=0;x<MAXX;x++) for(int x=0;x<MAXX;x++)
lifearray[x][y]=0; lifearray[x][y]=0;
delay(1000);
// now load a pattern into the life buffer // now load a pattern into the life buffer
// X => 1,0 // X => 1,0
// X => 0,1 // X => 0,1
// XXX => 0-2,2 // XXX => 0-2,2
int p[]={1,0,0,1,0,2,1,2,2,2,-1}; // glider
int p[]={1,0,0,1,0,2,1,2,2,2,-1};
// block
// int p[]={1,2,2,2,2,1,1,1,-1};
// flipper
// int p[]={1,2,2,2,3,2,-1};
// pento1000
// X
// XXX
// X
// int p[]={0,0,1,0,1,1,1,2,2,1,-1};
int n=0; int n=0;
while (p[n]!=-1) while (p[n]!=-1)
{ {
lifearray[p[n]][p[n+1]]=1; lifearray[p[n]][p[n+1]]=1;
myWindows(xyToWindow(p[n],p[n+1]), brightness, red, green, blue);
n+=2; n+=2;
} }
delay(2000);
int x=0; int x=0;
int y=0; int y=0;
while ( true ) { while ( true ) {
delay(100);
int lifebuf[MAXX][MAXY];
for(int j=0;j<MAXY;j++) {
for(int i=0;i<MAXX;i++) {
lifebuf[i][j]=lifearray[i][j];
if(lifearray[i][j]==1) {
Serial.print("X");
} else {
Serial.print(".");
}
}
Serial.println("");
}
for(y=0;y<MAXY;y++) for(y=0;y<MAXY;y++)
for(x=0;x<MAXX;x++) for(x=0;x<MAXX;x++)
{ {
int count=0; int count=0;
int lifebuf[MAXX][MAXY];
// copy the playfield into temp buffer // copy the playfield into temp buffer
for(int j=0;j<MAXY;j++)
for(int i=0;i<MAXX;i++)
lifebuf[i][j]=lifearray[i][j];
// now we count cells neighbors // now we count cells neighbors
count+=lifebuf[(x-1+MAXX)%MAXX][(y-1+MAXY)%MAXY]; // top left (wrap around) count =lifebuf[(x-1+MAXX)%MAXX][(y-1+MAXY)%MAXY]; // top left (wrap around)
count+=lifebuf[x] [(y-1+MAXY)%MAXY]; // top count+=lifebuf[x] [(y-1+MAXY)%MAXY]; // top
count+=lifebuf[(x+1+MAXX)%MAXX][(y-1+MAXY)%MAXY]; // top right count+=lifebuf[(x+1+MAXX)%MAXX][(y-1+MAXY)%MAXY]; // top right
count+=lifebuf[(x-1+MAXX)%MAXX][y]; // left count+=lifebuf[(x-1+MAXX)%MAXX][y]; // left
@ -81,16 +106,18 @@ while ( true ) {
// display the array // display the array
for(y=0;y<MAXY;y++) for(y=0;y<5;y++)
for(x=0;x<MAXX;x++) { for(x=0;x<4;x++) {
if(lifearray[x][y]==1) if(lifearray[x][y]==1)
myWindows(xyToWindow(x,y), brightness, red, green, blue); myWindows(xyToWindow(x,y), brightness, red, green, blue);
else
myWindows(xyToWindow(x,y), brightness, 0,0,0);
} }
} }
delay(del); delay(del);
// fill the screen with 'black' // fill the screen with 'black'
matrix.fillScreen(matrix.Color888(0, 0, 0)); // matrix.fillScreen(matrix.Color888(0, 0, 0));
matrix.swapBuffers(false); // matrix.swapBuffers(false);
} }

View File

@ -26,7 +26,7 @@ void setup() {
int x=0; int x=0;
int y=0; int y=0;
int pos=0; int pos=0;
int patternSwitcher=0; int patternSwitcher=5;
while ( true ) { while ( true ) {
switch(patternSwitcher) { switch(patternSwitcher) {
case 0: case 0:
@ -60,17 +60,31 @@ while ( true ) {
break; break;
} }
case 5: case 5:
x=y=0;patternSwitcher++;
case 6: case 6:
case 7: case 7:
case 8: { case 8: {
// top bottom line wiper // top bottom line wiper
myWindows(xyToWindow(x,y), brightness, red, green, blue);
myWindows(xyToWindow(x+1,y), brightness, red, green, blue);
myWindows(xyToWindow(x+2,y), brightness, red, green, blue);
myWindows(xyToWindow(x+3,y), brightness, red, green, blue);
if(y++>3) {
y=0;
patternSwitcher++;
}
}
break;
case 9:
x=y=0;patternSwitcher++;
case 10:
for(x=0;x<4;x++) for(x=0;x<4;x++)
myWindows(xyToWindow(x,y), brightness, red, green, blue); for(y=0;y<5;y++)
if(y++>3) { myWindows(xyToWindow(x,y), brightness, red, green, blue);
y=0; patternSwitcher++;
patternSwitcher++; break;
}
}
default: default:
patternSwitcher=0; patternSwitcher=0;
break; break;