Лучшие помощники
- Megamozg 2190 б
- Matalya1 1800 б
- DevAdmin 1695 б
- arkasha_bortnikov 860 б
- Dwayne_Johnson 845 б
18 мая 2023 18:41
222
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
Остались вопросы?
Еще вопросы по категории Информатика
В массиве Tem хранятся данные о среднесуточной температуре за неделю в градусах. Tem[0] - данные за понедельник, Tem[1] -данные за вторник и т.д....
Кем и когда были созданы первые электронные таблицы?...
Дан фрагмент таблицы истинности выражения F:(продолжение в фото) Помогите пожалуйста...
Отметь лишнее. рычание льва, мычание коровы, вкус хлеба, шелест листьев, журнале ручья. ответ...
Ниже приведена программа, записанная на пяти языках программирования. Алгоритмический языкПаскаль алг нач цел s, t вв...
Все предметы