# scout-game Rust implementation of the card game **Scout**, originally designed by Kei Kanjino and published by Oink Games inc. ## Scout This readme is not intended as a game manual, and will assume familiarity with the rules. Scout is a trick taking card game for 3-5 players. In Scout players score points by creating and playing sets of cards. These sets may be either flushes (0,0,0) or straights (0,1,2). A core mechanic in scout is that players hands **cannot be reordered**. To create strong sets, players must therefore add necessary cards to their hand (Scout), or remove obstructions (Show). This module uses card values ranging from 0-9, instead of the original 1-10. ## Command Line Interface Running from the command-line will start a game against 3 computer players. When prompted for an action, enter one of the following actions: - `scout [left] [flip] [index]` - `show [start] [stop]` - `scoutshow [left] [flip] [index]` - `quit` All arguments should be numeric (1 representing `true`). The **scout** action has arguments: `left` for which side of the active set to scout, `flip` if the card is to be flipped, and the `index` to insert the card at. The **show** action has arguments `start` and `stop`, which are the inclusive bounds of the set to show. A single card can be played by repeating e.g. `show 2 2`. The final action, **scoutshow**, is simply the above actions combined. You should first enter arguments for the scout step, then you will be presented with a new view and can input a show action. Entering **quit** will cause the game to halt. This will print a debug view of the `GameState` before exiting. ## Library The primary reason for importing to a script would be to implement custom `Strategy` functions, to play against them or test them against the built-in computer players. To create a game instance, pass a vector of strategy functions to `scout::run`. You can add a human player with the `get_player_action` strategy. The number of strategies determines the number of players, which must be between 3 and 5. ```rust let strategies: Vec = vec![ scout::get_player_action, scout::strategy_rush, scout::strategy_rush, scout::strategy_rush, ]; match scout::run(&strategies) { Ok(game_result) => { println!("Game over! Scores: {:?}", game_result.scores); } Err(game) => { println!("Game halted!: {:?}", game); process::exit(1); } } ```