我正在使用LWJGL库,我正在尝试制作俄罗斯方块克隆。我想知道是否有人可以给我任何指针,因为我被困在坐标处。我有一个277 * 500的窗口,有264个瓷砖。我打算让每个单独的瓷砖独立,所以我可以随意改变它的颜色,所以我可以做例如Tetrominoes。然而,这已经停止了,因为我无法弄清楚如何使每个瓷砖都是独立的。目前我有一个for循环创建tile,我将为for循环的每个添加赋予一个数组的值,以给每个tile一个独立的数组值,但我已经测试过,无法弄清楚如何去做这个。这是我目前最好的,很多只是测试和东西,但它是我已经得到的。
package tetris;
import static org.lwjgl.opengl.GL11.*;
import org.lwjgl.LWJGLException;
import org.lwjgl.opengl.*;
import org.lwjgl.input.*;
public class game {
int wx = 277;
int hy = 500;
String score = "0";
public game() throws LWJGLException {
Display.setDisplayMode(new DisplayMode(wx, hy));
Display.create();
Display.setTitle("Tetris");
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, wx, 0, hy, 1, -1);
glMatrixMode(GL_MODELVIEW);
while(!Display.isCloseRequested()) {
Display.update();
Display.sync(500);
simpleText.drawString(score, 3, 3);
int[][][] coordsTable = new int[][][] {
// 0 1 2 3 4 5 6 7 8 9 10 11
/* 0 */ { { 1, 1 }, { 1, 2 }, { 1, 3 }, { 1, 4 }, { 1, 5 }, { 1, 6 }, { 1, 7 }, { 1, 8 }, { 1, 9 }, { 1, 10 }, { 1, 11 }, { 1, 12 } },
/* 1 */ { { 2, 1 }, { 2, 2 }, { 2, 3 }, { 2, 4 }, { 2, 5 }, { 2, 6 }, { 2, 7 }, { 2, 8 }, { 2, 9 }, { 2, 10 }, { 2, 11 }, { 2, 12 } },
/* 2 */ { { 3, 1 }, { 3, 2 }, { 3, 3 }, { 3, 4 }, { 3, 5 }, { 3, 6 }, { 3, 7 }, { 3, 8 }, { 3, 9 }, { 3, 10 }, { 3, 11 }, { 3, 12 } },
/* 3 */ { { 4, 1 }, { 4, 2 }, { 4, 3 }, { 4, 4 }, { 4, 5 }, { 4, 6 }, { 4, 7 }, { 4, 8 }, { 4, 9 }, { 4, 10 }, { 4, 11 }, { 4, 12 } },
/* 4 */ { { 5, 1 }, { 5, 2 }, { 5, 3 }, { 5, 4 }, { 5, 5 }, { 5, 6 }, { 5, 7 }, { 5, 8 }, { 5, 9 }, { 5, 10 }, { 5, 11 }, { 5, 12 } },
/* 5 */ { { 6, 1 }, { 6, 2 }, { 6, 3 }, { 6, 4 }, { 6, 5 }, { 6, 6 }, { 6, 7 }, { 6, 8 }, { 6, 9 }, { 6, 10 }, { 6, 11 }, { 6, 12 } },
/* 6 */ { { 7, 1 }, { 7, 2 }, { 7, 3 }, { 7, 4 }, { 7, 5 }, { 7, 6 }, { 7, 7 }, { 7, 8 }, { 7, 9 }, { 7, 10 }, { 7, 11 }, { 7, 12 } },
/* 7 */ { { 8, 1 }, { 8, 2 }, { 8, 3 }, { 8, 4 }, { 8, 5 }, { 8, 6 }, { 8, 7 }, { 8, 8 }, { 8, 9 }, { 8, 10 }, { 8, 11 }, { 8, 12 } },
/* 8 */ { { 9, 1 }, { 9, 2 }, { 9, 3 }, { 9, 4 }, { 9, 5 }, { 9, 6 }, { 9, 7 }, { 9, 8 }, { 9, 9 }, { 9, 10 }, { 9, 11 }, { 9, 12 } },
/* 9 */ { { 10, 1 }, { 10, 2 }, { 10, 3 }, { 10, 4 }, { 10, 5 }, { 10, 6 }, { 10, 7 }, { 10, 8 }, { 10, 9 }, { 10, 10 }, { 10, 11 }, { 10, 12 } },
/* 10 */ { { 11, 1 }, { 11, 2 }, { 11, 3 }, { 11, 4 }, { 11, 5 }, { 11, 6 }, { 11, 7 }, { 11, 8 }, { 11, 9 }, { 11, 10 }, { 11, 11 }, { 11, 12 } },
/* 11 */ { { 12, 1 }, { 12, 2 }, { 12, 3 }, { 12, 4 }, { 12, 5 }, { 12, 6 }, { 12, 7 }, { 12, 8 }, { 12, 9 }, { 12, 10 }, { 12, 11 }, { 12, 12 } },
/* 12 */ { { 13, 1 }, { 13, 2 }, { 13, 3 }, { 13, 4 }, { 13, 5 }, { 13, 6 }, { 13, 7 }, { 13, 8 }, { 13, 9 }, { 13, 10 }, { 13, 11 }, { 13, 12 } },
/* 13 */ { { 14, 1 }, { 14, 2 }, { 14, 3 }, { 14, 4 }, { 14, 5 }, { 14, 6 }, { 14, 7 }, { 14, 8 }, { 14, 9 }, { 14, 10 }, { 14, 11 }, { 14, 12 } },
/* 14 */ { { 15, 1 }, { 15, 2 }, { 15, 3 }, { 15, 4 }, { 15, 5 }, { 15, 6 }, { 15, 7 }, { 15, 8 }, { 15, 9 }, { 15, 10 }, { 15, 11 }, { 15, 12 } },
/* 15 */ { { 16, 1 }, { 16, 2 }, { 16, 3 }, { 16, 4 }, { 16, 5 }, { 16, 6 }, { 16, 7 }, { 16, 8 }, { 16, 9 }, { 16, 10 }, { 16, 11 }, { 16, 12 } },
/* 16 */ { { 17, 1 }, { 17, 2 }, { 17, 3 }, { 17, 4 }, { 17, 5 }, { 17, 6 }, { 17, 7 }, { 17, 8 }, { 17, 9 }, { 17, 10 }, { 17, 11 }, { 17, 12 } },
/* 17 */ { { 18, 1 }, { 18, 2 }, { 18, 3 }, { 18, 4 }, { 18, 5 }, { 18, 6 }, { 18, 7 }, { 18, 8 }, { 18, 9 }, { 18, 10 }, { 18, 11 }, { 18, 12 } },
/* 18 */ { { 19, 1 }, { 19, 2 }, { 19, 3 }, { 19, 4 }, { 19, 5 }, { 19, 6 }, { 19, 7 }, { 19, 8 }, { 19, 9 }, { 19, 10 }, { 19, 11 }, { 19, 12 } },
/* 19 */ { { 20, 1 }, { 20, 2 }, { 20, 3 }, { 20, 4 }, { 20, 5 }, { 20, 6 }, { 20, 7 }, { 20, 8 }, { 20, 9 }, { 20, 10 }, { 20, 11 }, { 20, 12 } },
/* 20 */ { { 21, 1 }, { 21, 2 }, { 21, 3 }, { 21, 4 }, { 21, 5 }, { 21, 6 }, { 21, 7 }, { 21, 8 }, { 21, 9 }, { 21, 10 }, { 21, 11 }, { 21, 12 } },
/* 21 */ { { 22, 1 }, { 22, 2 }, { 22, 3 }, { 22, 4 }, { 22, 5 }, { 22, 6 }, { 22, 7 }, { 22, 8 }, { 22, 9 }, { 22, 10 }, { 22, 11 }, { 22, 12 } }
};
int[] coords = new int[263];
for(int j=22; j<hy; j+=22) {
for(double i=2; i<wx; i+=23) {
square(i, hy-j, 20.5, 1, 1, 1);
}
}
}
}
public void square(double posX, double posY, double size, float r, float g, float b) {
glBegin(GL_QUADS);
glVertex2d(posX, posY);
glVertex2d(posX, posY+size);
glVertex2d(posX+size, posY+size);
glVertex2d(posX+size, posY);
glColor3f(r, g, b);
glEnd();
}
public static void main(String[] args) throws LWJGLException {
new game();
}
}
任何帮助将不胜感激! :d
答案 0 :(得分:2)
在这样的多维数组中仅存储X, Y
坐标几乎没有意义,因为您需要知道坐标才能获取/设置数组中的任何内容。您已经知道了瓷砖的位置,您想要存储瓷砖是什么。
我最近在几天前用一种不太相似的方法制作了一场三场比赛。一些提示......
X
和Y
位置Tile
个对象本身可以跟踪颜色等属性null
表示图块网格中没有图块Tetromino
类将图块分组,或者表示不同的图案Tile
且其下方的单元格为空(即null
),请将其向下移动。很好,也很容易。这样的事可能会让你失望......
class Tile {
private Color color;
... // getter/setter methods etc...
}
Tile[][] tiles = new Tile[12][22 + 4]; // 4 extra for space to spawn new tiles
// Create a new tetromino - lets say a 1x4 in the middle of the grid
// The first array index will the the X coordinate, and the second the Y coordindate
tiles[6][0] = new Tile(RED);
tiles[6][1] = new Tile(RED);
tiles[6][2] = new Tile(RED);
tiles[6][3] = new Tile(RED);