Как динамически создать перечисление на основе пользовательского ввода в Rust

Я делаю игру, которая позволяет вам выбирать количество игроков, против которых вы играете; мы используем количество игроков для создания перечисления ходов игроков, по которому затем продвигаемся.

enum MetaGamePhase{
    ChoosePlayerCount,
    ConfirmLibrary,
    ChooseFirstTurn,
    InitialDraw,
    MulliganChoice,
    ActiveGame,
    EndGame,
    DeclareWinner,
    None
}

// need to set the contents of this based on the players choosing the player count
enum Turn{
    Player1,
    Player2,
    Player3,
}

enum Action {
    ProgressPlayerTurn
}

fn reducer(mut state: GameState, action: Action) -> GameState {
    match action{
        Action::ProgressPlayerTurn => GameState{
            turn: {
                use Turn::*;
// will also need to set this dynamically based on the enum
                match state.turn {
                    Player1 => Player2,
                    Player2 => Player3,
                    Player3 => Player1,
                }
            },
            ..state
        }
    }
}

struct GameState{
    turn: Turn,
    meta_game_phase: MetaGamePhase
}

Как бы я сделал это в ржавчине?

Перечисления представляют собой конструкцию только времени компиляции. Вместо этого вам следует использовать целочисленное значение для текущего игрока и количества игроков.

kmdreko 08.07.2024 03:22

Rust — это не Javascript, в нем есть четкое разделение между временем компиляции и временем выполнения. Создание перечислений может выполняться только во время компиляции, поэтому на него не влияют значения времени выполнения.

Jmb 08.07.2024 09:20

В чем преимущество использования такого типа циклического перечисления, а не просто кольцевого буфера или приоритетной очереди, из которой вы можете извлекать и извлекать данные по мере необходимости?

whatf0xx 08.07.2024 14:49

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

Adesoji Alu 08.07.2024 15:31
Почему Python в конце концов умрет
Почему Python в конце концов умрет
Последние 20 лет были действительно хорошими для Python. Он прошел путь от "просто языка сценариев" до основного языка, используемого для написания...
0
4
56
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ответ: вы не можете этого сделать, и вам следует использовать другую языковую функцию.

Другие вопросы по теме