O *Playbook* é uma estrutura alternativa para se criar coachs, ele funciona como uma [máquina de estados](https://pt.wikipedia.org/wiki/M%C3%A1quina_de_estados_finita) onde cada transição (chamada de ```trigger```) pode ser ativado por alguma flag vísivel no NeonFC e cada estado (chamado de ```Play```) é um conjunto de ```strategy``` a serem atribuídas aos robôs. Um exemplo dessa implementação pode ser vista no código usado para a IRONCup 2021: ```python import algorithms import strategy from entities import plays import math import time from commons.math import angular_speed, speed, rotate_via_numpy, unit_vector class Coach(object): def __init__(self, match): self.match = match self.playbook = plays.Playbook(self) one_to_one_play = plays.OneOneOnePlay(self) unstuck_play = plays.UnstuckPlay(self) stuck_trigger = plays.StuckRobotsTrigger(stuck_strategies=['attacker', 'midfielder']) wait_for_trigger = plays.WaitForTrigger(5) one_to_one_play.add_transition(stuck_trigger, unstuck_play) unstuck_play.add_transition(wait_for_trigger, one_to_one_play) self.playbook.add_play(one_to_one_play) self.playbook.add_play(unstuck_play) self.playbook.set_play(one_to_one_play) def decide (self): self.playbook.update() ``` ![](https://raw.githubusercontent.com/gist/Alexsandr0x/6ed90fb291276510972fe60d0705e671/raw/8a5b84360bc7a963252c16beb44d45cc60948945/neonfc_vsss_playbook_machine_state.svg) Nesse coach, temos duas "jogadas": ```one to one``` e ```unstuck```. E entre elas existem duas transições: ```stuck_trigger``` e ```wait_for_trigger```. No comando ```self.playbook.set_play(one_to_one_play)``` definimos que a jogada inicial será ```one to one```. Dessa forma, o sistema irá rodar o que está descrito nesse objeto até que alguma transição seja satisfeita. Nesse exemplo, a transição ```stuck_trigger``` verifica se um conjunto de robôs com as estratégias passadas no construtor estão em estado de ```stuck```. Caso estiverem, o Playbook troca para a jogada ```unstuck```. Atualmente, apenas esses dois triggers estão implementados, porém as implementações atuais servem de prova de conceito para um momento futuro, onde possamos criar transições para estratégias de bola parada. Para entender como cada um desses objetos está implementado, olhe os módulos [desse diretório](https://github.com/project-neon/NeonFC/tree/master/entities/plays).