Как организовать код через ООП для простой задачи?
Ну как минимум можно добавить такую иерархию: базовый класс Cell с виртуальным методом Open, от него наследуются классы MineCell и EmptyCell. Метод MineCell.Open завершает игру, EmptyCell.Open открывает ячейку и показывает число мин вокруг.
На самом деле, написав программу с GUI вы, в большинстве случаев, уже использовали все механизмы ООП, даже если сами не написали ни одного класса. Но, думаю, что вашего преподавателя такой ответ не удовлетворит, поэтому вот несколько вариантов:
1. Наследовать от базовых графических элементов и создать: класс игрового поля, клетки, содержимого клетки... И куда фантазия заведует. Полиморфным будет метод рисования, как минимум. На мой взгляд вариант плох.
2. Наследовать от класса кнопки и реализовать соответствующие поведение: флажок там ставить на правый клик и т.д. Ну и при генерации поля кнопки будут просто размещаться в нужном порядке. Тут возможно придётся переопределить метод обработки событий для кнопки ну или что-то похожее сделать...
3. Есть же у вас класс игры, вот и добавьте класс предка IGame, с виртуальным методом play(). Это быстро и решительно позволит использовать недостающие принципы ООП. Самый короткий, и печальный вариант) Но цель же сдать работу, как я понимаю.