Клон Тетрис на Java


У меня есть представление для каждого первоначальную форму , как перечисление с точки а другой для каждого поворачивать фигуры в то же перечисление.

Вот пример последнего перечисления:

// 
//     * *
//     *
//     * 
J_SHAPE_SOUTH(new Point[] {
        new Point(2, 0),
        new Point(2, 1),
        new Point(2, 2),
        new Point(3, 2)
}),

// 
//   * *  
//     *  
//     *  
L_SHAPE_SOUTH(new Point[] {
        new Point(1, 2),
        new Point(2, 0),
        new Point(2, 1),
        new Point(2, 2)
});

Мне тогда интересно, Стоит ли двигаться после поворота фигуры на отдельные перечисления, скажи, что RotatedJShape, или просто держать все перевернутые фигуры в той же Енум. Меня беспокоит то, что некоторые фигуры как у меня-форма имеет только один повернут состоянии, так что кажется бессмысленным для перечисления на эту форму.

Что бы быть наиболее подходящую в моем случае с точки зрения масштабируемости и правильность кода?



839
6
задан 5 мая 2011 в 09:05 Источник Поделиться
Комментарии
3 ответа

Давным-давно я сделал клон Тетриса, и моя идея для структуры данных был такой:

Список круговые связанных матриц.

Как можно повернуть? Пройтись по списку...

Вы можете иметь один массив из этих списков (один для каждого типа блока), и понятие игровой логики в "текущая часть" - это ссылка на что-то внутри этой таблицы. Таким образом, игра логика не может иметь знания о различных формах, и вы заявляете, небольшой массив, который определяет, какие фигуры.

9
ответ дан 6 мая 2011 в 02:05 Источник Поделиться

Как вы вращая их сейчас? Бы больше смысла, чтобы изменить от типа enum class с методом поворота, а?

5
ответ дан 5 мая 2011 в 10:05 Источник Поделиться

Иметь перечислимый как ты на куски.

Это нормально.

Очки-это больше работы, чем нужно.

Пьеса в пьесе является экземпляром, с ссылкой на оригинал перечисление.

class FallingBlock {
BlockEnum originalBlock;
Point location;
Shape shapeToDraw; // a copy of the original shape so you can manipulate it.
}

Экземпляр формы можно вращать, масштабировать и т. д.. Java2D довольно полезная.
Вы могли бы сделать это все с AffineTransforms на оригинальные формы , и не имеют оригинальную форму и копию, но этот способ менее сложен.
И вы можете иметь сколь угодно сложные формы!
Вы держите исходные значения, и поэтому вы можете отобразить его в области "текущий блок".

2
ответ дан 17 мая 2011 в 12:05 Источник Поделиться