有了上一篇文章的小鸟游戏,对游戏入门有点了解了。
今天我们开始新游戏 (Build a Dungeon Crawler) 开发学习。
今天的任务,就是设计游戏地图 (Map) 和 Player。
例行,看看执行效果:
Modules
在建 Map 之前,我们必须先要解决一个棘手问题,在之前的游戏 demo 中,我们把代码都写在一个 main.rs
里,这不符合代码逻辑和规范,我们需要把代码拆解到其它文件中 —— 即根据业务将代码分模块 (Modules)。
就犹如图上所示,我们需要创建两个模块组件:crate::map 和 crate::player
按照惯例,我们新建一个 dungeoncrawl
项目:
1 | arduino复制代码cargo new dungeoncrawl |
Map
在 src
文件夹创建文件:map.rs
。
在地图上,主要有两种类型的东西:
1 | rust复制代码#[derive(Copy, Clone, PartialEq)] |
其中,Wall
利用符号 #
表示,Floor
用 .
平铺:
1 | rust复制代码// 地图类型平铺,使用 Vec 类型 |
Create the Player Structure
在之前的小鸟游戏已经定义 Player,这里基本一样,同样的,创建一个文件 player.rs
:
1 | rust复制代码use crate::prelude::*; |
道理也简单,Player
使用字符 @
表示,通过键盘「上下左右」控制 Player
走向,每按一次,走一格,同时,更新自己的位置。
但是,这里有一个前提,更新的点位,必须是 Floor
类型,就是说不能是墙:
1 | rust复制代码pub fn in_bounds(&self, point: Point) -> bool { |
有了 Map
和 Player
,这就可以在 main.rs
上引用这两个模块:
1 | rust复制代码use prelude::*; |
通过 mod
关键引用,同样的,借助 mod prelude
把引用的几个模块和 bracket_lib
放在一起。
同样的,我们创建 State
,把 Map
, Player
初始化,放入屏幕中:
1 | rust复制代码struct State { |
剩下的就是和小鸟 game 一样了:
1 | css复制代码fn main() -> BError { |
总结
结果就如同一开始的截图效果一致了,有了 Map
和 Player
接下来就好弄了。
今天主要是学习了 Module
开发,把代码分模块独立出去。
本文转载自: 掘金