Не вдаваясь в подробности можно сразу заметить, что Repaint можно сделать один раз после всех преобразований, как рекомендуется в мануале.
Ну и одинаковые вычисления типа (ycursor-6)/2+1 лучше делать перед циклом, чтобы они в цикле много раз не повторялись.
А на каком сайте вы нашли пример, любопытно бы на него взглянуть
ps. Тоже недавно делал Сапера.