/* built with Studio Sketchpad:
* https://sketchpad.cc
*
* observe the evolution of this sketch:
* https://studio.sketchpad.cc/sp/pad/view/ro.OW$p5jpsiWt/rev.6181
*
* authors:
* Justin Hall
* justin
*
* license (unless otherwise specified):
* creative commons attribution-share alike 3.0 license.
* https://creativecommons.org/licenses/by-sa/3.0/
*/
// Pressing Control-R will render this sketch.
board player;
cursor p;
int s, ls, fCount;
game lv1;
color c0, c1, c2, c3, c4, c5;
color c0l, c1l, c2l, c3l, c4l, c5l;
void setup()
{
background(255);
size(300, 300);
smooth();
frameRate(30);
strokeWeight(1);
game lv1 = new game();
player = new board(120, 240, 0, 0);
p = new cursor(player, 3, 8);
s = second();
ls=-1;
c0 = color(255, 255, 255);
c0l = color(255, 255, 255);
c1 = color(255, 23, 249);
c1l = color(84, 0, 174);
c2 = color(5, 255, 0);
c2l = color(0, 122, 0);
c3 = color(232, 8, 0);
c3l = color(153, 0, 0);
c4 = color(240, 239, 24);
c4l = color(98, 84, 0);
c5 = color(29, 230, 237);
c5l = color(2, 117, 138);
player.display();
}
void draw()
{
background();
s=second();
stroke(color(0));
fill(color(0));
if(s%2==0 && s!=ls)
{
ls=s;
player.bRow(
(int)random(1,6),(int)random(1,6),(int)random(1,6),
(int)random(1,6),(int)random(1,6),(int)random(1,6));
}
image(player.visual,0,0);
p.display();
stroke(color(0));
fill(color(255));
}
class game
{
game(){}
}
class board
{
PGraphics visual;
int[][] field = new int[6][12];
int w, h;
int xLoc, yLoc;
var explodes = [];
board(int iw, int ih, int ixl, int iyl)
{
w=iw;
h=ih;
xLoc=ixl;
yLoc=iyl;
for(int i=0;i<6;i++)
for(int j=0;j<12;j++)
{
field[i][j]=0;
}
visual=createGraphics(w+1, h+1, JAVA2D);
}
void bRow(int i1, int i2, int i3, int i4, int i5, int i6)
{
if(upShift()==false)
lose();
field[0][11]=i1;
field[1][11]=i2;
field[2][11]=i3;
field[3][11]=i4;
field[4][11]=i5;
field[5][11]=i6;
check();
}
void display()
{
stroke(0);
for(int i=0;i<6;i++)
for(int j=0;j<12;j++)
{
blockShow(xLoc+(w/6)*i, yLoc+(h/12)*j, w/6, h/12, field[i][j]);
}
}
void blockShow(int x, int y, int iw, int ih, int c)
{
visual.beginDraw();
if(c==0)
{
visual.fill(c0);
visual.stroke(c0l);
}
else if(c==1)
{
visual.fill(c1);
visual.stroke(c1l);
}
else if(c==2)
{
visual.fill(c2);
visual.stroke(c2l);
}
else if(c==3)
{
visual.fill(c3);
visual.stroke(c3l);
}
else if(c==4)
{
visual.fill(c4);
visual.stroke(c4l);
}
else if(c==5)
{
visual.fill(c5);
visual.stroke(c5l);
}
visual.strokeJoin(ROUND);
visual.smooth();
visual.rect(x, y, iw, ih);
visual.rect(x+3,y+3,iw-6,ih-6);
visual.endDraw();
}
boolean upShift()
{
if(
field[0][0]!=0 ||
field[1][0]!=0 ||
field[2][0]!=0 ||
field[3][0]!=0 ||
field[4][0]!=0 ||
field[5][0]!=0 )
return false;
for(int i=0;i<11;i++)
for(int j=0;j<6;j++)
{
field[j][i]=field[j][i+1];
}
fall();
return true;
}
void swap(int ix, int iy)
{
int t=field[ix][iy];
field[ix][iy]=field[ix+1][iy];
field[ix+1][iy]=t;
fall();
}
void lose()
{
}
void check()
{
for(int i=0;i<4;i++)
for(int j=0;j<12;j++)
{
if(
field[i][j]==field[i+1][j] && field[i][j]!=0 &&
field[i][j]==field[i+2][j]
)
{
k=i;
while(field[i][j]==field[k][j] && k<5)
{
explodes.push(new PVector(k,j));
//console.log(k,j," yeppp", explodes.length());
k++;
}
}
}
for(int i=0;i<6;i++)
for(int j=0;j<10;j++)
if(
field[i][j]==field[i][j+1] && field[i][j]!=0 &&
field[i][j]==field[i][j+2]
)
{
k=j;
while(field[i][j]==field[i][k] && k<12)
{
//console.log(i,k," yep");
explodes.push(new PVector(i,k));
k++;
}
}
if(explodes.length()>0)
boom();
}
void boom()
{
//console.log("running boom");
while(explodes.length()>0)
{
//console.log(explodes[explodes.length()-1].x,explodes[explodes.length()-1].y);
field[explodes[explodes.length()-1].x][explodes[explodes.length()-1].y]=0;
burstAnim(explodes.pop());
}
fall();
}
void fall()
{
//console.log("running fall");
boolean fell=false;
for(int i=0;i<11;i++)
for(int j=0;j<6;j++)
{ //console.log("if ", j,i , "=" and ", j,i+1, " doesn't");
if(field[j][i+1]==0 && field[j][i]!=0)
{//console.log("MOVING DOWN");
field[j][i+1]=field[j][i];
field[j][i]=0;
fell=true;
blockFall(j, i);
}
}
if(fell==true)
check();
display();
}
void blockFall(int x, int y)
{
int f = frameCount;
int x = second();
while(second()<x+1)
rect(x*w/6+xLoc, y*h/12+yLoc+frameCount-f, w/6, h/12);
}
void burstAnim(PVector v)
{
/*
fCount = frameCount;
while(frameCount<fCount+5)
console.log(frameCount);
*/
}
}
class cursor
{
board b;
int x, y;
color cStroke = color(0, 0, 0);
color cFill = color(0, 0, 0);
cursor(board ib, int ix, int iy){b=ib;x=ix;y=iy;}
void display()
{
cursorImage();
}
void mLeft()
{
x--;
}
void mRight()
{
x++;
}
void mUp()
{
y--;
}
void mDown()
{
y++;
}
void cursorImage()
{
int blockSize=b.w/6;
stroke(cStroke);
fill(cFill);
rect(b.xLoc+x*blockSize-1,
b.yLoc+y*blockSize-1,
4,
(blockSize+2)/3+1);
rect(b.xLoc+x*blockSize-1,
b.yLoc+y*blockSize+blockSize*2/3,
4,
(blockSize+2)/3+1);
rect(b.xLoc+x*blockSize+blockSize-3,
b.yLoc+y*blockSize+blockSize*2/3,
4,
(blockSize+2)/3+1);
rect(b.xLoc+x*blockSize+blockSize-3,
b.yLoc+y*blockSize-1,
4,
(blockSize+2)/3+1);
rect(b.xLoc+x*blockSize-1,
b.yLoc+y*blockSize-1,
(blockSize+2)/3+1,
4);
rect(b.xLoc+x*blockSize-1,
b.yLoc+y*blockSize+blockSize-3,
(blockSize+2)/3+1,
4);
rect(b.xLoc+x*blockSize+blockSize*2/3,
b.yLoc+y*blockSize+blockSize-3,
(blockSize+2)/3+1,
4);
rect(b.xLoc+x*blockSize+blockSize*2/3,
b.yLoc+y*blockSize-1,
(blockSize+2)/3+1,
4);
rect(b.xLoc+(x+1)*blockSize-1,
b.yLoc+y*blockSize-1,
4,
(blockSize+2)/3+1);
rect(b.xLoc+(x+1)*blockSize-1,
b.yLoc+y*blockSize+blockSize*2/3,
4,
(blockSize+2)/3+1);
rect(b.xLoc+(x+1)*blockSize+blockSize-3,
b.yLoc+y*blockSize+blockSize*2/3,
4,
(blockSize+2)/3+1);
rect(b.xLoc+(x+1)*blockSize+blockSize-3,
b.yLoc+y*blockSize-1,
4,
(blockSize+2)/3+1);
rect(b.xLoc+(x+1)*blockSize-1,
b.yLoc+y*blockSize-1,
(blockSize+2)/3+1,
4);
rect(b.xLoc+(x+1)*blockSize-1,
b.yLoc+y*blockSize+blockSize-3,
(blockSize+2)/3+1,
4);
rect(b.xLoc+(x+1)*blockSize+blockSize*2/3,
b.yLoc+y*blockSize+blockSize-3,
(blockSize+2)/3+1,
4);
rect(b.xLoc+(x+1)*blockSize+blockSize*2/3,
b.yLoc+y*blockSize-1,
(blockSize+2)/3+1,
4);
}
}
void keyPressed() {
if(key == 'a' || key == 'A')
{
p.mLeft();
}
else if(key == 'd' || key == 'D')
{
p.mRight();
}
else if(key == 'w' || key == 'W')
{
p.mUp();
}
else if((key == 's' || key == 'S') && p.y+1<12)
{
p.mDown();
}
else if(key == ' ' && (player.field[p.x][p.y]!=0 || player.field[p.x+1][p.y]!=0))
{
player.swap(p.x, p.y)
}
}