Так же, как примечание, вы, вероятно, захотите в какой-то момент начать проверять «область обрезки», а не рисовать что-либо за пределами этой области. Ваш код настроен довольно хорошо, чтобы сделать это.
Другая вещь, которую вы могли бы сделать, чтобы ускорить его, - это «Двойной буфер». Создайте компонент размером с вашу карту, вызовите getGraphics () для этого компонента, сделайте все свои рисунки для этого нового графического объекта, затем просто нарисуйте свой компонент в реальном объекте Graphics, переданном в ваш метод рисования.
Хорошая вещь в этом заключается в том, что вы можете нарисовать всю свою карту до того, как вы когда-либо нажмете на оператор рисования, а затем сразу же выбросить ее.
Google Double Buffering на Java для получения дополнительной информации.