Skip to content

Instantly share code, notes, and snippets.

@MattRoelle
Created October 27, 2012 01:39
Show Gist options
  • Save MattRoelle/3962609 to your computer and use it in GitHub Desktop.
Save MattRoelle/3962609 to your computer and use it in GitHub Desktop.
import static org.lwjgl.opengl.GL11.*;
public class Block {
public boolean tiles[][] = new boolean[4][4];
/*
* Allowed shapes
* (Regular tetris shapes)
* i
* j
* l
* o
* z
* t
* s
*/
public float baseX;
public float baseY;
public float r;
public float g;
public float b;
public char type;
public int blockstate = 1;
public Block(char type, float x, float y) {
clearTiles();
this.baseX = x;
this.baseY = y;
this.type = type;
switch(type) {
case 'i':
this.r = 0;
this.g = 210;
this.b = 255;
break;
case 'j':
this.r = 10;
this.g = 255;
this.b = 10;
break;
case 'l':
this.r = 0;
this.g = 0;
this.b = 255;
break;
case 'o':
this.r = 255;
this.g = 255;
this.b = 0;
break;
case 'z':
this.r = 200;
this.g = 200;
this.b = 200;
break;
case 't':
this.r = 200;
this.g = 200;
this.b = 200;
break;
case 's':
this.r = 200;
this.g = 200;
this.b = 200;
break;
}
refresh();
}
private void clearTiles() {
for(int xi = 0; xi < 4; xi++) {
for(int yi = 0; yi < 4; yi++) {
tiles[xi][yi] = false;
}
}
}
public void rotate(int dir) {
blockstate += dir;
if (blockstate < 1) { blockstate = 4; }
if (blockstate > 4) { blockstate = 1; }
refresh();
}
private void refresh() {
switch(type) {
case 'i':
clearTiles();
if (blockstate == 1) {
tiles[0][1] = true;
tiles[1][1] = true;
tiles[2][1] = true;
tiles[3][1] = true;
}
if (blockstate == 2) {
tiles[2][0] = true;
tiles[2][1] = true;
tiles[2][2] = true;
tiles[2][3] = true;
}
if (blockstate == 3) {
tiles[0][2] = true;
tiles[1][2] = true;
tiles[2][2] = true;
tiles[3][2] = true;
}
if (blockstate == 4) {
tiles[1][0] = true;
tiles[1][1] = true;
tiles[1][2] = true;
tiles[1][3] = true;
}
break;
case 'j':
clearTiles();
if (blockstate == 1) {
tiles[2][1] = true;
tiles[2][2] = true;
tiles[2][3] = true;
tiles[1][3] = true;
}
else if (blockstate == 2 ) {
tiles[2][2] = true;
tiles[1][2] = true;
tiles[1][1] = true;
tiles[3][2] = true;
}
else if (blockstate == 3) {
tiles[2][2] = true;
tiles[2][1] = true;
tiles[3][1] = true;
tiles[2][3] = true;
}
else if (blockstate == 4) {
tiles[2][2] = true;
tiles[3][2] = true;
tiles[3][3] = true;
tiles[1][2] = true;
}
break;
case 'l':
clearTiles();
if (blockstate == 1) {
tiles[2][1] = true;
tiles[2][2] = true;
tiles[2][3] = true;
tiles[3][3] = true;
}
else if (blockstate == 2 ) {
tiles[2][2] = true;
tiles[1][2] = true;
tiles[1][3] = true;
tiles[3][2] = true;
}
else if (blockstate == 3) {
tiles[2][2] = true;
tiles[2][1] = true;
tiles[1][1] = true;
tiles[2][3] = true;
}
else if (blockstate == 4) {
tiles[2][2] = true;
tiles[3][2] = true;
tiles[3][1] = true;
tiles[1][2] = true;
}
break;
case 'o':
tiles[2][2] = true;
tiles[2][3] = true;
tiles[3][2] = true;
tiles[3][3] = true;
break;
case 'z':
clearTiles();
if (blockstate == 1) {
tiles[0][0] = true;
tiles[1][0] = true;
tiles[1][1] = true;
tiles[2][1] = true;
}
if (blockstate == 2) {
tiles[1][1] = true;
tiles[2][1] = true;
tiles[2][0] = true;
tiles[1][2] = true;
}
if (blockstate == 3) {
tiles[0][2] = true;
tiles[1][2] = true;
tiles[1][1] = true;
tiles[2][1] = true;
}
if (blockstate == 4) {
tiles[0][1] = true;
tiles[0][2] = true;
tiles[1][1] = true;
tiles[1][0] = true;
}
break;
case 't':
clearTiles();
if (blockstate == 1) {
tiles[0][1] = true;
tiles[1][1] = true;
tiles[2][1] = true;
tiles[1][0] = true;
}
if (blockstate == 2) {
tiles[1][0] = true;
tiles[1][1] = true;
tiles[1][2] = true;
tiles[2][1] = true;
}
if (blockstate == 3) {
tiles[0][1] = true;
tiles[1][1] = true;
tiles[2][1] = true;
tiles[1][2] = true;
}
if (blockstate == 4) {
tiles[1][0] = true;
tiles[1][1] = true;
tiles[1][2] = true;
tiles[0][1] = true;
}
break;
case 's':
clearTiles();
if (blockstate == 1) {
tiles[0][1] = true;
tiles[1][1] = true;
tiles[1][0] = true;
tiles[2][0] = true;
}
if (blockstate == 2) {
tiles[1][0] = true;
tiles[1][1] = true;
tiles[2][1] = true;
tiles[2][2] = true;
}
if (blockstate == 3) {
tiles[0][2] = true;
tiles[1][2] = true;
tiles[1][1] = true;
tiles[2][1] = true;
}
if (blockstate == 4) {
tiles[0][0] = true;
tiles[0][1] = true;
tiles[1][1] = true;
tiles[1][2] = true;
}
break;
}
}
public void render() {
for(int x = 0; x < 4; x++) {
for(int y = 0; y < 4; y++) {
if (tiles[x][y] == true) {
glPushMatrix();
glTranslatef(baseX+(x*20), baseY+(y*20),0);
glBegin(GL_QUADS);
glColor3f(r/255,g/255,b/255);
glVertex2f(0,0);
glVertex2f(20,0);
glVertex2f(20,20);
glVertex2f(0,20);
glEnd();
glPopMatrix();
}
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment