На вашем месте я бы создал два класса с резьбой
public class MyGuiGame extends Thread { // or impelment runnalbe
// implement run for your game model
// you can impelemnt a game service class to be used in
}
тогда я бы создал еще один класс
public class MyConsoleGame extends Thread { // or implement runnalble
// implement your console game here
}
тогда в моем классе appMain в методе запуска я бы сделал
public static void main(String[] args){
new MyConsoleGame().start();
new MyGuiGame().start;
}
это простая идея, основанная на потоках, но вы должны улучшить ее, используя все шаблоны проектирования и принципы безопасной потоков
для входной задачи вы должны реализовать потребительскую архитектуру производителя в своем хранилище данных (что вы должны прочитать)
тогда вы должны проверить те, что общее хранилище данных не является нулевым или пустым
попробуйте поискать простую потребительскую проблему производителя читателя писателя.