4个版本
0.3.3 | 2024年2月28日 |
---|---|
0.3.2 | 2024年2月16日 |
0.3.1 | 2024年2月16日 |
0.3.0 | 2024年2月16日 |
#147 in 游戏
在 rustblocks 中使用
36KB
712 行
blocks_lib
⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜
⬜🟨🟨⬜⬜🟪⬜⬜⬜⬜⬜⬜⬜⬜⬜🟧⬜🟦⬜⬜⬜⬜⬜🟩🟩⬜🟥🟥⬜⬜
⬜🟨🟨⬜🟪🟪🟪⬜🟫🟫🟫🟫⬜🟧🟧🟧⬜🟦🟦🟦🟦⬜🟩🟩⬜⬜⬜🟥🟥⬜
⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜
Blocks-lib 是一个简单基于四联块的落下游戏的游戏逻辑仅版本。
游戏大致遵循“官方”的四联块动态,但不实现“墙壁踢出”功能。它是完全单线程的,没有异步操作。
安装
cargo添加 blocks_lib
创建和操作游戏
要创建游戏,请调用游戏状态构造函数,添加事件处理程序,然后调用 start()。
let gs = GameState::new(
width,
height,
hide_next_piece,
difficulty
);
let ev = |ge: &GameEvent, gs: &GameState| match ge {
... Do something with the GameEvent to update the presentation ...
};
gs.add_event_handler(&ev);
gs.start();
GameState 结构具有许多方法,用于推动游戏前进和控制四联块
- GameState::move_left() 将当前四联块向左移动
- GameState::move_right() 将当前四联块向右移动
- GameState::move_down() 将当前四联块向下移动
- GameState::rotate_right() 将当前四联块向右旋转
- GameState::drop() 释放当前四联块
- GameState::advance() 通过释放当前四联块并执行其他维护活动来推进游戏。实现通常会定时调用 advanced()。使用 GameState::get_piece_interval() 获取建议的毫秒间隔,尽管实现可以有自己的间隔。
游戏事件
事件处理程序会在重要游戏事件发生时被调用
- GameEvent::GameStarted 当游戏开始时
- GameEvent::ScoreChanged 当得分改变时
- GameEvent::LevelChanged 当级别改变时
- GameEvent::PieceMoved 当四联块移动时
- GameEvent::PieceChanged 当当前四联块(和下一个四联块)改变时
- GameEvent::GameOver 当游戏结束时
- GameEvent::GameReset 当游戏重置时
视觉实现将响应对这些事件,并查询传递给事件处理程序的游戏状态对象以更新表示层。
游戏状态方法
-
GameState::get_board() 返回当前板上的四联块。板.cells嵌套向量中的每个条目都持有 PieceColor 枚举变体:Wall、Empty、Red、Green、Blue、Yellow、Cyan、Magenta、Orange、Tracer。Wall 和 Tracer 的颜色由实现决定,但建议使用其余的实际颜色名称。Empty 是板上的空白空间。
以下是一个示例绘图循环
for y in 0..board.height {
for x in 0..board.width {
draw_square(x, y, board.cells[x as usize][y as usize]);
}
}
- GameState::get_next_piece() 返回将放置到板上的下一个四联块
- GameState::get_score() 返回一个元组 (score, lines, level)
- GameState::get_status() 返回当前游戏状态。
- GameState::start() 开始游戏,触发 GameStarted 事件。
- GameState::add_event_handler(Fn(&GameEvent, &GameState)) 接收一个闭包或函数,并在每次触发 GameEvent 时调用它。处理函数不应尝试修改 GameState(实际上也不能),这纯粹是为了更新用户界面的展示,而不是实现额外的游戏逻辑。
依赖项
~310KB