Точно так же, как и без канваса. Берете свою задачу и делаете декомпозицию на более простые задачи/подзадачи/модули и повторяете пока не достигнете какого-то простого размера задачи. Т.е., не условно "ударить мечом и нанести урон", а переместить объект Х в точку Y, проверить на попадание по цели, вычислить урон, показать урон на экране, изменить состояние целевого объекта. Ну а далее организуете все это в модули: например группы связанных простейшие задач организуются в класс, а сами задачи - в методы. Из классов выстраивается логическая структура вашей задачи. Например: класс "ударить мечом", в котором используется класс "объект типа меч", а в классе объекта используется метод "переместить объект".