Лучшие помощники
- Megamozg 2205 б
- Matalya1 1800 б
- DevAdmin 1720 б
- arkasha_bortnikov 900 б
- Dwayne_Johnson 870 б
18 мая 2023 18:41
451
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
Остались вопросы?
Еще вопросы по категории Информатика
Робот-попугай Лёшенька хочет поразить своего создателя Бориса Ивановича тем, как хорошо он помнит «Трёх мушкетёров» (это любимый фильм Бориса Иванович...
вождь племени мульти поручил своему министру разработать двоичный код и перевести в него всю важную информацию.достаточно ли пятиразрядного двоичного...
В трех седьмых классах 70 ребят.Из них 27 занимаются в драмкружке,32 поют в хоре,22 увлекаются спортом.В драмкружке-10 ребят из хора,в хоре-6 спортсме...
Вычислить число витков катушки индуктивности по формуле: W=10×√L(0,44+a/D)/d) , где L - индукстивность; a - длина намотки; D - диаметр катушки. Диамет...
Значение арифметического выражения: 512^230 + 256^64 - 32^23 записали в системе счисления с основанием 2. Сколько цифр «0» в этой записи?...