5个版本 (2个稳定版)
1.1.0 | 2020年1月7日 |
---|---|
1.0.0 | 2019年12月8日 |
0.2.0 | 2019年12月7日 |
0.1.1 | 2019年12月6日 |
0.1.0 | 2019年11月26日 |
#436 in 游戏
32KB
422 行
bitboard_xo
一个专注于最小内存使用(不牺牲性能)的XO(又称井字棋/圈叉棋)库。
通过使用位图(棋类游戏中常见的数据结构),适应XO游戏来实现最小内存使用。
当前XO类型的sizeof为32位,小于大多数机器的指针。
示例
use bitboard_xo::*;
use std::error::Error;
use std::io::{stdin, stdout, Write};
/// try read a u8 from console
fn read_u8() -> Result<u32, Box<dyn Error>> {
let mut user_input = String::new();
stdin().read_line(&mut user_input)?;
Ok(user_input.trim().parse()?)
}
/// prompt user for input to get xo position
fn get_xo_pos() -> XOPos {
fn try_get_xo_pos() -> Result<XOPos, Box<dyn Error>> {
// prompt user and read row from console
print!("Input row : ");
stdout().flush()?;
let row = read_u8()?;
// prompt user and read col from console
print!("Input col : ");
stdout().flush()?;
let col = read_u8()?;
// parse row, col into XOPos
Ok(XOPos::row_col(row, col)?)
};
loop {
match try_get_xo_pos() {
Ok(xo_pos) => break xo_pos,
Err(err) => println!("{}", err),
}
}
}
fn main() -> Result<(), XOError> {
// create new XO game
let mut game = XO::new();
loop {
println!("{}", game);
// get position from user's input
let input_xo_pos = get_xo_pos();
// play at that position and match the returned game state
match game.play(input_xo_pos) {
// game end
Ok(Some(game_result)) => {
println!("{}", game);
println!("game result => {:?}", game_result);
break;
}
// game continue
Ok(None) => println!("game continue..."),
// some game error occurred
Err(xo_err) => println!("Error: {}", xo_err),
}
}
Ok(())
}
许可证:MIT
依赖项
~48KB