C语言游戏设计,像素游戏的人物移动遇到障碍物判断问题

//游戏跟超级玛丽很像,是一个二维平面游戏,人物从下往上跑
//以下代码没有BUG,想询问判定其原理是什么,能否帮忙写个注释
//girl是我操控的角色
//关于left-x/y,right-x/y源代码没有交代是什么,我估计是人物图片素材的左上左下右上右下四个点(不一定准确,只是猜测)
//bar_right,bar_left 是判断左右是否有障碍物的变量,0为没有,1为有障碍
//人物素材宽度30,地面方块素材好像也是30
//下面的代码是判断是否有障碍物的,但是并不清楚原理

bar_right=bar_left = 0; //先设置初始值,即左右没有障碍物
if (girl_x % 30 == 0)
{
    left_x = girl_x/ 30-1;
    if (left_x < 0)
        left_x = 0;
    left_y = girl_y/30;
    right_x = girl_x / 30+1;
    right_y = girl_y / 30;
    if ((girl_y % 30 == 0 &&( b[right_y][right_x] != 0 || b[right_y + 1][right_x] != 0)) || (girl_y % 30 != 0 && (b[right_y][right_x] !=0 || b[right_y + 1][right_x] != 0 || b[right_y + 2][right_x] != 0)))
        bar_right = 1;
    if ((girl_y % 30 == 0 && (b[left_y][left_x] != 0 || b[left_y + 1][left_x] != 0)) || (girl_y % 30 != 0 && (b[left_y][left_x] != 0 || b[left_y + 1][left_x] != 0 || b[left_y + 2][left_x] != 0)))
        bar_left = 1;
}

img

画个图就清楚了,首先girl_x和girl_y应该是girl的左上角的像素坐标,left_x, left_y, right_x, right_y应该是网格的坐标。假设girl向上方移动,障碍物占据一个网格块(画斜线的块,b[y][x]==1)。
因为人物是从下往上跑,所以在y方向判断障碍物的时候需要一点提前量,分两种情况讨论:
1、当girl_x%30==0且girl_y%30==0,也就是图中所画的情况,girl刚好落在一个网格块内。此时考虑 b[right_y][right_x]和b[right_y + 1][right_x]是否有障碍物。
2、当girl_x%30==0且girl_y%30!=0,也就是girl在x方向上和网格线对齐,y方向上跨了两个网格。此时考虑 b[right_y][right_x],b[right_y + 1][right_x],b[right_y + 2][right_x]是否有障碍物。

关键是 数组 b 中的内容

b数组可以看成是一个map地图,而left_x,right_y这些是坐标点