在继续上一篇的游戏开发之前,我们来看看成品效果:
主要增加了三个角色:
- ‘@’字符充当小鸟,负责上下移动,来躲避迎面而来的障碍物——墙壁;
- 就是我们的障碍物,障碍物随着时间从屏幕右侧不断左移;
- 还有就是得分,只要小鸟穿过障碍物,即得一分;如果没躲过,则,游戏 Game Over。
Adding the Player
‘@’字符充当小鸟
小鸟的作用在于需要上下移动,正常情况下处于“自由落地”状态,当我们点击空格键,让它飞起来,不至于落下。
跟之前一样,用一个 struct
结构体来表示 Player
,主要是坐标位置和上下移动的加速度变化值:
1 | rust复制代码struct Player { |
首先定一个@
字符显示效果:
1 | rust复制代码impl Player { |
这个比较好理解,在之后的代码过程中,去重点解释bracket-lib
引擎。
接下来就是定义两个动作,主要是加速度的变化问题,相信看代码能懂:
1 | rust复制代码fn gravity_and_move(&mut self) { |
Creating Obstacles
创建障碍
障碍物,主要考虑的是缺口的随机出现和缺口得大小。
1 | rust复制代码struct Obstacle { |
本文中,缺口的大小和得分有关,随着得分的越多,缺口越小,这也是游戏的难度不断增加,具体看 new
函数:
1 | rust复制代码impl Obstacle { |
墙体的设计,主要以缺口大小分成两段来控制 y 坐标,以自己的 x 坐标和小鸟的坐标确定每一祯 x 值,实现不断靠近小鸟的效果。
还需要增加一个小鸟和障碍物碰到的逻辑:
1 | ini复制代码fn hit_obstacle(&self, player: &Player) -> bool { |
这代码好理解,就不解释了。
Keeping Score
得分逻辑
得分逻辑就比较简单了,只要小鸟的 x 坐标 > 障碍物的 x 坐标,表示小鸟“飞过”障碍物,并且小鸟没碰上障碍物,则得分+1,并且重置新的障碍物:
1 | python复制代码fn play(&mut self, ctx: &mut BTerm) { |
其他的参数都是辅助于逻辑的完成,下面我把整个代码贴出来,大家看看也就懂了:
1 | rust复制代码use bracket_lib::prelude::*; |
整个运行效果,就是开篇的那样:
本文转载自: 掘金