Ну, на мой взгляд, с точки зрения ООП и масштабируемости, ваше решение правильнее (хотя не идеально), решение "из топа", прогнозирует победителя, исходя из характеристик здоровья и урона. Но, это будет работать лишь до тех пор, пока не изменятся условия боя, если добавить например блоки, криты, промахи, то решение из топа нужно будет тупо выбросить и переписать. А в вашем решении изменить только функцию attack.