ぶつかったときに進めなくするには、今は直接キー入力によって座標を変更していますが、それを一時的に別の変数に入れて、その変数の移動先をあらかじめ調べて問題ない(動ける場所)なら実際に座標に加算して、駄目なら加算しないようにすれば、ぶつかったときには動かないようにすることが出来ますよ。