small_dungeon/
small_dungeon.rs1use ::serde::{Deserialize, Serialize};
2use pasaka::*;
3
4#[derive(Serialize, Deserialize)]
5struct State {
6 gold: i32,
7 left_gold: i32,
8}
9
10#[passage]
11fn MainHall(mut h: PassageHandle, state: State) -> PassageResult {
12 h.text(format!("You have {} gold.", state.gold));
13
14 h.choice()
15 .option("Go left", |h, state| h.passage(Left, state))
16 .option("Go right", |h, _| h.passage(Right, ()))
17 .build(state)
18}
19
20#[passage]
21fn Left(mut h: PassageHandle, mut state: State) -> PassageResult {
22 if state.left_gold > 0 {
23 h.text(format!("You find {} gold!", state.left_gold));
24 state.gold += state.left_gold;
25 state.left_gold = 0;
26 } else {
27 h.text("The room is empty now...");
28 }
29
30 h.choice()
31 .option("Return", |h, state| h.passage(MainHall, state))
32 .build(state)
33}
34
35#[passage]
36fn Right(mut h: PassageHandle, _: ()) -> PassageResult {
37 h.text("Rocks fall on you, and you die.");
38
39 h.choice().build(())
40}
41
42pub fn main() {
43 CliRunner::run(MainHall.with_state(State {
44 gold: 0,
45 left_gold: 5,
46 }));
47}