Tamagotchi battle
Battle 合约分为三个状态:Registration、Move 和 Waiting。让我们分解每个状态并解释它们的功能:
Registration
:在这个状态下, Battle 合约等待 Tamagotchi 的所有者注册他们的 Tamagotchi。一旦注册,合约将进入下一个状态。Move
:已注册的 Tamagotchi 所有者轮流进行战斗行动。Waiting
:当所有 Tamagotchi 所有者都完成了他们的行动后,合约允许他们装备他们的 Tamagotchi。GameIsOver
:当战斗结束时, Battle 合约会发送一条消息StartNewGame
。
以下是实现 Battle 合约的代码:
#[derive(Default)]
enum BattleState {
#[default]
Registration,
Moves,
Waiting,
GameIsOver,
}
Battle 程序状态:
#[derive(Default)]
pub struct Battle {
players: Vec<Player>,
state: BattleState,
current_turn: u8,
tmg_store_id: ActorId,
winner: ActorId,
steps: u8,
}
其中,players 是以下结构体:
#[derive(Default)]
pub struct Player {
owner: ActorId,
tmg_id: TamagotchiId,
energy: u16,
power: u16,
attributes: BTreeSet<AttributeId>,
}
要参与游戏,用户必须允许他们的合约接收与游戏相关的消息,如下所示:
TmgAction::TmgInfo
合约将以关于 Tamagotchi 所有者的信息作出回应:
TmgEvent::Owner(ActorId)