Made in heaven!! 2022-05-01 20:59 采纳率: 80%
浏览 127
已结题

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;
}
  • 写回答

3条回答 默认 最新

  • SmallAntJ 2022-05-02 19:37
    关注

    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]是否有障碍物。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 5月12日
  • 已采纳回答 5月4日
  • 赞助了问题酬金5元 5月2日
  • 创建了问题 5月1日

悬赏问题

  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效