4个版本
0.1.4 | 2023年2月7日 |
---|---|
0.1.3 | 2023年2月3日 |
0.1.2 | 2023年2月3日 |
0.1.0 | 2023年2月3日 |
#412 in 游戏
34KB
872 行
tetris-rs
基于命令行的Rust版俄罗斯方块
Rust初学者的好例子 + 项目架构开发
项目结构
├── Cargo.lock
├── Cargo.toml
├── readme.md //this document
├── src
│ ├── bricks.rs
│ ├── display.rs //display game core
│ ├── env.rs // Environment Variable structure
│ ├── game.rs //game core
│ ├── main.rs //entry
│ └── record.rs //score computing & statistics
└── target
├── CACHEDIR.TAG
├── debug
├── package
└── release
开始
将可执行命令添加到您的路径中
cargo install tetris-rs
执行编译后的命令
tetris
tetris
或者,如果您不想让tetris成为全局可识别的可执行命令,您可以下载源文件并手动编译
git clone https://github.com/kunieone/tetris_rs && cd tetris_rs
cargo run .
配置
设置环境变量以进行自定义
# defaults:
FEATURE_BRICK=true #bool
ACCELERATE_MODE=true #bool
WIDTH=13 #number
HEIGHT=20 #number
TEXTURE_FULL='#' #char
TEXTURE_WALL='O' #char
TEXTURE_EMPTY=' ' #char
TEXTURE_SHADOW='+' #char
示例
TEXTURE_FULL='%' FEATURE_BRICK=false tetris
砖块
pub enum BrickType {
// 7 classic bricks
I,
O,
T,
S,
Z,
L,
J,
// FEATURE_BRICK to enable feature bricks
// #
Dot,
// # #
// ###
Desk,
// #
// ##
Angle,
// #
// ##
// ##
W,
// ##
Bean,
}
得分计算
-
消除一行,您将获得
200
分。 -
每次组合将额外获得
60
分。 -
每次加速,您将获得
1
分。
impl Record {
pub fn compute(&mut self, rows_num: usize) {
if rows_num == 0 {
self.combo = 0;
return;
}
for _ in 0..rows_num {
self.combo_once()
}
}
fn combo_once(&mut self) {
self.score += 200 + (self.combo * 60) as i64;
self.eliminate_rows += 1;
self.combo += 1;
// 计算历史最高连击
if self.combo > self.high_combo {
self.high_combo = self.combo
}
}
}
加速模式
根据您的分数增加更新频率
pub fn update_by(&mut self, counter: i32) {
match self.cfg.accelerate {
true => {
let time = match self.record.score {
0..=5999 => 100,
6000..=9999 => 70,
10000..=24999 => 60,
25000..=39999 => 50,
40000..=59999 => 45,
_ => 40,
};
if counter % (time) == 0 {
self.update()
}
}
false => {
if counter % (100) == 0 {
self.update()
}
}
}
}
依赖项
~3–12MB
~127K SLoC