[explorer] Implement a reset
command
Resets the board to an empty or starting state, or to a position specified by a FEN string.
This commit is contained in:
parent
d67c2cfb99
commit
39ca74459d
1 changed files with 27 additions and 0 deletions
|
@ -63,6 +63,17 @@ fn command_line() -> Command {
|
||||||
.arg(Arg::new("square").required(true))
|
.arg(Arg::new("square").required(true))
|
||||||
.about("Show moves of a piece on a square"),
|
.about("Show moves of a piece on a square"),
|
||||||
)
|
)
|
||||||
|
.subcommand(
|
||||||
|
Command::new("reset")
|
||||||
|
.subcommand(Command::new("clear").about("Reset to a cleared board"))
|
||||||
|
.subcommand(Command::new("starting").about("Reset to the starting position"))
|
||||||
|
.subcommand(
|
||||||
|
Command::new("fen")
|
||||||
|
.arg(Arg::new("fen").required(true))
|
||||||
|
.about("Reset to a position described by a FEN string"),
|
||||||
|
)
|
||||||
|
.about("Reset the board"),
|
||||||
|
)
|
||||||
.subcommand(Command::new("print").about("Print the board"))
|
.subcommand(Command::new("print").about("Print the board"))
|
||||||
.subcommand(Command::new("quit").alias("exit").about("Quit the program"))
|
.subcommand(Command::new("quit").alias("exit").about("Quit the program"))
|
||||||
.subcommand(Command::new("starting").about("Reset the board to the starting position"))
|
.subcommand(Command::new("starting").about("Reset the board to the starting position"))
|
||||||
|
@ -171,6 +182,7 @@ fn respond(line: &str, state: &mut State) -> Result<CommandResult, String> {
|
||||||
let starting_position = Position::starting();
|
let starting_position = Position::starting();
|
||||||
state.position = starting_position;
|
state.position = starting_position;
|
||||||
}
|
}
|
||||||
|
Some(("reset", matches)) => do_reset_command(state, matches)?,
|
||||||
Some((name, _matches)) => unimplemented!("{name}"),
|
Some((name, _matches)) => unimplemented!("{name}"),
|
||||||
None => unreachable!("Subcommand required"),
|
None => unreachable!("Subcommand required"),
|
||||||
}
|
}
|
||||||
|
@ -178,6 +190,21 @@ fn respond(line: &str, state: &mut State) -> Result<CommandResult, String> {
|
||||||
Ok(result)
|
Ok(result)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn do_reset_command(state: &mut State, matches: &clap::ArgMatches) -> Result<(), String> {
|
||||||
|
match matches.subcommand() {
|
||||||
|
None | Some(("clear", _)) => state.position = Position::empty(),
|
||||||
|
Some(("starting", _)) => state.position = Position::starting(),
|
||||||
|
Some(("fen", matches)) => {
|
||||||
|
let fen = matches.get_one::<String>("fen").ok_or("Missing FEN")?;
|
||||||
|
let board = Board::from_fen_str(fen).map_err(|err| format!("{err}"))?;
|
||||||
|
state.position = Position::new(board);
|
||||||
|
}
|
||||||
|
Some((name, _matches)) => unimplemented!("{name}"),
|
||||||
|
}
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
fn main() -> Result<(), String> {
|
fn main() -> Result<(), String> {
|
||||||
let mut editor = DefaultEditor::new().map_err(|err| format!("Error: {err}"))?;
|
let mut editor = DefaultEditor::new().map_err(|err| format!("Error: {err}"))?;
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue