2013-03-05 2 views
0

Я использую библиотеку LWJGL, и я пытаюсь сделать клон Tetris. Мне было интересно, может ли кто-нибудь дать мне какие-либо указания, потому что я застрял в координатах. У меня есть окно 277 * 500 с 264 плитами. Я планировал сделать каждого отдельного плитку независимым, чтобы я мог изменить его цвет по желанию, чтобы я мог, например, сделать Tetrominoes. Однако это было прервано, потому что я не могу понять, как сделать каждый плетеный идеал. На данный момент у меня есть цикл for, создающий плитки, и я собирался дать значение массиву для каждого добавления цикла for, чтобы дать каждому элементу значение независимого массива, но я тестировал его и не могу понять, как сделать это. Это самое лучшее, что у меня есть на данный момент, много всего это просто тестирование и прочее, но это насколько я получил.Java - проблема с координатами

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

ответ

2

Нет смысла указывать только координаты X, Y в многомерном массиве, так как вам нужно знать координаты, чтобы получить/установить что-либо в массиве. Вы уже знаете, где находятся плитки, вы хотите сохранить , что плитки.

Недавно я сделал матч-3 несколько дней назад с не слишком разнородным подходом. Некоторые советы ...

  • Используйте индексы массива для представления X и Y положения плитки
  • Используйте объект Java для представления плитки, а не массив (третьего уровня массива у вас есть выше)
  • Используйте место в 2D-массив для отслеживания положения плитки, но 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); 
+0

Спасибо за помощь, это означает вместо того, чтобы координаты для каждого квадрата, я должен назначить одно значение для каждого квадрата? Поэтому вместо координаты типа (1, 1) было бы 0? Кроме того, например, с плитками [6] [0], если предположить, что это форма линии тетромино, будет ли она оставаться как [6] и [0], или это будет изменяться по мере ее падения, и это только начальная позиция ? Просто я посмотрел код других людей, и у них никогда не было стартовой позиции, они делают что-то другое, что я действительно не понимаю. –

+0

Вот почему его лучше всего держать на этом этапе просто. После того, как вы внедрили это, вы поймете проблемную область больше, и вы, вероятно, сможете придумать гораздо лучшее решение. Что касается координат, подумайте о массиве 'плитки' как сетке на листе бумаги. 'Плитки [6] [0]' указывает на квадрат на сетке в 'X = 6' и' Y = 0'.Если вам не нравится идея исходной позиции, вы можете просто использовать 2D-массив для представления фиксированных плит и представлять падающие плитки по-другому. – Zutty

Смежные вопросы