Я обычно не реализую, пока не понадобится. Я предпочитаю интерфейсы над абстрактными классами, потому что это дает немного большую гибкость. Если в некоторых классах наследования есть общее поведение, я перемещаю это и создаю абстрактный базовый класс. Я не вижу необходимости в обоих, так как они по существу поддерживают одну и ту же цель, а наличие обоих - плохой запах кода (imho), что решение было чрезмерно спроектировано.
Попробуйте наш игровой движок HTML5, Construct 2 ( http://www.scirra.com ). У нас есть обширная бесплатная версия, так что вы можете поиграть с ней!
Это система, основанная на событиях, что означает, что вам не нужно знать программирование, чтобы начать работать с ней. Однако его можно расширить с помощью нашего Javascript SDK, так что любой может написать свой собственный плагин для расширения его функциональности.
В нашей аркаде появилось несколько отличных игр, что доказывает, что они работают хорошо! http://www.scirra.com/arcade
Взгляните на Processing.js . Возможно, вы сможете использовать его для 2D-рисования и взаимодействия с пользователем.