Я смог наконец-то сделать ее. Правда я писал ее почти с нуля. На твой код почти не смотрел взял только задания. Есть пара мелочей, которые надо бы допилить, но в целом оно вроде работает.
http://wdfiles.ru/1FH7
Ну просто надо было несколько уровней сделать, а придумывать новые уровни было лень. Поэтому придумал так, и механика перехода уровней есть, и уровней самих нет.
С прыжками очень долго мучился. В итоге сделал так, что при прыжке герой получает отрицательную скорость и каждый цикл эта скорость увеличивается на какую-то величину (зависит от времени), пока не станет равной величине гравитации. И каждый цикл на всех действует эта вертикальная скорость, но твердая поверхность не дает им провалится.
Была еще проблема, что персонаж мог прыгать, даже если поверхность находилась через клетку от него, что выглядело убого. Но это тоже исправил, я просто после каждого прыжка ставлю персонажа на клетку Номер_клетки + 0.999, а при прыжке проверяю есть ли в клетке +0.001 от герой поверхность или нет.
Ну из явного дискомфорта ощущается то, что скорость по Y не обнуляется при столкновении башкой с блоком сверху :) И почему-то очки не начисляются :)
Насчет потолка знаю. А с очками у меня меня все вроде нормально. Правда они не обнуляются при смерти.