Как организовать структуру игры?
1. Единственного правильно ответа нет.
2. Сразу грамотно ещё никто никогда ничего не писал, не нужно надеяться и/или переживать. Если проект учебный, то просто пишите.
3. Если «экран» — это то, что отвечает за отрисовку игры, то он точно не должен управлять логикой.
4. Если возникают проблемы с определением того как управлять набором объектов, проще всего ввести дополнительную абстракцию (как Ваш вариант 2), только назовите не Engine (слишком уж обще), а, например, UnitsManager — все команды, касающиеся юнитов шлите ему, а он внутри уже пусть сам разберётся. Это позволит разделить всю логику на две независимые части (одна делает всё с юнитами, другая с ними ничего не делает), что упростит восприятие архитектуры.
Это, конечно, примерно.
Могу ошибаться, т.к. в целом на данный момент экспериментирую в том же направлении.
Для себя реализовал это примерно следующим образом: 
1) GUI - видимо то, что вы понимали под "экранами". Графический интерфейс с отрисовкой и точками входа для действий пользователя (KeyListener и иже с ними). Никакой логики здесь нет, только соответствующая отрисовка.
2) Engine, грубо говоря - "движок": здесь содержится вся игровая логика. Карты, юниты, итемы, состояния и прочее. Все взаимодействия между объектами и экземплярами классов - описаны здесь. 
3) Непосредственно Game - непосредственный "поток", включаемый по запуску приложения, который обуславливает взаимодействие GUI и Engine. Здесь инициализируется запуск Engine и GUI, а дальше по мере получения информации от движка и\или "экранов" - нужным образом обрабатывается взаимодействие. 
Но, как я уже говорил, на правильность подобного деления не претендую.