Ваш код обнаружения столкновения в порядке, единственная проблема в том, что он работает не так, как вы хотите. Простым исправлением может быть проверка столкновения с платформами только тогда, когда игрок падает. (Строка 188)
if ((player.yvel > 0) && (player.y + player.height > rect[i].y) && (player.y < rect[i].y + rect[i].height))