Реализация поля, игроков и enum к этим игрокам
у меня сложности с логическим понятием как обьединить(связать) и релизовать, например, ходы по игровому полю, само поле, свойства поля с ходами фигурок. Помогите пожалуйста разобраться.
Итак, я в игре должна создать от 1 до 6 игроков, каждый из них должен иметь по 2 фигуры, которые могут ходить по полю, обращение к фигурам должно происходить через их цвет(enum). Например вывод через toString будет выглядеть так - "PINK - A, PINK - B"(это пример одного игрока, у которого две фишки, разумеется у других будут собственные цвета, но принцип такой же).
- Как сделать автоматически чтобы я только вводила число игроков и они создавались автоматически без того, чтобы я не создавала обьект отдельно вручную вписывая постоянно enum?
- Я создала поле в 19 ячеек как массив. Как сделать так, чтобы некоторые ячейки этого поля имели определенные свойства и связать это с фигурками? Например, при посещении этого поля фигурка прыгнет на 2 хода вперед?
- Немного не понимаю как реализовать метод для выбора и передвижения фигур.
Буду благодарна за помощь и идеи
Ответы (1 шт):
Попробовал накидать пример создания игроков и ячеек. По поводу дополнительных свойств - можно добавить наследников класса Cell или добавить какой-нибудь новый enum со списком возможных свойств.
Код:
import lombok.Builder;
import lombok.Getter;
import lombok.ToString;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
public class Main {
enum PlayerColor {
RED, BLUE, YELLOW, GREEN, GREY, PURPLE
}
enum FigureId {
A, B
}
@Getter
@Builder
@ToString
static class Player {
private PlayerColor color;
}
@Getter
@Builder
@ToString
static class Figure {
private Player player;
private FigureId id;
}
@Getter
@Builder
@ToString
static class Cell {
private int x;
private int y;
private Figure figure;
public void moveTo(
Cell cell) {
cell.figure = figure;
figure = null;
}
}
public static void main(String... args) throws Exception {
int numberOfPlayers = 2;
int numberOfCells = 5;
// Создание игроков
List<Player> players =
IntStream.range(0, numberOfPlayers)
.mapToObj(p -> Player.builder()
.color(PlayerColor.values()[p])
.build())
.collect(Collectors.toList());
// Создание фигур
List<Figure> figures =
players.stream()
.flatMap(p -> Arrays.stream(FigureId.values())
.map(id ->
Figure.builder()
.id(id)
.player(p)
.build()))
.collect(Collectors.toList());
// Создание ячеек
List<Integer> indexes =
IntStream.range(0, numberOfCells * numberOfCells)
.boxed()
.collect(Collectors.toList());
List<Integer> randomIndexes =
randomElements(
indexes,
figures.size());
List<Cell> cells =
indexes.stream()
.map(i -> {
int randomIndex = randomIndexes.indexOf(i);
return Cell.builder()
.x((i / numberOfCells) + 1)
.y((i % numberOfCells) + 1)
.figure(randomIndex != -1 ? figures.get(randomIndex) : null)
.build();
})
.collect(Collectors.toList());
System.out.println(
cells.stream()
.map(Object::toString)
.collect(Collectors.joining(", \n")));
}
private static <T> List<T> randomElements(
List<T> list,
int count) {
List<T> temp =
new ArrayList<>(list);
Collections.shuffle(temp);
return temp.subList(0, count);
}
}
Результат:
Main.Cell(x=1, y=1, figure=null),
Main.Cell(x=1, y=2, figure=null),
Main.Cell(x=1, y=3, figure=null),
Main.Cell(x=1, y=4, figure=null),
Main.Cell(x=1, y=5, figure=null),
Main.Cell(x=2, y=1, figure=null),
Main.Cell(x=2, y=2, figure=null),
Main.Cell(x=2, y=3, figure=Main.Figure(player=Main.Player(color=RED), id=B)),
Main.Cell(x=2, y=4, figure=Main.Figure(player=Main.Player(color=BLUE), id=B)),
Main.Cell(x=2, y=5, figure=null),
Main.Cell(x=3, y=1, figure=null),
Main.Cell(x=3, y=2, figure=null),
Main.Cell(x=3, y=3, figure=null),
Main.Cell(x=3, y=4, figure=null),
Main.Cell(x=3, y=5, figure=null),
Main.Cell(x=4, y=1, figure=null),
Main.Cell(x=4, y=2, figure=null),
Main.Cell(x=4, y=3, figure=null),
Main.Cell(x=4, y=4, figure=Main.Figure(player=Main.Player(color=BLUE), id=A)),
Main.Cell(x=4, y=5, figure=null),
Main.Cell(x=5, y=1, figure=null),
Main.Cell(x=5, y=2, figure=Main.Figure(player=Main.Player(color=RED), id=A)),
Main.Cell(x=5, y=3, figure=null),
Main.Cell(x=5, y=4, figure=null),
Main.Cell(x=5, y=5, figure=null)