Лучшие помощники
- Megamozg 2205 б
- Matalya1 1800 б
- DevAdmin 1720 б
- arkasha_bortnikov 900 б
- Dwayne_Johnson 870 б
18 мая 2023 18:41
466
package com.tetris.tetris;
import java.util.Random;
enum TetraminoType {
SQUARE_SHAPED,
T_SHAPED,
L_SHAPED,
LINE_SHAPED,
Z_SHAPED,
INV_L_SHAPED,
INV_Z_SHAPED;
private static final TetraminoType[] VALUES = values();
private static final int SIZE = VALUES.length;
private static final Random RANDOM = new Random();
public static TetraminoType getRandomTetramino() {
return VALUES[RANDOM.nextInt(SIZE)];
}
}
class Tetramino {
BasicBlock[] blocks;
TetraminoType type;
Tetramino(TetraminoType type, int tetraId) {
Coordinate[] coordinates;
switch (type) {
case SQUARE_SHAPED:
coordinates = new Coordinate[]{
new Coordinate(0, 10),
new Coordinate(1, 10),
new Coordinate(1, 11),
new Coordinate(0, 11)
};
blocks = this.blocksGenerator(tetraId, 1, coordinates);
break;
case INV_L_SHAPED:
coordinates = new Coordinate[]{
new Coordinate(0, 10),
new Coordinate(0, 11),
new Coordinate(1, 10),
new Coordinate(2, 10)
};
blocks = this.blocksGenerator(tetraId, 2, coordinates);
break;
case L_SHAPED:
coordinates = new Coordinate[]{
new Coordinate(0, 11),
new Coordinate(0, 10),
new Coordinate(1, 11),
new Coordinate(2, 11)
};
blocks = this.blocksGenerator(tetraId, 3, coordinates);
break;
case T_SHAPED:
coordinates = new Coordinate[]{
new Coordinate(1, 10),
new Coordinate(0, 10),
new Coordinate(1, 11),
new Coordinate(2, 10)
};
blocks = this.blocksGenerator(tetraId, 4, coordinates);
break;
case Z_SHAPED:
coordinates = new Coordinate[]{
new Coordinate(1, 11),
new Coordinate(1, 10),
new Coordinate(0, 10),
new Coordinate(2, 11)
};
blocks = this.blocksGenerator(tetraId, 5, coordinates);
break;
case INV_Z_SHAPED:
coordinates = new Coordinate[]{
new Coordinate(1, 11),
new Coordinate(0, 11),
new Coordinate(1, 10),
new Coordinate(2, 10)
};
blocks = this.blocksGenerator(tetraId, 6, coordinates);
break;
case LINE_SHAPED:
coordinates = new Coordinate[]{
new Coordinate(0, 10),
new Coordinate(1, 10),
new Coordinate(2, 10),
new Coordinate(3, 10)
};
blocks = this.blocksGenerator(tetraId, 7, coordinates);
break;
}
}
private Tetramino(BasicBlock[] blocks) {
this.blocks = blocks;
}
private BasicBlock[] blocksGenerator(int tetraId, int colour, Coordinate[] coordinates) {
BasicBlock[] blocks = new BasicBlock[coordinates.length];
for (int itr = 0; itr < coordinates.length; itr++) {
blocks[itr] = new BasicBlock(colour, tetraId, coordinates[itr], BasicBlockState.ON_TETRAMINO);
}
return blocks;
}
Tetramino copy(int tetraId) {
BasicBlock[] newBlocks = new BasicBlock[this.blocks.length];
for (int itr = 0; itr < this.blocks.length; itr++) {
newBlocks[itr] = this.blocks[itr].copy();
newBlocks[itr].tetraId = tetraId;
}
return new Tetramino(newBlocks);
}
void moveDown() {
for (BasicBlock block : blocks) {
block.coordinate.y++;
}
}
void moveLeft() {
for (BasicBlock block : blocks) {
block.coordinate.x--;
}
}
void moveRight() {
for (BasicBlock block : blocks) {
block.coordinate.x++;
}
}
void performClockWiseRotation() {
BasicBlock referenceBlock = blocks[0];
for (BasicBlock block : blocks) {
Coordinate baseCoordinate = Coordinate.sub(block.coordinate, referenceBlock.coordinate);
block.coordinate = Coordinate.add(Coordinate.rotateAntiClock(baseCoordinate), referenceBlock.coordinate);
}
}
}
Помогите, пожалуйста, какая тут логика класса? написано на Джаве
1
ответ
Этот код реализует игру Тетрис.
Класс `TetraminoType` - это перечисление, которое содержит все возможные типы тетрамино (фигурок) в игре.
Класс `Tetramino` - это класс, который представляет конкретное тетрамино в игре. Он имеет свойство `blocks`, которое является массивом объектов `BasicBlock`, представляющих отдельные блоки тетрамино. Также у него есть свойство `type`, которое определяет тип тетрамино.
Конструктор `Tetramino` создает новый объект тетрамино на основе переданного типа и идентификатора. Он использует метод `blocksGenerator`, чтобы создать массив блоков для тетрамино.
Метод `copy` создает копию тетрамино с новым идентификатором.
Методы `moveDown`, `moveLeft` и `moveRight` перемещают тетрамино вниз, влево и вправо соответственно.
Метод `performClockWiseRotation` выполняет поворот тетрамино по часовой стрелке относительно блока, который находится в верхнем левом углу тетрамино.
Класс `TetraminoType` - это перечисление, которое содержит все возможные типы тетрамино (фигурок) в игре.
Класс `Tetramino` - это класс, который представляет конкретное тетрамино в игре. Он имеет свойство `blocks`, которое является массивом объектов `BasicBlock`, представляющих отдельные блоки тетрамино. Также у него есть свойство `type`, которое определяет тип тетрамино.
Конструктор `Tetramino` создает новый объект тетрамино на основе переданного типа и идентификатора. Он использует метод `blocksGenerator`, чтобы создать массив блоков для тетрамино.
Метод `copy` создает копию тетрамино с новым идентификатором.
Методы `moveDown`, `moveLeft` и `moveRight` перемещают тетрамино вниз, влево и вправо соответственно.
Метод `performClockWiseRotation` выполняет поворот тетрамино по часовой стрелке относительно блока, который находится в верхнем левом углу тетрамино.
0
·
Хороший ответ
18 мая 2023 18:42
Остались вопросы?
Еще вопросы по категории Информатика
Что нужно сделать что бы нарисовать "солнце"в графическом редакторе "paint".Помогите пожалуйста,и желательно чем больше пунктов тем лучше))Главное пра...
41. Постройте на координатной плоскости рисунок, отметив и соединив точки в текой последовательности: 1-2-3-4-5-6-7- 8-9-10-7-11-12-13-14-11-15-16-17-...
Что такое программное обеспечение компьютера?Какова его роль?...
Дан текст: У ЁЛКИ ИГОЛКИ КОЛКИ Составьте кодовую таблицу, поставив в соответствие каждой букве порядковый номер её первого вхождения в текст; повторны...
постройте граф отражающий отношение между следующими обьектами: компьютер, процессор, память, устройство ввода , внутренняя память, внешняя память , о...