Прямо здесь: g.drawImage(theTile, 32*i,32*i, this);
Итак, для элемента, когда я = 2, вы говорите ему: «Два из двух, два вниз». Третий элемент печатает «Три из трех». Я не знаю, почему вы не используете двумерный массив, но чтобы заставить его работать с одномерным массивом, я полагаю, вы могли бы сделать:
g.drawImage(theTile, 32*(i%8),32*(i/8), this);