2013-03-18 4 views
4

Допустим, у меня есть 2D целочисленный массив ..Заполните все 2D Array (Tetris доска) с Тетрис штук, без пробелов осталось (Java)

int[][] board = new int[10][20]; 

public void initBoard() 
{ 
    for(int r = 0; r < 10; r++) 
     for(int c = 0; c < 20; c++) 
      board[r][c] = 0; 
} 

0 означает, что нет куска Куски представлены 1 -7;

1 - Z Форма

2 - S Shape

3 - Линия Shape

4 - Т Форма

5 - Box Shape

6 - L Форма

7 - Обратно L Форма

Каков наилучший способ заполнить весь массив случайными фигурами и пробелами.

Примечание: У меня есть игра работает, я просто пытаюсь адаптировать его к чему-то другом в то же время с помощью тетрис игры

+1

Определите «лучший». Использование наименьшего количества блоков? Вероятно, это будет состоять из использования в основном/исключительно форм с большинством блоков. Есть много и много вариантов, просто попробуйте заполнить 2-3 строки за раз, это должно быть достаточно легко. – Dukeling

+0

Лучшее как в самом простом/наиболее эффективном. Требование суммы блока не требуется. Я предпочел бы использовать равную сумму (как можно больше) каждого блока каждый раз. –

+0

Проще всего просто заполнить его формами ящиков или линиями, не так ли? –

ответ

0

Это не так просто, как кажется. Это NP-hard problem на самом деле. Packing rectangles is similar, вы можете начать с этой немного более простой проблемы.

+0

Ничто не так просто, как кажется, когда дело доходит до Computer Science haha. Да, я, скорее всего, просто сделаю кучу предопределенных массивов. –

+0

Да, вы можете попробовать «инженерный метод»;) Предопределенные или просто случайные броски блоков ... Или и то, и другое - сделайте маленькие прямоугольники из нескольких частей, а затем произвольно поместите их в каждую ячейку сетки из прямоугольников. –

+0

Я ... не думал об этом. Это блестящая идея. –

0

Это на самом деле очень сложный вопрос, который вы задаете. В области компьютерных наук он известен как Packing Problem, и существует множество возможных алгоритмов и возможных подходов, в зависимости от точного характера того, что вы хотите достичь.

В общем случае эта проблема сложна, очень сложна, на самом деле NP-сложно найти оптимальное общее решение. Для получения дополнительной информации просмотрите исследовательскую работу на Demaine et al from MIT.

+0

Да, я искал несколько часов и провел свои собственные тесты с небольшими результатами. Я мог бы просто создать несколько предопределенных массивов для работы. –

+0

Чтобы понять, возможно ли, что вы хотите сделать, вам нужно быть немного более конкретным относительно * точно * того, чего вы пытаетесь достичь. – JohnnyO

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

  • Нет связанных вопросов^_^